summaryrefslogtreecommitdiffstats
path: root/src/Enchantments.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Enchantments.cpp')
-rw-r--r--src/Enchantments.cpp769
1 files changed, 769 insertions, 0 deletions
diff --git a/src/Enchantments.cpp b/src/Enchantments.cpp
index 9d4e23e0a..3caebdff5 100644
--- a/src/Enchantments.cpp
+++ b/src/Enchantments.cpp
@@ -5,6 +5,7 @@
#include "Globals.h"
#include "Enchantments.h"
#include "WorldStorage/FastNBT.h"
+#include "FastRandom.h"
@@ -218,6 +219,774 @@ bool cEnchantments::operator !=(const cEnchantments & a_Other) const
+void cEnchantments::AddItemEnchantmentWeights(cWeightedEnchantments & a_Enchantments, short & a_ItemType, int a_EnchantmentLevel)
+{
+ if (ItemCategory::IsSword(a_ItemType))
+ {
+ // Sharpness
+ if (a_EnchantmentLevel >= 34 && a_EnchantmentLevel <= 54)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Sharpness=4"));
+ }
+ else if (a_EnchantmentLevel >= 23 && a_EnchantmentLevel <= 43)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Sharpness=3"));
+ }
+ else if (a_EnchantmentLevel >= 12 && a_EnchantmentLevel <= 32)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Sharpness=2"));
+ }
+ else if (a_EnchantmentLevel >= 1 && a_EnchantmentLevel <= 21)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Sharpness=1"));
+ }
+
+ // Smite
+ if (a_EnchantmentLevel >= 29 && a_EnchantmentLevel <= 49)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Smite=4"));
+ }
+ else if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 41)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Smite=3"));
+ }
+ else if (a_EnchantmentLevel >= 13 && a_EnchantmentLevel <= 33)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Smite=2"));
+ }
+ else if (a_EnchantmentLevel >= 5 && a_EnchantmentLevel <= 25)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Smite=1"));
+ }
+
+ // Bane of Arthropods
+ if (a_EnchantmentLevel >= 29 && a_EnchantmentLevel <= 49)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("BaneOfArthropods=4"));
+ }
+ else if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 41)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("BaneOfArthropods=3"));
+ }
+ else if (a_EnchantmentLevel >= 13 && a_EnchantmentLevel <= 33)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("BaneOfArthropods=2"));
+ }
+ else if (a_EnchantmentLevel >= 5 && a_EnchantmentLevel <= 25)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("BaneOfArthropods=1"));
+ }
+
+ // Knockback
+ if (a_EnchantmentLevel >= 25 && a_EnchantmentLevel <= 75)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Knockback=2"));
+ }
+ else if (a_EnchantmentLevel >= 5 && a_EnchantmentLevel <= 55)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Knockback=1"));
+ }
+
+ // Fire Aspect
+ if (a_EnchantmentLevel >= 30 && a_EnchantmentLevel <= 80)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("FireAspect=2"));
+ }
+ else if (a_EnchantmentLevel >= 10 && a_EnchantmentLevel <= 60)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("FireAspect=1"));
+ }
+
+ // Looting
+ if (a_EnchantmentLevel >= 33 && a_EnchantmentLevel <= 83)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Looting=3"));
+ }
+ else if (a_EnchantmentLevel >= 24 && a_EnchantmentLevel <= 74)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Looting=2"));
+ }
+ else if (a_EnchantmentLevel >= 15 && a_EnchantmentLevel <= 65)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Looting=1"));
+ }
+ }
+
+ else if (ItemCategory::IsTool(a_ItemType))
+ {
+ // Efficiency
+ if (a_EnchantmentLevel >= 31 && a_EnchantmentLevel <= 81)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Efficiency=4"));
+ }
+ else if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 71)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Efficiency=3"));
+ }
+ else if (a_EnchantmentLevel >= 11 && a_EnchantmentLevel <= 61)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Efficiency=2"));
+ }
+ else if (a_EnchantmentLevel >= 1 && a_EnchantmentLevel <= 51)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Efficiency=1"));
+ }
+
+ // Silk Touch
+ if (a_EnchantmentLevel >= 15 && a_EnchantmentLevel <= 65)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("SilkTouch=1"));
+ }
+
+ // Fortune
+ if (a_EnchantmentLevel >= 33 && a_EnchantmentLevel <= 83)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Fortune=3"));
+ }
+ else if (a_EnchantmentLevel >= 24 && a_EnchantmentLevel <= 74)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Fortune=2"));
+ }
+ else if (a_EnchantmentLevel >= 15 && a_EnchantmentLevel <= 65)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Fortune=1"));
+ }
+ }
+
+ else if (ItemCategory::IsArmor(a_ItemType))
+ {
+ // Protection
+ if (a_EnchantmentLevel >= 34 && a_EnchantmentLevel <= 54)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Protection=4"));
+ }
+ else if (a_EnchantmentLevel >= 23 && a_EnchantmentLevel <= 43)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Protection=3"));
+ }
+ else if (a_EnchantmentLevel >= 12 && a_EnchantmentLevel <= 32)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Protection=2"));
+ }
+ else if (a_EnchantmentLevel >= 1 && a_EnchantmentLevel <= 21)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Protection=1"));
+ }
+
+ // Fire Protection
+ if (a_EnchantmentLevel >= 34 && a_EnchantmentLevel <= 46)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FireProtection=4"));
+ }
+ else if (a_EnchantmentLevel >= 26 && a_EnchantmentLevel <= 38)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FireProtection=3"));
+ }
+ else if (a_EnchantmentLevel >= 18 && a_EnchantmentLevel <= 30)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FireProtection=2"));
+ }
+ else if (a_EnchantmentLevel >= 10 && a_EnchantmentLevel <= 22)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FireProtection=1"));
+ }
+
+ // Blast Protection
+ if (a_EnchantmentLevel >= 29 && a_EnchantmentLevel <= 41)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("BlastProtection=4"));
+ }
+ else if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 33)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("BlastProtection=3"));
+ }
+ else if (a_EnchantmentLevel >= 13 && a_EnchantmentLevel <= 25)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("BlastProtection=2"));
+ }
+ else if (a_EnchantmentLevel >= 5 && a_EnchantmentLevel <= 17)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("BlastProtection=1"));
+ }
+
+ // Projectile Protection
+ if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 36)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("ProjectileProtection=4"));
+ }
+ else if (a_EnchantmentLevel >= 15 && a_EnchantmentLevel <= 30)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("ProjectileProtection=3"));
+ }
+ else if (a_EnchantmentLevel >= 9 && a_EnchantmentLevel <= 24)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("ProjectileProtection=2"));
+ }
+ else if (a_EnchantmentLevel >= 3 && a_EnchantmentLevel <= 18)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("ProjectileProtection=1"));
+ }
+
+ // Thorns
+ if (a_EnchantmentLevel >= 50 && a_EnchantmentLevel <= 100)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Thorns=3"));
+ }
+ else if (a_EnchantmentLevel >= 30 && a_EnchantmentLevel <= 80)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Thorns=2"));
+ }
+ else if (a_EnchantmentLevel >= 10 && a_EnchantmentLevel <= 60)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Thorns=1"));
+ }
+
+
+ if (ItemCategory::IsHelmet(a_ItemType))
+ {
+ // Respiration
+ if (a_EnchantmentLevel >= 30 && a_EnchantmentLevel <= 60)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Respiration=3"));
+ }
+ else if (a_EnchantmentLevel >= 20 && a_EnchantmentLevel <= 50)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Respiration=2"));
+ }
+ else if (a_EnchantmentLevel >= 10 && a_EnchantmentLevel <= 40)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Respiration=1"));
+ }
+
+ // Aqua Affinity
+ if (a_EnchantmentLevel >= 1 && a_EnchantmentLevel <= 41)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("AquaAffinity=1"));
+ }
+ }
+
+ else if (ItemCategory::IsBoots(a_ItemType))
+ {
+ // Feather Fall
+ if (a_EnchantmentLevel >= 23 && a_EnchantmentLevel <= 33)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FeatherFalling=4"));
+ }
+ else if (a_EnchantmentLevel >= 17 && a_EnchantmentLevel <= 27)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FeatherFalling=3"));
+ }
+ else if (a_EnchantmentLevel >= 11 && a_EnchantmentLevel <= 21)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FeatherFalling=2"));
+ }
+ else if (a_EnchantmentLevel >= 5 && a_EnchantmentLevel <= 15)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FeatherFalling=1"));
+ }
+ }
+ }
+
+ else if (a_ItemType == E_ITEM_BOW)
+ {
+ // Power
+ if (a_EnchantmentLevel >= 31 && a_EnchantmentLevel <= 46)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Power=4"));
+ }
+ else if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 36)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Power=3"));
+ }
+ else if (a_EnchantmentLevel >= 11 && a_EnchantmentLevel <= 26)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Power=2"));
+ }
+ else if (a_EnchantmentLevel >= 1 && a_EnchantmentLevel <= 16)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Power=1"));
+ }
+
+ // Punch
+ if (a_EnchantmentLevel >= 32 && a_EnchantmentLevel <= 57)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Punch=2"));
+ }
+ else if (a_EnchantmentLevel >= 12 && a_EnchantmentLevel <= 37)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Punch=1"));
+ }
+
+ // Flame and Infinity
+ if (a_EnchantmentLevel >= 20 && a_EnchantmentLevel <= 50)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Flame=1"));
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Infinity=1"));
+ }
+ }
+
+ else if (a_ItemType == E_ITEM_FISHING_ROD)
+ {
+ // Luck of the Sea and Lure
+ if (a_EnchantmentLevel >= 33 && a_EnchantmentLevel <= 83)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("LuckOfTheSea=3"));
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Lure=3"));
+ }
+ else if (a_EnchantmentLevel >= 24 && a_EnchantmentLevel <= 74)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("LuckOfTheSea=2"));
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Lure=2"));
+ }
+ else if (a_EnchantmentLevel >= 15 && a_EnchantmentLevel <= 65)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("LuckOfTheSea=1"));
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Lure=1"));
+ }
+ }
+
+ else if (a_ItemType == E_ITEM_BOOK)
+ {
+ // All &a_Enchantments
+
+ // Sharpness
+ if (a_EnchantmentLevel >= 34 && a_EnchantmentLevel <= 54)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Sharpness=4"));
+ }
+ else if (a_EnchantmentLevel >= 23 && a_EnchantmentLevel <= 43)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Sharpness=3"));
+ }
+ else if (a_EnchantmentLevel >= 12 && a_EnchantmentLevel <= 32)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Sharpness=2"));
+ }
+ else if (a_EnchantmentLevel >= 1 && a_EnchantmentLevel <= 21)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Sharpness=1"));
+ }
+
+ // Smite
+ if (a_EnchantmentLevel >= 29 && a_EnchantmentLevel <= 49)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Smite=4"));
+ }
+ else if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 41)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Smite=3"));
+ }
+ else if (a_EnchantmentLevel >= 13 && a_EnchantmentLevel <= 33)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Smite=2"));
+ }
+ else if (a_EnchantmentLevel >= 5 && a_EnchantmentLevel <= 25)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Smite=1"));
+ }
+
+ // Bane of Arthropods
+ if (a_EnchantmentLevel >= 29 && a_EnchantmentLevel <= 49)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("BaneOfArthropods=4"));
+ }
+ else if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 41)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("BaneOfArthropods=3"));
+ }
+ else if (a_EnchantmentLevel >= 13 && a_EnchantmentLevel <= 33)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("BaneOfArthropods=2"));
+ }
+ else if (a_EnchantmentLevel >= 5 && a_EnchantmentLevel <= 25)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("BaneOfArthropods=1"));
+ }
+
+ // Knockback
+ if (a_EnchantmentLevel >= 25 && a_EnchantmentLevel <= 75)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Knockback=2"));
+ }
+ else if (a_EnchantmentLevel >= 5 && a_EnchantmentLevel <= 55)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Knockback=1"));
+ }
+
+ // Fire Aspect
+ if (a_EnchantmentLevel >= 30 && a_EnchantmentLevel <= 80)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("FireAspect=2"));
+ }
+ else if (a_EnchantmentLevel >= 10 && a_EnchantmentLevel <= 60)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("FireAspect=1"));
+ }
+
+ // Looting
+ if (a_EnchantmentLevel >= 33 && a_EnchantmentLevel <= 83)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Looting=3"));
+ }
+ else if (a_EnchantmentLevel >= 24 && a_EnchantmentLevel <= 74)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Looting=2"));
+ }
+ else if (a_EnchantmentLevel >= 15 && a_EnchantmentLevel <= 65)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Looting=1"));
+ }
+
+ // Efficiency
+ if (a_EnchantmentLevel >= 31 && a_EnchantmentLevel <= 81)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Efficiency=4"));
+ }
+ else if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 71)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Efficiency=3"));
+ }
+ else if (a_EnchantmentLevel >= 11 && a_EnchantmentLevel <= 61)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Efficiency=2"));
+ }
+ else if (a_EnchantmentLevel >= 1 && a_EnchantmentLevel <= 51)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Efficiency=1"));
+ }
+
+ // Silk Touch
+ if (a_EnchantmentLevel >= 15 && a_EnchantmentLevel <= 65)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("SilkTouch=1"));
+ }
+
+ // Fortune
+ if (a_EnchantmentLevel >= 33 && a_EnchantmentLevel <= 83)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Fortune=3"));
+ }
+ else if (a_EnchantmentLevel >= 24 && a_EnchantmentLevel <= 74)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Fortune=2"));
+ }
+ else if (a_EnchantmentLevel >= 15 && a_EnchantmentLevel <= 65)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Fortune=1"));
+ }
+
+ // Protection
+ if (a_EnchantmentLevel >= 34 && a_EnchantmentLevel <= 54)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Protection=4"));
+ }
+ else if (a_EnchantmentLevel >= 23 && a_EnchantmentLevel <= 43)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Protection=3"));
+ }
+ else if (a_EnchantmentLevel >= 12 && a_EnchantmentLevel <= 32)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Protection=2"));
+ }
+ else if (a_EnchantmentLevel >= 1 && a_EnchantmentLevel <= 21)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Protection=1"));
+ }
+
+ // Fire Protection
+ if (a_EnchantmentLevel >= 34 && a_EnchantmentLevel <= 46)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FireProtection=4"));
+ }
+ else if (a_EnchantmentLevel >= 26 && a_EnchantmentLevel <= 38)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FireProtection=3"));
+ }
+ else if (a_EnchantmentLevel >= 18 && a_EnchantmentLevel <= 30)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FireProtection=2"));
+ }
+ else if (a_EnchantmentLevel >= 10 && a_EnchantmentLevel <= 22)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FireProtection=1"));
+ }
+
+ // Blast Protection
+ if (a_EnchantmentLevel >= 29 && a_EnchantmentLevel <= 41)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("BlastProtection=4"));
+ }
+ else if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 33)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("BlastProtection=3"));
+ }
+ else if (a_EnchantmentLevel >= 13 && a_EnchantmentLevel <= 25)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("BlastProtection=2"));
+ }
+ else if (a_EnchantmentLevel >= 5 && a_EnchantmentLevel <= 17)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("BlastProtection=1"));
+ }
+
+ // Projectile Protection
+ if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 36)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("ProjectileProtection=4"));
+ }
+ else if (a_EnchantmentLevel >= 15 && a_EnchantmentLevel <= 30)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("ProjectileProtection=3"));
+ }
+ else if (a_EnchantmentLevel >= 9 && a_EnchantmentLevel <= 24)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("ProjectileProtection=2"));
+ }
+ else if (a_EnchantmentLevel >= 3 && a_EnchantmentLevel <= 18)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("ProjectileProtection=1"));
+ }
+
+ // Thorns
+ if (a_EnchantmentLevel >= 50 && a_EnchantmentLevel <= 100)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Thorns=3"));
+ }
+ else if (a_EnchantmentLevel >= 30 && a_EnchantmentLevel <= 80)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Thorns=2"));
+ }
+ else if (a_EnchantmentLevel >= 10 && a_EnchantmentLevel <= 60)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Thorns=1"));
+ }
+
+ // Respiration
+ if (a_EnchantmentLevel >= 30 && a_EnchantmentLevel <= 60)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Respiration=3"));
+ }
+ else if (a_EnchantmentLevel >= 20 && a_EnchantmentLevel <= 50)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Respiration=2"));
+ }
+ else if (a_EnchantmentLevel >= 10 && a_EnchantmentLevel <= 40)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Respiration=1"));
+ }
+
+ // Aqua Affinity
+ if (a_EnchantmentLevel >= 1 && a_EnchantmentLevel <= 41)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("AquaAffinity=1"));
+ }
+
+ // Feather Fall
+ if (a_EnchantmentLevel >= 23 && a_EnchantmentLevel <= 33)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FeatherFalling=4"));
+ }
+ else if (a_EnchantmentLevel >= 17 && a_EnchantmentLevel <= 27)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FeatherFalling=3"));
+ }
+ else if (a_EnchantmentLevel >= 11 && a_EnchantmentLevel <= 21)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FeatherFalling=2"));
+ }
+ else if (a_EnchantmentLevel >= 5 && a_EnchantmentLevel <= 15)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("FeatherFalling=1"));
+ }
+
+ // Power
+ if (a_EnchantmentLevel >= 31 && a_EnchantmentLevel <= 46)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Power=4"));
+ }
+ else if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 36)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Power=3"));
+ }
+ else if (a_EnchantmentLevel >= 11 && a_EnchantmentLevel <= 26)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Power=2"));
+ }
+ else if (a_EnchantmentLevel >= 1 && a_EnchantmentLevel <= 16)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 10, cEnchantments("Power=1"));
+ }
+
+ // Punch
+ if (a_EnchantmentLevel >= 32 && a_EnchantmentLevel <= 57)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Punch=2"));
+ }
+ else if (a_EnchantmentLevel >= 12 && a_EnchantmentLevel <= 37)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Punch=1"));
+ }
+
+ // Flame and Infinity
+ if (a_EnchantmentLevel >= 20 && a_EnchantmentLevel <= 50)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 2, cEnchantments("Flame=1"));
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Infinity=1"));
+ }
+
+ // Luck of the Sea and Lure
+ if (a_EnchantmentLevel >= 33 && a_EnchantmentLevel <= 83)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("LuckOfTheSea=3"));
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Lure=3"));
+ }
+ else if (a_EnchantmentLevel >= 24 && a_EnchantmentLevel <= 74)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("LuckOfTheSea=2"));
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Lure=2"));
+ }
+ else if (a_EnchantmentLevel >= 15 && a_EnchantmentLevel <= 65)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("LuckOfTheSea=1"));
+ AddEnchantmentWeightToVector(&a_Enchantments, 1, cEnchantments("Lure=1"));
+ }
+
+ a_ItemType = E_ITEM_ENCHANTED_BOOK;
+ }
+
+ // Unbreaking
+ if (a_EnchantmentLevel >= 21 && a_EnchantmentLevel <= 71)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Unbreaking=3"));
+ }
+ else if (a_EnchantmentLevel >= 13 && a_EnchantmentLevel <= 63)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Unbreaking=2"));
+ }
+ else if (a_EnchantmentLevel >= 5 && a_EnchantmentLevel <= 55)
+ {
+ AddEnchantmentWeightToVector(&a_Enchantments, 5, cEnchantments("Unbreaking=1"));
+ }
+}
+
+
+
+
+
+void cEnchantments::AddEnchantmentWeightToVector(cWeightedEnchantments * a_Enchantments, int a_Weight, cEnchantments a_Enchantment)
+{
+ cWeightedEnchantment enchantment;
+ enchantment.m_Weight = a_Weight;
+ enchantment.m_Enchantments = a_Enchantment;
+ a_Enchantments->push_back(enchantment);
+}
+
+
+
+
+
+void cEnchantments::RemoveEnchantmentWeightFromVector(cWeightedEnchantments * a_Enchantments, int a_EnchantmentID)
+{
+ for (cWeightedEnchantments::iterator it = a_Enchantments->begin(); it != a_Enchantments->end(); ++it)
+ {
+ int EnchantmentID = atoi(StringSplit((*it).m_Enchantments.ToString(), "=")[0].c_str());
+
+ if (EnchantmentID == a_EnchantmentID)
+ {
+ a_Enchantments->erase(std::remove(a_Enchantments->begin(), a_Enchantments->end(), *it), a_Enchantments->end());
+ break;
+ }
+ }
+}
+
+
+
+
+
+void cEnchantments::CheckEnchantmentConflictsFromVector(cWeightedEnchantments & a_Enchantments, cEnchantments a_FirstEnchantment)
+{
+ int FirstEnchantmentID = atoi(StringSplit(a_FirstEnchantment.ToString(), "=")[0].c_str());
+
+ if (FirstEnchantmentID == cEnchantments::enchProtection)
+ {
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchFireProtection);
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchBlastProtection);
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchProjectileProtection);
+ }
+ else if (FirstEnchantmentID == cEnchantments::enchFireProtection)
+ {
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchProtection);
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchBlastProtection);
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchProjectileProtection);
+ }
+ else if (FirstEnchantmentID == cEnchantments::enchBlastProtection)
+ {
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchProtection);
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchFireProtection);
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchProjectileProtection);
+ }
+ else if (FirstEnchantmentID == cEnchantments::enchProjectileProtection)
+ {
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchProtection);
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchFireProtection);
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchBlastProtection);
+ }
+
+ else if (FirstEnchantmentID == cEnchantments::enchSharpness)
+ {
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchSmite);
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchBaneOfArthropods);
+ }
+ else if (FirstEnchantmentID == cEnchantments::enchSmite)
+ {
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchSharpness);
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchBaneOfArthropods);
+ }
+ else if (FirstEnchantmentID == cEnchantments::enchBaneOfArthropods)
+ {
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchSharpness);
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchSmite);
+ }
+ else if (FirstEnchantmentID == cEnchantments::enchSilkTouch)
+ {
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchFortune);
+ }
+ else if (FirstEnchantmentID == cEnchantments::enchFortune)
+ {
+ RemoveEnchantmentWeightFromVector(&a_Enchantments, cEnchantments::enchSilkTouch);
+ }
+}
+
+
+
+
+
+cEnchantments cEnchantments::GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments)
+{
+ cFastRandom Random;
+
+ int AllWeights = 0;
+ for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it)
+ {
+ AllWeights += (*it).m_Weight;
+ }
+ int RandomNumber = Random.GenerateRandomInteger(0, AllWeights - 1);
+ cEnchantments enchantment;
+ for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it)
+ {
+ RandomNumber -= (*it).m_Weight;
+ if (RandomNumber < 0)
+ {
+ return (*it).m_Enchantments;
+ }
+ }
+}
+
+
+
+
+
+