the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 141 lines 3.7 kB view raw
1#include "stdafx.h" 2 3#include "net.minecraft.world.entity.ai.attributes.h" 4#include "PacketListener.h" 5#include "UpdateAttributesPacket.h" 6 7UpdateAttributesPacket::UpdateAttributesPacket() 8{ 9 entityId = 0; 10} 11 12UpdateAttributesPacket::UpdateAttributesPacket(int entityId, unordered_set<AttributeInstance *> *values) 13{ 14 this->entityId = entityId; 15 16 for (AUTO_VAR(it,values->begin()); it != values->end(); ++it) 17 { 18 AttributeInstance *value = *it; 19 unordered_set<AttributeModifier*> mods; 20 value->getModifiers(mods); 21 attributes.insert(new AttributeSnapshot(value->getAttribute()->getId(), value->getBaseValue(), &mods)); 22 } 23} 24 25UpdateAttributesPacket::~UpdateAttributesPacket() 26{ 27 // Delete modifiers - these are always copies, either on construction or on read 28 for(AUTO_VAR(it,attributes.begin()); it != attributes.end(); ++it) 29 { 30 delete (*it); 31 } 32} 33 34void UpdateAttributesPacket::read(DataInputStream *dis) 35{ 36 entityId = dis->readInt(); 37 38 int attributeCount = dis->readInt(); 39 for (int i = 0; i < attributeCount; i++) 40 { 41 eATTRIBUTE_ID id = static_cast<eATTRIBUTE_ID>(dis->readShort()); 42 double base = dis->readDouble(); 43 unordered_set<AttributeModifier *> modifiers = unordered_set<AttributeModifier *>(); 44 int modifierCount = dis->readShort(); 45 46 for (int j = 0; j < modifierCount; j++) 47 { 48 eMODIFIER_ID id = static_cast<eMODIFIER_ID>(dis->readInt()); 49 double amount = dis->readDouble(); 50 byte operation = dis->readByte(); 51 modifiers.insert(new AttributeModifier(id, /*L"Unknown synced attribute modifier",*/ amount, operation)); 52 } 53 54 attributes.insert(new AttributeSnapshot(id, base, &modifiers)); 55 56 // modifiers is copied in AttributeSnapshot ctor so delete contents 57 for(AUTO_VAR(it, modifiers.begin()); it != modifiers.end(); ++it) 58 { 59 delete *it; 60 } 61 } 62} 63 64void UpdateAttributesPacket::write(DataOutputStream *dos) 65{ 66 dos->writeInt(entityId); 67 dos->writeInt(attributes.size()); 68 69 for(AUTO_VAR(it, attributes.begin()); it != attributes.end(); ++it) 70 { 71 AttributeSnapshot *attribute = (*it); 72 73 unordered_set<AttributeModifier *> *modifiers = attribute->getModifiers(); 74 75 dos->writeShort(attribute->getId()); 76 dos->writeDouble(attribute->getBase()); 77 dos->writeShort(modifiers->size()); 78 79 for (AUTO_VAR(it2, modifiers->begin()); it2 != modifiers->end(); ++it2) 80 { 81 AttributeModifier *modifier = (*it2); 82 dos->writeInt(modifier->getId()); 83 dos->writeDouble(modifier->getAmount()); 84 dos->writeByte(modifier->getOperation()); 85 } 86 } 87} 88 89void UpdateAttributesPacket::handle(PacketListener *listener) 90{ 91 listener->handleUpdateAttributes(shared_from_this()); 92} 93 94int UpdateAttributesPacket::getEstimatedSize() 95{ 96 return 4 + 4 + attributes.size() * (8 + 8 + 8); 97} 98 99int UpdateAttributesPacket::getEntityId() 100{ 101 return entityId; 102} 103 104unordered_set<UpdateAttributesPacket::AttributeSnapshot *> UpdateAttributesPacket::getValues() 105{ 106 return attributes; 107} 108 109UpdateAttributesPacket::AttributeSnapshot::AttributeSnapshot(eATTRIBUTE_ID id, double base, unordered_set<AttributeModifier *> *modifiers) 110{ 111 this->id = id; 112 this->base = base; 113 114 for(AUTO_VAR(it,modifiers->begin()); it != modifiers->end(); ++it) 115 { 116 this->modifiers.insert( new AttributeModifier((*it)->getId(), (*it)->getAmount(), (*it)->getOperation())); 117 } 118} 119 120UpdateAttributesPacket::AttributeSnapshot::~AttributeSnapshot() 121{ 122 for(AUTO_VAR(it, modifiers.begin()); it != modifiers.end(); ++it) 123 { 124 delete (*it); 125 } 126} 127 128eATTRIBUTE_ID UpdateAttributesPacket::AttributeSnapshot::getId() 129{ 130 return id; 131} 132 133double UpdateAttributesPacket::AttributeSnapshot::getBase() 134{ 135 return base; 136} 137 138unordered_set<AttributeModifier *> *UpdateAttributesPacket::AttributeSnapshot::getModifiers() 139{ 140 return &modifiers; 141}