aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/Attribute.h
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/Attribute.h')
-rw-r--r--Minecraft.World/Attribute.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/Minecraft.World/Attribute.h b/Minecraft.World/Attribute.h
new file mode 100644
index 00000000..1fb5246b
--- /dev/null
+++ b/Minecraft.World/Attribute.h
@@ -0,0 +1,71 @@
+#pragma once
+class AttributeModifier;
+
+// 4J: This ID is serialised into save data so new attributes must always be added after existing ones
+enum eATTRIBUTE_ID
+{
+ // 1.6.4
+ eAttributeId_GENERIC_MAXHEALTH,
+ eAttributeId_GENERIC_FOLLOWRANGE,
+ eAttributeId_GENERIC_KNOCKBACKRESISTANCE,
+ eAttributeId_GENERIC_MOVEMENTSPEED,
+ eAttributeId_GENERIC_ATTACKDAMAGE,
+ eAttributeId_HORSE_JUMPSTRENGTH,
+ eAttributeId_ZOMBIE_SPAWNREINFORCEMENTS,
+
+ // 1.8+
+ // New attributes go here
+
+ eAttributeId_COUNT
+};
+
+class Attribute
+{
+public:
+ static const int MAX_NAME_LENGTH = 64;
+
+ /**
+ * 4J: Changed this from a string name to an ID
+ * Gets the ID of this attribute, for serialization.
+ *
+ * @return Name of this attribute.
+ */
+ virtual eATTRIBUTE_ID getId() = 0;
+
+ /**
+ * Sanitizes an attribute value, making sure it's not out of range and is an acceptable amount.
+ *
+ *
+ * @param value Value to sanitize.
+ * @return Sanitized value, safe for use.
+ */
+ virtual double sanitizeValue(double value) = 0;
+
+ /**
+ * Get the default value of this attribute, to be used upon creation.
+ *
+ * @return Default value.
+ */
+ virtual double getDefaultValue() = 0;
+
+ /**
+ * Checks if this attribute should be synced to the client.
+ *
+ * Attributes should be serverside only unless the client needs to know about it.
+ *
+ * @return True if the client should know about this attribute.
+ */
+ virtual bool isClientSyncable() = 0;
+
+ // 4J: Added to retrieve string ID for attribute
+ static int getName(eATTRIBUTE_ID id);
+
+protected:
+ static const int AttributeNames [];
+};
+
+#ifdef __ORBIS__
+typedef unordered_map<eATTRIBUTE_ID, AttributeModifier *, std::hash<int>> attrAttrModMap;
+#else
+typedef unordered_map<eATTRIBUTE_ID, AttributeModifier *> attrAttrModMap;
+#endif \ No newline at end of file