aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/EnchantmentHelper.h
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/EnchantmentHelper.h')
-rw-r--r--Minecraft.World/EnchantmentHelper.h110
1 files changed, 110 insertions, 0 deletions
diff --git a/Minecraft.World/EnchantmentHelper.h b/Minecraft.World/EnchantmentHelper.h
new file mode 100644
index 00000000..9f7de5c5
--- /dev/null
+++ b/Minecraft.World/EnchantmentHelper.h
@@ -0,0 +1,110 @@
+#pragma once
+
+class ItemInstance;
+class Inventory;
+class DamageSource;
+class Enchantment;
+class EnchantmentInstance;
+
+class EnchantmentHelper
+{
+private:
+ static Random random;
+
+public:
+ static int getEnchantmentLevel(int enchantmentId, shared_ptr<ItemInstance> piece);
+ static unordered_map<int, int> *getEnchantments(shared_ptr<ItemInstance> item);
+ static void setEnchantments(unordered_map<int, int> *enchantments, shared_ptr<ItemInstance> item);
+
+ static int getEnchantmentLevel(int enchantmentId, ItemInstanceArray inventory);
+
+private:
+
+
+ class EnchantmentIterationMethod
+ {
+ public:
+ virtual void doEnchantment(Enchantment *enchantment, int level) = 0;
+ };
+
+ static void runIterationOnItem(EnchantmentIterationMethod &method, shared_ptr<ItemInstance> piece);
+ static void runIterationOnInventory(EnchantmentIterationMethod &method, ItemInstanceArray inventory);
+
+ class GetDamageProtectionIteration : public EnchantmentIterationMethod
+ {
+ public:
+ int sum;
+ DamageSource *source;
+
+ virtual void doEnchantment(Enchantment *enchantment, int level);
+ };
+
+ static GetDamageProtectionIteration getDamageProtectionIteration;
+
+ /**
+ * Fetches the protection value for enchanted items.
+ *
+ * @param inventory
+ * @param source
+ * @return
+ */
+public:
+ static int getDamageProtection(shared_ptr<Inventory> inventory, DamageSource *source);
+
+private:
+ class GetDamageBonusIteration : public EnchantmentIterationMethod
+ {
+ public:
+ int sum;
+ shared_ptr<Mob> target;
+
+ virtual void doEnchantment(Enchantment *enchantment, int level);
+ };
+
+ static GetDamageBonusIteration getDamageBonusIteration;
+
+ /**
+ *
+ * @param inventory
+ * @param target
+ * @return
+ */
+public:
+ static int getDamageBonus(shared_ptr<Inventory> inventory, shared_ptr<Mob> target);
+ static int getKnockbackBonus(shared_ptr<Inventory> inventory, shared_ptr<Mob> target);
+ static int getFireAspect(shared_ptr<Mob> source);
+ static int getOxygenBonus(shared_ptr<Inventory> inventory);
+ static int getDiggingBonus(shared_ptr<Inventory> inventory);
+ static int getDigDurability(shared_ptr<Inventory> inventory);
+ static bool hasSilkTouch(shared_ptr<Inventory> inventory);
+ static int getDiggingLootBonus(shared_ptr<Inventory> inventory);
+ static int getKillingLootBonus(shared_ptr<Inventory> inventory);
+ static bool hasWaterWorkerBonus(shared_ptr<Inventory> inventory);
+ static int getArmorThorns(shared_ptr<Mob> source);
+ static shared_ptr<ItemInstance> getRandomItemWith(Enchantment *enchantment, shared_ptr<Mob> source);
+
+ /**
+ *
+ * @param random
+ * @param slot
+ * The table slot, 0-2
+ * @param bookcases
+ * How many book cases that are found around the table.
+ * @param itemInstance
+ * Which item that is being enchanted.
+ * @return The enchantment cost, 0 means unchantable, 50 is max.
+ */
+ static int getEnchantmentCost(Random *random, int slot, int bookcases, shared_ptr<ItemInstance> itemInstance);
+
+ static shared_ptr<ItemInstance> enchantItem(Random *random, shared_ptr<ItemInstance> itemInstance, int enchantmentCost);
+
+ /**
+ *
+ * @param random
+ * @param itemInstance
+ * @param enchantmentCost
+ * @return
+ */
+ static vector<EnchantmentInstance *> *selectEnchantment(Random *random, shared_ptr<ItemInstance> itemInstance, int enchantmentCost);
+ static unordered_map<int, EnchantmentInstance *> *getAvailableEnchantmentResults(int value, shared_ptr<ItemInstance> itemInstance);
+}; \ No newline at end of file