aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/ServersideAttributeMap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/ServersideAttributeMap.cpp')
-rw-r--r--Minecraft.World/ServersideAttributeMap.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/Minecraft.World/ServersideAttributeMap.cpp b/Minecraft.World/ServersideAttributeMap.cpp
new file mode 100644
index 00000000..ec75aa22
--- /dev/null
+++ b/Minecraft.World/ServersideAttributeMap.cpp
@@ -0,0 +1,83 @@
+#include "stdafx.h"
+
+#include "Attribute.h"
+#include "RangedAttribute.h"
+#include "AttributeInstance.h"
+#include "ModifiableAttributeInstance.h"
+#include "ServersideAttributeMap.h"
+
+AttributeInstance *ServersideAttributeMap::getInstance(Attribute *attribute)
+{
+ return BaseAttributeMap::getInstance(attribute);
+}
+
+AttributeInstance *ServersideAttributeMap::getInstance(eATTRIBUTE_ID id)
+{
+ AttributeInstance *result = BaseAttributeMap::getInstance(id);
+
+ // 4J: Removed legacy name
+ // If we didn't find it, search by legacy name
+ /*if (result == NULL)
+ {
+ AUTO_VAR(it, attributesByLegacy.find(name));
+ if(it != attributesByLegacy.end())
+ {
+ result = it->second;
+ }
+ }*/
+
+ return result;
+}
+
+AttributeInstance *ServersideAttributeMap::registerAttribute(Attribute *attribute)
+{
+ AUTO_VAR(it,attributesById.find(attribute->getId()));
+ if (it != attributesById.end())
+ {
+ return it->second;
+ }
+
+ AttributeInstance *instance = new ModifiableAttributeInstance(this, attribute);
+ attributesById.insert(std::pair<eATTRIBUTE_ID, AttributeInstance *>(attribute->getId(), instance));
+
+ // 4J: Removed legacy name
+ // If this is a ranged attribute also add to legacy name map
+ /*RangedAttribute *rangedAttribute = dynamic_cast<RangedAttribute*>(attribute);
+ if (rangedAttribute != NULL && rangedAttribute->getImportLegacyName() != L"")
+ {
+ attributesByLegacy.insert(std::pair<wstring, AttributeInstance*>(rangedAttribute->getImportLegacyName(), instance));
+ }*/
+
+ return instance;
+}
+
+void ServersideAttributeMap::onAttributeModified(ModifiableAttributeInstance *attributeInstance)
+{
+ if (attributeInstance->getAttribute()->isClientSyncable())
+ {
+ dirtyAttributes.insert(attributeInstance);
+ }
+}
+
+unordered_set<AttributeInstance *> *ServersideAttributeMap::getDirtyAttributes()
+{
+ return &dirtyAttributes;
+}
+
+unordered_set<AttributeInstance *> *ServersideAttributeMap::getSyncableAttributes()
+{
+ unordered_set<AttributeInstance *> *result = new unordered_set<AttributeInstance *>();
+ vector<AttributeInstance *> atts;
+ getAttributes(atts);
+ for (int i = 0; i < atts.size(); i++)
+ {
+ AttributeInstance *instance = atts.at(i);
+
+ if (instance->getAttribute()->isClientSyncable())
+ {
+ result->insert(instance);
+ }
+ }
+
+ return result;
+} \ No newline at end of file