diff --git a/client/src/main/java/client/gui/container/GuiEnchant.java b/client/src/main/java/client/gui/container/GuiEnchant.java index 95a32b9..b9a7181 100755 --- a/client/src/main/java/client/gui/container/GuiEnchant.java +++ b/client/src/main/java/client/gui/container/GuiEnchant.java @@ -5,6 +5,7 @@ import common.enchantment.Enchantment; import common.inventory.ContainerEnchantment; import common.inventory.InventoryPlayer; import common.rng.Random; +import common.util.Pair; import common.world.World; public class GuiEnchant extends GuiContainer @@ -150,18 +151,15 @@ public class GuiEnchant extends GuiContainer for (int j = 0; j < 3; ++j) { int k = this.container.mana[j]; - int l = this.container.ids[j]; + Pair l = this.container.ench[j]; int i1 = j + 1; - if (this.isPointInRegion(60, 14 + 19 * j, 108, 17, mouseX, mouseY) && k > 0 && l >= 0) + if (this.isPointInRegion(60, 14 + 19 * j, 108, 17, mouseX, mouseY) && k > 0 && l != null) { StringBuilder sb = new StringBuilder(); - if (l >= 0 && Enchantment.getEnchantmentById(l & 255) != null) - { - String s = Enchantment.getEnchantmentById(l & 255).getFormattedName((l & 65280) >> 8); - sb.append(TextColor.WHITE + s + " . . . ?"); - } + String s = l.first().getFormattedName(l.second()); + sb.append(TextColor.WHITE + s + " . . . ?"); // if (!flag) // { diff --git a/common/src/main/java/common/enchantment/Enchantment.java b/common/src/main/java/common/enchantment/Enchantment.java index 65e8312..90d69ef 100755 --- a/common/src/main/java/common/enchantment/Enchantment.java +++ b/common/src/main/java/common/enchantment/Enchantment.java @@ -1,10 +1,6 @@ package common.enchantment; -import java.util.List; import java.util.Map; -import java.util.Set; - -import common.collect.Lists; import common.collect.Maps; import common.entity.DamageSource; import common.entity.Entity; @@ -21,7 +17,7 @@ import common.vars.Vars; public enum Enchantment implements Displayable, Identifyable { - PROTECTION(0, "protection", 10, EnumEnchantmentType.ARMOR, "Schutz") { + PROTECTION("protection", 10, EnchantmentType.ARMOR, "Schutz") { public int getMinEnchantability(int enchantmentLevel) { return 1 + (enchantmentLevel - 1) * 11; @@ -50,7 +46,7 @@ public enum Enchantment implements Displayable, Identifyable } } }, - FIRE_PROTECTION(1, "fire_protection", 5, EnumEnchantmentType.ARMOR, "Feuerschutz") { + FIRE_PROTECTION("fire_protection", 5, EnchantmentType.ARMOR, "Feuerschutz") { public int getMinEnchantability(int enchantmentLevel) { return 10 + (enchantmentLevel - 1) * 8; @@ -79,7 +75,7 @@ public enum Enchantment implements Displayable, Identifyable } } }, - FEATHER_FALLING(2, "feather_falling", 5, EnumEnchantmentType.ARMOR_FEET, "Federfall") { + FEATHER_FALLING("feather_falling", 5, EnchantmentType.ARMOR_FEET, "Federfall") { public int getMinEnchantability(int enchantmentLevel) { return 5 + (enchantmentLevel - 1) * 6; @@ -108,7 +104,7 @@ public enum Enchantment implements Displayable, Identifyable } } }, - BLAST_PROTECTION(3, "blast_protection", 2, EnumEnchantmentType.ARMOR, "Explosionsschutz") { + BLAST_PROTECTION("blast_protection", 2, EnchantmentType.ARMOR, "Explosionsschutz") { public int getMinEnchantability(int enchantmentLevel) { return 5 + (enchantmentLevel - 1) * 8; @@ -137,7 +133,7 @@ public enum Enchantment implements Displayable, Identifyable } } }, - PROJECTILE_PROTECTION(4, "projectile_protection", 5, EnumEnchantmentType.ARMOR, "Schusssicher") { + PROJECTILE_PROTECTION("projectile_protection", 5, EnchantmentType.ARMOR, "Schusssicher") { public int getMinEnchantability(int enchantmentLevel) { return 3 + (enchantmentLevel - 1) * 6; @@ -166,7 +162,7 @@ public enum Enchantment implements Displayable, Identifyable } } }, - THORNS(7, "thorns", 1, EnumEnchantmentType.ARMOR_TORSO, "Dornen") { + THORNS("thorns", 1, EnchantmentType.ARMOR_TORSO, "Dornen") { public int getMinEnchantability(int enchantmentLevel) { return 10 + 20 * (enchantmentLevel - 1); @@ -211,7 +207,7 @@ public enum Enchantment implements Displayable, Identifyable } } }, - SHARPNESS(16, "sharpness", 10, EnumEnchantmentType.WEAPON, "Schärfe") { + SHARPNESS("sharpness", 10, EnchantmentType.WEAPON, "Schärfe") { public int getMinEnchantability(int enchantmentLevel) { return 1 + (enchantmentLevel - 1) * 11; @@ -254,7 +250,7 @@ public enum Enchantment implements Displayable, Identifyable // } // } }, - KNOCKBACK(19, "knockback", 5, EnumEnchantmentType.WEAPON, "Rückstoß") { + KNOCKBACK("knockback", 5, EnchantmentType.WEAPON, "Rückstoß") { public int getMinEnchantability(int enchantmentLevel) { return 5 + 20 * (enchantmentLevel - 1); @@ -270,7 +266,7 @@ public enum Enchantment implements Displayable, Identifyable return 2; } }, - FIRE_ASPECT(20, "fire_aspect", 2, EnumEnchantmentType.WEAPON, "Verbrennung") { + FIRE_ASPECT("fire_aspect", 2, EnchantmentType.WEAPON, "Verbrennung") { public int getMinEnchantability(int enchantmentLevel) { return 10 + 20 * (enchantmentLevel - 1); @@ -286,7 +282,7 @@ public enum Enchantment implements Displayable, Identifyable return 2; } }, - LOOTING(21, "looting", 2, EnumEnchantmentType.WEAPON, "Plünderung") { + LOOTING("looting", 2, EnchantmentType.WEAPON, "Plünderung") { public int getMinEnchantability(int enchantmentLevel) { return 15 + (enchantmentLevel - 1) * 9; @@ -301,13 +297,8 @@ public enum Enchantment implements Displayable, Identifyable { return 3; } - - public boolean canApplyTogether(Enchantment ench) - { - return super.canApplyTogether(ench) && ench.id != SILK_TOUCH.id; - } }, - EFFICIENCY(32, "efficiency", 10, EnumEnchantmentType.DIGGER, "Effizienz") { + EFFICIENCY("efficiency", 10, EnchantmentType.DIGGER, "Effizienz") { public int getMinEnchantability(int enchantmentLevel) { return 1 + 10 * (enchantmentLevel - 1); @@ -328,7 +319,7 @@ public enum Enchantment implements Displayable, Identifyable return stack.getItem() instanceof ItemShears ? true : super.canApply(stack); } }, - SILK_TOUCH(33, "silk_touch", 1, EnumEnchantmentType.DIGGER, "Behutsamkeit") { + SILK_TOUCH("silk_touch", 1, EnchantmentType.DIGGER, "Behutsamkeit") { public int getMinEnchantability(int enchantmentLevel) { return 15; @@ -346,7 +337,7 @@ public enum Enchantment implements Displayable, Identifyable public boolean canApplyTogether(Enchantment ench) { - return super.canApplyTogether(ench) && ench.id != FORTUNE.id; + return super.canApplyTogether(ench) && ench != FORTUNE; } public boolean canApply(ItemStack stack) @@ -354,7 +345,7 @@ public enum Enchantment implements Displayable, Identifyable return stack.getItem() instanceof ItemShears ? true : super.canApply(stack); } }, - UNBREAKING(34, "unbreaking", 5, EnumEnchantmentType.BREAKABLE, "Haltbarkeit") { + UNBREAKING("unbreaking", 5, EnchantmentType.BREAKABLE, "Haltbarkeit") { public int getMinEnchantability(int enchantmentLevel) { return 5 + (enchantmentLevel - 1) * 8; @@ -375,7 +366,7 @@ public enum Enchantment implements Displayable, Identifyable return stack.isItemStackDamageable() ? true : super.canApply(stack); } }, - FORTUNE(35, "fortune", 2, EnumEnchantmentType.DIGGER, "Glück") { + FORTUNE("fortune", 2, EnchantmentType.DIGGER, "Glück") { public int getMinEnchantability(int enchantmentLevel) { return 15 + (enchantmentLevel - 1) * 9; @@ -393,10 +384,10 @@ public enum Enchantment implements Displayable, Identifyable public boolean canApplyTogether(Enchantment ench) { - return super.canApplyTogether(ench) && ench.id != SILK_TOUCH.id; + return super.canApplyTogether(ench) && ench != SILK_TOUCH; } }, - POWER(48, "power", 10, EnumEnchantmentType.BOW, "Stärke") { + POWER("power", 10, EnchantmentType.BOW, "Stärke") { public int getMinEnchantability(int enchantmentLevel) { return 1 + (enchantmentLevel - 1) * 10; @@ -412,7 +403,7 @@ public enum Enchantment implements Displayable, Identifyable return 5; } }, - PUNCH(49, "punch", 2, EnumEnchantmentType.BOW, "Schlag") { + PUNCH("punch", 2, EnchantmentType.BOW, "Schlag") { public int getMinEnchantability(int enchantmentLevel) { return 12 + (enchantmentLevel - 1) * 20; @@ -428,7 +419,7 @@ public enum Enchantment implements Displayable, Identifyable return 2; } }, - FLAME(50, "flame", 2, EnumEnchantmentType.BOW, "Flamme") { + FLAME("flame", 2, EnchantmentType.BOW, "Flamme") { public int getMinEnchantability(int enchantmentLevel) { return 20; @@ -444,7 +435,7 @@ public enum Enchantment implements Displayable, Identifyable return 1; } }, - INFINITY(51, "infinity", 1, EnumEnchantmentType.BOW, "Unendlich") { + INFINITY("infinity", 1, EnchantmentType.BOW, "Unendlich") { public int getMinEnchantability(int enchantmentLevel) { return 20; @@ -460,28 +451,7 @@ public enum Enchantment implements Displayable, Identifyable return 1; } }, - LUCK_OF_THE_SEA(61, "luck_of_the_sea", 2, EnumEnchantmentType.FISHING_ROD, "Glück des Meeres") { - public int getMinEnchantability(int enchantmentLevel) - { - return 15 + (enchantmentLevel - 1) * 9; - } - - public int getMaxEnchantability(int enchantmentLevel) - { - return super.getMinEnchantability(enchantmentLevel) + 50; - } - - public int getMaxLevel() - { - return 3; - } - - public boolean canApplyTogether(Enchantment ench) - { - return super.canApplyTogether(ench) && ench.id != SILK_TOUCH.id; - } - }, - LURE(62, "lure", 2, EnumEnchantmentType.FISHING_ROD, "Köder") { + LUCK_OF_THE_SEA("luck_of_the_sea", 2, EnchantmentType.FISHING_ROD, "Glück des Meeres") { public int getMinEnchantability(int enchantmentLevel) { return 15 + (enchantmentLevel - 1) * 9; @@ -497,7 +467,23 @@ public enum Enchantment implements Displayable, Identifyable return 3; } }, - DRAINING(64, "draining", 1, EnumEnchantmentType.WEAPON, "Seelenentzug") { + LURE("lure", 2, EnchantmentType.FISHING_ROD, "Köder") { + public int getMinEnchantability(int enchantmentLevel) + { + return 15 + (enchantmentLevel - 1) * 9; + } + + public int getMaxEnchantability(int enchantmentLevel) + { + return super.getMinEnchantability(enchantmentLevel) + 50; + } + + public int getMaxLevel() + { + return 3; + } + }, + DRAINING("draining", 1, EnchantmentType.WEAPON, "Seelenentzug") { public int getMinEnchantability(int enchantmentLevel) { return 2 + (enchantmentLevel - 1) * 11; } @@ -524,54 +510,31 @@ public enum Enchantment implements Displayable, Identifyable }; private static final String[] LEVELS = new String[] {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"}; - private static final Enchantment[] LOOKUP = new Enchantment[256]; - public static final Enchantment[] ENCHANTMENTS; - private static final Map NAME_LOOKUP = Maps.newHashMap(); + private static final Map LOOKUP = Maps.newHashMap(); - public final int id; private final String name; private final int weight; - public final EnumEnchantmentType type; + private final EnchantmentType type; private final String display; static { for(Enchantment ench : values()) { - if(LOOKUP[ench.id] != null) - throw new IllegalArgumentException("Verzauberung mit id " + ench.id + " ist bereits registriert"); - if(NAME_LOOKUP.get(ench.name) != null) - throw new IllegalArgumentException("Verzauberung mit name " + ench.name + " ist bereits registriert"); - LOOKUP[ench.id] = ench; - NAME_LOOKUP.put(ench.name, ench); + if(LOOKUP.containsKey(ench.name)) + throw new IllegalArgumentException("Verzauberung " + ench.name + " ist bereits registriert"); + LOOKUP.put(ench.name, ench); } - List list = Lists.newArrayList(); - for(Enchantment enchantment : LOOKUP) { - if(enchantment != null) - list.add(enchantment); - } - ENCHANTMENTS = list.toArray(new Enchantment[list.size()]); } - public static Enchantment getEnchantmentById(int enchID) + public static Enchantment getEnchantment(String name) { - return enchID >= 0 && enchID < LOOKUP.length ? LOOKUP[enchID] : null; + return LOOKUP.get(name); } - public static Enchantment getEnchantmentByLocation(String location) + private Enchantment(String name, int weight, EnchantmentType type, String display) { - return NAME_LOOKUP.get(location); - } - - public static Set getNames() - { - return NAME_LOOKUP.keySet(); - } - - private Enchantment(int enchID, String enchName, int enchWeight, EnumEnchantmentType enchType, String display) - { - this.id = enchID; - this.name = enchName; - this.weight = enchWeight; - this.type = enchType; + this.name = name; + this.weight = weight; + this.type = type; this.display = display; } @@ -623,6 +586,10 @@ public enum Enchantment implements Displayable, Identifyable { return this.display; } + + public EnchantmentType getType() { + return this.type; + } public String getFormattedName(int level) { @@ -644,7 +611,7 @@ public enum Enchantment implements Displayable, Identifyable public static int getFireTimeForEntity(Entity entity, int duration) { - int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantment.FIRE_PROTECTION.id, entity.getInventory()); + int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantment.FIRE_PROTECTION, entity.getInventory()); if (i > 0) { @@ -656,7 +623,7 @@ public enum Enchantment implements Displayable, Identifyable public static double getKnockbackFactor(Entity entity, double strength) { - int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantment.BLAST_PROTECTION.id, entity.getInventory()); + int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantment.BLAST_PROTECTION, entity.getInventory()); if (i > 0) { diff --git a/common/src/main/java/common/enchantment/EnchantmentHelper.java b/common/src/main/java/common/enchantment/EnchantmentHelper.java index 2a342f4..a7a6edf 100755 --- a/common/src/main/java/common/enchantment/EnchantmentHelper.java +++ b/common/src/main/java/common/enchantment/EnchantmentHelper.java @@ -24,7 +24,7 @@ public class EnchantmentHelper private static final EnchantmentHelper.HurtIterator ENCHANTMENT_ITERATOR_HURT = new EnchantmentHelper.HurtIterator(); private static final EnchantmentHelper.DamageIterator ENCHANTMENT_ITERATOR_DAMAGE = new EnchantmentHelper.DamageIterator(); - public static int getEnchantmentLevel(int enchID, ItemStack stack) + public static int getEnchantmentLevel(Enchantment enchID, ItemStack stack) { if (stack == null) { @@ -42,11 +42,11 @@ public class EnchantmentHelper { for (int i = 0; i < list.size(); ++i) { - int j = list.get(i).getShort("id"); - int k = list.get(i).getShort("lvl"); + Enchantment j = Enchantment.getEnchantment(list.get(i).getString("id")); if (j == enchID) { + int k = list.get(i).getShort("lvl"); return k; } } @@ -56,45 +56,43 @@ public class EnchantmentHelper } } - public static Map getEnchantments(ItemStack stack) + public static Map getEnchantments(ItemStack stack) { - Map map = Maps.newLinkedHashMap(); + Map map = Maps.newLinkedHashMap(); List list = stack.getItem() == Items.enchanted_book ? Items.enchanted_book.getEnchantments(stack) : stack.getEnchantmentTagList(); if (list != null) { for (int i = 0; i < list.size(); ++i) { - int j = list.get(i).getShort("id"); - int k = list.get(i).getShort("lvl"); - map.put(j, k); + Enchantment j = Enchantment.getEnchantment(list.get(i).getString("id")); + if(j != null) { + int k = list.get(i).getShort("lvl"); + map.put(j, k); + } } } return map; } - public static void setEnchantments(Map enchMap, ItemStack stack) + public static void setEnchantments(Map enchMap, ItemStack stack) { List list = Lists.newArrayList(); - Iterator iterator = enchMap.keySet().iterator(); + Iterator iterator = enchMap.keySet().iterator(); while (iterator.hasNext()) { - int i = ((Integer)iterator.next()).intValue(); - Enchantment enchantment = Enchantment.getEnchantmentById(i); + Enchantment enchantment = iterator.next(); - if (enchantment != null) + TagObject tag = new TagObject(); + tag.setString("id", enchantment.getName()); + tag.setShort("lvl", (short)enchMap.get(enchantment).intValue()); + list.add(tag); + + if (stack.getItem() == Items.enchanted_book) { - TagObject tag = new TagObject(); - tag.setShort("id", (short)i); - tag.setShort("lvl", (short)enchMap.get(i).intValue()); - list.add(tag); - - if (stack.getItem() == Items.enchanted_book) - { - Items.enchanted_book.addEnchantment(stack, new RngEnchantment(enchantment, enchMap.get(i).intValue())); - } + Items.enchanted_book.addEnchantment(stack, new RngEnchantment(enchantment, enchMap.get(enchantment).intValue())); } } @@ -114,7 +112,7 @@ public class EnchantmentHelper /** * Returns the biggest level of the enchantment on the array of ItemStack passed. */ - public static int getMaxEnchantmentLevel(int enchID, ItemStack[] stacks) + public static int getMaxEnchantmentLevel(Enchantment enchID, ItemStack[] stacks) { if (stacks == null) { @@ -151,12 +149,12 @@ public class EnchantmentHelper { for (int i = 0; i < list.size(); ++i) { - int j = list.get(i).getShort("id"); + String j = list.get(i).getString("id"); int k = list.get(i).getShort("lvl"); - if (Enchantment.getEnchantmentById(j) != null) + if (Enchantment.getEnchantment(j) != null) { - modifier.calculateModifier(Enchantment.getEnchantmentById(j), k); + modifier.calculateModifier(Enchantment.getEnchantment(j), k); } } } @@ -239,7 +237,7 @@ public class EnchantmentHelper */ public static int getKnockbackModifier(EntityLiving player) { - return getEnchantmentLevel(Enchantment.KNOCKBACK.id, player.getHeldItem()); + return getEnchantmentLevel(Enchantment.KNOCKBACK, player.getHeldItem()); } /** @@ -247,7 +245,7 @@ public class EnchantmentHelper */ public static int getFireAspectModifier(EntityLiving player) { - return getEnchantmentLevel(Enchantment.FIRE_ASPECT.id, player.getHeldItem()); + return getEnchantmentLevel(Enchantment.FIRE_ASPECT, player.getHeldItem()); } // /** @@ -271,7 +269,7 @@ public class EnchantmentHelper */ public static int getEfficiencyModifier(EntityLiving player) { - return getEnchantmentLevel(Enchantment.EFFICIENCY.id, player.getHeldItem()); + return getEnchantmentLevel(Enchantment.EFFICIENCY, player.getHeldItem()); } /** @@ -279,7 +277,7 @@ public class EnchantmentHelper */ public static boolean getSilkTouchModifier(EntityLiving player) { - return getEnchantmentLevel(Enchantment.SILK_TOUCH.id, player.getHeldItem()) > 0; + return getEnchantmentLevel(Enchantment.SILK_TOUCH, player.getHeldItem()) > 0; } /** @@ -287,7 +285,7 @@ public class EnchantmentHelper */ public static int getFortuneModifier(EntityLiving player) { - return getEnchantmentLevel(Enchantment.FORTUNE.id, player.getHeldItem()); + return getEnchantmentLevel(Enchantment.FORTUNE, player.getHeldItem()); } /** @@ -295,7 +293,7 @@ public class EnchantmentHelper */ public static int getLuckOfSeaModifier(EntityLiving player) { - return getEnchantmentLevel(Enchantment.LUCK_OF_THE_SEA.id, player.getHeldItem()); + return getEnchantmentLevel(Enchantment.LUCK_OF_THE_SEA, player.getHeldItem()); } /** @@ -303,7 +301,7 @@ public class EnchantmentHelper */ public static int getLureModifier(EntityLiving player) { - return getEnchantmentLevel(Enchantment.LURE.id, player.getHeldItem()); + return getEnchantmentLevel(Enchantment.LURE, player.getHeldItem()); } /** @@ -311,7 +309,7 @@ public class EnchantmentHelper */ public static int getLootingModifier(EntityLiving player) { - return getEnchantmentLevel(Enchantment.LOOTING.id, player.getHeldItem()); + return getEnchantmentLevel(Enchantment.LOOTING, player.getHeldItem()); } // /** @@ -326,7 +324,7 @@ public class EnchantmentHelper { for (ItemStack itemstack : p_92099_1_.getInventory()) { - if (itemstack != null && getEnchantmentLevel(p_92099_0_.id, itemstack) > 0) + if (itemstack != null && getEnchantmentLevel(p_92099_0_, itemstack) > 0) { return itemstack; } @@ -414,7 +412,7 @@ public class EnchantmentHelper } List list = null; - Map map = mapEnchantmentData(k, itemStackIn); + Map map = mapEnchantmentData(k, itemStackIn); if (map != null && !map.isEmpty()) { @@ -427,16 +425,16 @@ public class EnchantmentHelper for (int l = k; randomIn.zrange(50) <= l; l >>= 1) { - Iterator iterator = map.keySet().iterator(); + Iterator iterator = map.keySet().iterator(); while (iterator.hasNext()) { - Integer integer = (Integer)iterator.next(); + Enchantment ench = iterator.next(); boolean flag = true; for (RngEnchantment enchantmentdata1 : list) { - if (!enchantmentdata1.enchantment.canApplyTogether(Enchantment.getEnchantmentById(integer.intValue()))) + if (!enchantmentdata1.enchantment.canApplyTogether(ench)) { flag = false; break; @@ -462,15 +460,15 @@ public class EnchantmentHelper } } - public static Map mapEnchantmentData(int p_77505_0_, ItemStack p_77505_1_) + public static Map mapEnchantmentData(int p_77505_0_, ItemStack p_77505_1_) { Item item = p_77505_1_.getItem(); - Map map = null; + Map map = null; boolean flag = p_77505_1_.getItem() == Items.book; - for (Enchantment enchantment : Enchantment.ENCHANTMENTS) + for (Enchantment enchantment : Enchantment.values()) { - if (enchantment != null && (enchantment.type.canEnchantItem(item) || flag)) + if (enchantment != null && (enchantment.getType().canEnchantItem(item) || flag)) { for (int i = enchantment.getMinLevel(); i <= enchantment.getMaxLevel(); ++i) { @@ -478,10 +476,10 @@ public class EnchantmentHelper { if (map == null) { - map = Maps.newHashMap(); + map = Maps.newEnumMap(Enchantment.class); } - map.put(enchantment.id, new RngEnchantment(enchantment, i)); + map.put(enchantment, new RngEnchantment(enchantment, i)); } } } diff --git a/common/src/main/java/common/enchantment/EnchantmentType.java b/common/src/main/java/common/enchantment/EnchantmentType.java new file mode 100755 index 0000000..22ea489 --- /dev/null +++ b/common/src/main/java/common/enchantment/EnchantmentType.java @@ -0,0 +1,52 @@ +package common.enchantment; + +import common.attributes.UsageSlot; +import common.item.Item; +import common.item.ItemArmor; +import common.item.ItemBow; +import common.item.ItemFishingRod; +import common.item.ItemSword; +import common.item.ItemTool; + +public enum EnchantmentType +{ + ALL, + ARMOR, + ARMOR_FEET, + ARMOR_LEGS, + ARMOR_TORSO, + ARMOR_HEAD, + WEAPON, + DIGGER, + FISHING_ROD, + BREAKABLE, + BOW; + + public boolean canEnchantItem(Item item) + { + if (this == ALL) + { + return true; + } + else if (this == BREAKABLE && item.isDamageable()) + { + return true; + } + else if (item instanceof ItemArmor) + { + if (this == ARMOR) + { + return true; + } + else + { + ItemArmor armor = (ItemArmor)item; + return armor.armorType == UsageSlot.HEAD ? this == ARMOR_HEAD : (armor.armorType == UsageSlot.LEGS ? this == ARMOR_LEGS : (armor.armorType == UsageSlot.BODY ? this == ARMOR_TORSO : (armor.armorType == UsageSlot.FEET ? this == ARMOR_FEET : false))); + } + } + else + { + return item instanceof ItemSword ? this == WEAPON : (item instanceof ItemTool ? this == DIGGER : (item instanceof ItemBow ? this == BOW : (item instanceof ItemFishingRod ? this == FISHING_ROD : false))); + } + } +} diff --git a/common/src/main/java/common/enchantment/EnumEnchantmentType.java b/common/src/main/java/common/enchantment/EnumEnchantmentType.java deleted file mode 100755 index 40675e2..0000000 --- a/common/src/main/java/common/enchantment/EnumEnchantmentType.java +++ /dev/null @@ -1,55 +0,0 @@ -package common.enchantment; - -import common.attributes.UsageSlot; -import common.item.Item; -import common.item.ItemArmor; -import common.item.ItemBow; -import common.item.ItemFishingRod; -import common.item.ItemSword; -import common.item.ItemTool; - -public enum EnumEnchantmentType -{ - ALL, - ARMOR, - ARMOR_FEET, - ARMOR_LEGS, - ARMOR_TORSO, - ARMOR_HEAD, - WEAPON, - DIGGER, - FISHING_ROD, - BREAKABLE, - BOW; - - /** - * Return true if the item passed can be enchanted by a enchantment of this type. - */ - public boolean canEnchantItem(Item p_77557_1_) - { - if (this == ALL) - { - return true; - } - else if (this == BREAKABLE && p_77557_1_.isDamageable()) - { - return true; - } - else if (p_77557_1_ instanceof ItemArmor) - { - if (this == ARMOR) - { - return true; - } - else - { - ItemArmor itemarmor = (ItemArmor)p_77557_1_; - return itemarmor.armorType == UsageSlot.HEAD ? this == ARMOR_HEAD : (itemarmor.armorType == UsageSlot.LEGS ? this == ARMOR_LEGS : (itemarmor.armorType == UsageSlot.BODY ? this == ARMOR_TORSO : (itemarmor.armorType == UsageSlot.FEET ? this == ARMOR_FEET : false))); - } - } - else - { - return p_77557_1_ instanceof ItemSword ? this == WEAPON : (p_77557_1_ instanceof ItemTool ? this == DIGGER : (p_77557_1_ instanceof ItemBow ? this == BOW : (p_77557_1_ instanceof ItemFishingRod ? this == FISHING_ROD : false))); - } - } -} diff --git a/common/src/main/java/common/entity/npc/EntityNPC.java b/common/src/main/java/common/entity/npc/EntityNPC.java index d0aab55..74452db 100755 --- a/common/src/main/java/common/entity/npc/EntityNPC.java +++ b/common/src/main/java/common/entity/npc/EntityNPC.java @@ -726,8 +726,8 @@ public abstract class EntityNPC extends EntityLiving return; if(stack.getItem() == Items.bow) { EntityArrow entityarrow = new EntityArrow(this.worldObj, this, target, 1.6F, 2.0f); - int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER.id, this.getHeldItem()); - int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.PUNCH.id, this.getHeldItem()); + int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER, this.getHeldItem()); + int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.PUNCH, this.getHeldItem()); entityarrow.setDamage((double)(range * 2.0F) + this.rand.gaussian() * 0.25D + (double)(/* (float)this.worldObj.getDifficulty().getId() */ 3.0f * 0.11F)); if (i > 0) @@ -740,7 +740,7 @@ public abstract class EntityNPC extends EntityLiving entityarrow.setKnockbackStrength(j); } - if (EnchantmentHelper.getEnchantmentLevel(Enchantment.FLAME.id, this.getHeldItem()) > 0) + if (EnchantmentHelper.getEnchantmentLevel(Enchantment.FLAME, this.getHeldItem()) > 0) { entityarrow.setFire(100); } @@ -750,7 +750,7 @@ public abstract class EntityNPC extends EntityLiving } else if(stack.getItem() instanceof ItemGunBase) { EntityBullet bullet = new EntityBullet(this.worldObj, this, target, ((ItemGunBase)stack.getItem()).getVelocity(), 0.75f); - int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER.id, this.getHeldItem()); + int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER, this.getHeldItem()); // int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, this.getHeldItem()); bullet.setDamage(((ItemGunBase)stack.getItem()).getAmmo().getDamage(stack)); diff --git a/common/src/main/java/common/init/TradeRegistry.java b/common/src/main/java/common/init/TradeRegistry.java index 3960f54..c9d1356 100755 --- a/common/src/main/java/common/init/TradeRegistry.java +++ b/common/src/main/java/common/init/TradeRegistry.java @@ -179,7 +179,7 @@ public abstract class TradeRegistry { static class BookForGem implements ITradeList { public void modifyMerchantRecipeList(MerchantRecipeList recipeList, Random random) { - Enchantment enchantment = random.pick(Enchantment.ENCHANTMENTS); + Enchantment enchantment = random.pick(Enchantment.values()); int i = random.range(enchantment.getMinLevel(), enchantment.getMaxLevel()); ItemStack itemstack = Items.enchanted_book.getEnchantedItemStack(new RngEnchantment(enchantment, i)); int j = 2 + random.zrange(5 + i * 10) + 3 * i; diff --git a/common/src/main/java/common/inventory/ContainerEnchantment.java b/common/src/main/java/common/inventory/ContainerEnchantment.java index 618eef9..32e26de 100755 --- a/common/src/main/java/common/inventory/ContainerEnchantment.java +++ b/common/src/main/java/common/inventory/ContainerEnchantment.java @@ -2,6 +2,7 @@ package common.inventory; import java.util.List; +import common.enchantment.Enchantment; import common.enchantment.EnchantmentHelper; import common.enchantment.RngEnchantment; import common.entity.npc.EntityNPC; @@ -10,6 +11,7 @@ import common.init.Items; import common.item.ItemStack; import common.rng.Random; import common.util.BlockPos; +import common.util.Pair; import common.world.World; public class ContainerEnchantment extends Container @@ -20,7 +22,7 @@ public class ContainerEnchantment extends Container private Random rand; public int seed; public int[] mana; - public int[] ids; + public Pair[] ench; public ContainerEnchantment(InventoryPlayer playerInv, World worldIn) { @@ -43,7 +45,7 @@ public class ContainerEnchantment extends Container }; this.rand = new Random(); this.mana = new int[3]; - this.ids = new int[] { -1, -1, -1}; + this.ench = new Pair[] {null, null, null}; this.world = worldIn; this.position = pos; this.seed = playerInv.player.getEnchSeed(); @@ -72,6 +74,14 @@ public class ContainerEnchantment extends Container this.addSlotToContainer(new Slot(playerInv, k, 8 + k * 18, 142)); } } + + public static int encodeData(Pair data) { + return data == null ? -1 : data.first().ordinal() | data.second() << 8; + } + + public static Pair decodeData(int data) { + return data < 0 ? null : new Pair(Enchantment.values()[(data & 0xff) % Enchantment.values().length], data >> 8); + } public void onCraftGuiOpened(ICrafting listener) { @@ -80,9 +90,9 @@ public class ContainerEnchantment extends Container listener.sendProgressBarUpdate(this, 1, this.mana[1]); listener.sendProgressBarUpdate(this, 2, this.mana[2]); listener.sendProgressBarUpdate(this, 3, this.seed & -16); - listener.sendProgressBarUpdate(this, 4, this.ids[0]); - listener.sendProgressBarUpdate(this, 5, this.ids[1]); - listener.sendProgressBarUpdate(this, 6, this.ids[2]); + listener.sendProgressBarUpdate(this, 4, encodeData(this.ench[0])); + listener.sendProgressBarUpdate(this, 5, encodeData(this.ench[1])); + listener.sendProgressBarUpdate(this, 6, encodeData(this.ench[2])); } public void detectAndSendChanges() @@ -96,9 +106,9 @@ public class ContainerEnchantment extends Container icrafting.sendProgressBarUpdate(this, 1, this.mana[1]); icrafting.sendProgressBarUpdate(this, 2, this.mana[2]); icrafting.sendProgressBarUpdate(this, 3, this.seed & -16); - icrafting.sendProgressBarUpdate(this, 4, this.ids[0]); - icrafting.sendProgressBarUpdate(this, 5, this.ids[1]); - icrafting.sendProgressBarUpdate(this, 6, this.ids[2]); + icrafting.sendProgressBarUpdate(this, 4, encodeData(this.ench[0])); + icrafting.sendProgressBarUpdate(this, 5, encodeData(this.ench[1])); + icrafting.sendProgressBarUpdate(this, 6, encodeData(this.ench[2])); } } @@ -114,7 +124,7 @@ public class ContainerEnchantment extends Container } else if (id >= 4 && id <= 6) { - this.ids[id - 4] = data; + this.ench[id - 4] = decodeData(data); } else { @@ -181,7 +191,7 @@ public class ContainerEnchantment extends Container for (int i1 = 0; i1 < 3; ++i1) { this.mana[i1] = EnchantmentHelper.calcItemStackEnchantability(this.rand, i1, l, itemstack); - this.ids[i1] = -1; + this.ench[i1] = null; if (this.mana[i1] < i1 + 1) { @@ -198,7 +208,7 @@ public class ContainerEnchantment extends Container if (list != null && !list.isEmpty()) { RngEnchantment enchantmentdata = (RngEnchantment)list.get(this.rand.zrange(list.size())); - this.ids[j1] = enchantmentdata.enchantment.id | enchantmentdata.level << 8; + this.ench[j1] = new Pair(enchantmentdata.enchantment, enchantmentdata.level); } } } @@ -211,7 +221,7 @@ public class ContainerEnchantment extends Container for (int i = 0; i < 3; ++i) { this.mana[i] = 0; - this.ids[i] = -1; + this.ench[i] = null; } } } diff --git a/common/src/main/java/common/inventory/ContainerRepair.java b/common/src/main/java/common/inventory/ContainerRepair.java index f22db4a..522df45 100755 --- a/common/src/main/java/common/inventory/ContainerRepair.java +++ b/common/src/main/java/common/inventory/ContainerRepair.java @@ -177,7 +177,7 @@ public class ContainerRepair extends Container { ItemStack newStack = stack.copy(); ItemStack repStack = this.inputSlots.getStackInSlot(1); - Map newEnch = EnchantmentHelper.getEnchantments(newStack); + Map newEnch = EnchantmentHelper.getEnchantments(newStack); boolean isBook = false; repairCost = repairCost + stack.getRepairCost() + (repStack == null ? 0 : repStack.getRepairCost()); this.materialCost = 0; @@ -238,18 +238,17 @@ public class ContainerRepair extends Container } } - Map ench = EnchantmentHelper.getEnchantments(repStack); - Iterator enchs = ench.keySet().iterator(); + Map ench = EnchantmentHelper.getEnchantments(repStack); + Iterator enchs = ench.keySet().iterator(); while (enchs.hasNext()) { - int eid = ((Integer)enchs.next()).intValue(); - Enchantment enchantment = Enchantment.getEnchantmentById(eid); + Enchantment enchantment = enchs.next(); if (enchantment != null) { - int newLevel = newEnch.containsKey(Integer.valueOf(eid)) ? ((Integer)newEnch.get(Integer.valueOf(eid))).intValue() : 0; - int level = ((Integer)ench.get(Integer.valueOf(eid))).intValue(); + int newLevel = newEnch.containsKey(enchantment) ? newEnch.get(enchantment) : 0; + int level = ench.get(enchantment); int diff; if (newLevel == level) @@ -270,13 +269,13 @@ public class ContainerRepair extends Container applies = true; } - Iterator newEnchs = newEnch.keySet().iterator(); + Iterator newEnchs = newEnch.keySet().iterator(); while (newEnchs.hasNext()) { - int nEid = ((Integer)newEnchs.next()).intValue(); + Enchantment nEid = newEnchs.next(); - if (nEid != eid && !enchantment.canApplyTogether(Enchantment.getEnchantmentById(nEid))) + if (nEid != enchantment && !enchantment.canApplyTogether(nEid)) { applies = false; ++totalCost; @@ -290,7 +289,7 @@ public class ContainerRepair extends Container level = enchantment.getMaxLevel(); } - newEnch.put(Integer.valueOf(eid), Integer.valueOf(level)); + newEnch.put(enchantment, level); int cost = 0; switch (enchantment.getWeight()) diff --git a/common/src/main/java/common/item/ItemBow.java b/common/src/main/java/common/item/ItemBow.java index 8846325..4ee6e40 100755 --- a/common/src/main/java/common/item/ItemBow.java +++ b/common/src/main/java/common/item/ItemBow.java @@ -27,7 +27,7 @@ public class ItemBow extends Item */ public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityNPC playerIn, int timeLeft) { - boolean flag = /* playerIn.creative || */ EnchantmentHelper.getEnchantmentLevel(Enchantment.INFINITY.id, stack) > 0; + boolean flag = /* playerIn.creative || */ EnchantmentHelper.getEnchantmentLevel(Enchantment.INFINITY, stack) > 0; if (flag || playerIn.inventory.hasItem(Items.arrow)) { @@ -52,21 +52,21 @@ public class ItemBow extends Item entityarrow.setIsCritical(true); } - int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER.id, stack); + int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER, stack); if (j > 0) { entityarrow.setDamage(entityarrow.getDamage() + (double)j * 0.5D + 0.5D); } - int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.PUNCH.id, stack); + int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.PUNCH, stack); if (k > 0) { entityarrow.setKnockbackStrength(k); } - if (EnchantmentHelper.getEnchantmentLevel(Enchantment.FLAME.id, stack) > 0) + if (EnchantmentHelper.getEnchantmentLevel(Enchantment.FLAME, stack) > 0) { entityarrow.setFire(100); } diff --git a/common/src/main/java/common/item/ItemEnchantedBook.java b/common/src/main/java/common/item/ItemEnchantedBook.java index 71830a7..37a1079 100755 --- a/common/src/main/java/common/item/ItemEnchantedBook.java +++ b/common/src/main/java/common/item/ItemEnchantedBook.java @@ -34,8 +34,8 @@ public class ItemEnchantedBook extends Item public void getSubItems(Item itemIn, CheatTab tab, List subItems) { - for (Enchantment enchantment : Enchantment.ENCHANTMENTS) { - if(enchantment != null && enchantment.type != null) + for (Enchantment enchantment : Enchantment.values()) { + if(enchantment != null && enchantment.getType() != null) subItems.add(Items.enchanted_book.getEnchantedItemStack(new RngEnchantment(enchantment, enchantment.getMaxLevel()))); } } @@ -66,12 +66,12 @@ public class ItemEnchantedBook extends Item { for (int i = 0; i < nbttaglist.size(); ++i) { - int j = nbttaglist.get(i).getShort("id"); - int k = nbttaglist.get(i).getShort("lvl"); + Enchantment j = Enchantment.getEnchantment(nbttaglist.get(i).getString("id")); - if (Enchantment.getEnchantmentById(j) != null) + if (j != null) { - tooltip.add(Enchantment.getEnchantmentById(j).getFormattedName(k)); + int k = nbttaglist.get(i).getShort("lvl"); + tooltip.add(j.getFormattedName(k)); } } } @@ -89,7 +89,7 @@ public class ItemEnchantedBook extends Item { TagObject nbttagcompound = nbttaglist.get(i); - if (nbttagcompound.getShort("id") == enchantment.enchantment.id) + if (Enchantment.getEnchantment(nbttagcompound.getString("id")) == enchantment.enchantment) { if (nbttagcompound.getShort("lvl") < enchantment.level) { @@ -104,7 +104,7 @@ public class ItemEnchantedBook extends Item if (flag) { TagObject nbttagcompound1 = new TagObject(); - nbttagcompound1.setShort("id", (short)enchantment.enchantment.id); + nbttagcompound1.setString("id", enchantment.enchantment.getName()); nbttagcompound1.setShort("lvl", (short)enchantment.level); nbttaglist.add(nbttagcompound1); } diff --git a/common/src/main/java/common/item/ItemGunBase.java b/common/src/main/java/common/item/ItemGunBase.java index 0e1b08a..73f56ab 100755 --- a/common/src/main/java/common/item/ItemGunBase.java +++ b/common/src/main/java/common/item/ItemGunBase.java @@ -30,13 +30,13 @@ public abstract class ItemGunBase extends Item if(stack.getItemDamage() >= this.getMaxDamage()) return stack; boolean flag = // playerIn.creative || - EnchantmentHelper.getEnchantmentLevel(Enchantment.INFINITY.id, stack) > 0; + EnchantmentHelper.getEnchantmentLevel(Enchantment.INFINITY, stack) > 0; if (flag || playerIn.inventory.hasItem(this.getAmmo())) { EntityBullet bullet = new EntityBullet(worldIn, playerIn, this.getVelocity()); bullet.setDamage(this.getAmmo().getDamage(stack)); - int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER.id, stack); + int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER, stack); if (j > 0) { diff --git a/common/src/main/java/common/item/ItemStack.java b/common/src/main/java/common/item/ItemStack.java index 3a2fcde..82a92c2 100755 --- a/common/src/main/java/common/item/ItemStack.java +++ b/common/src/main/java/common/item/ItemStack.java @@ -319,7 +319,7 @@ public final class ItemStack { if (amount > 0) { - int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.UNBREAKING.id, this); + int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.UNBREAKING, this); int j = 0; for (int k = 0; i > 0 && k < amount; ++k) @@ -825,12 +825,12 @@ public final class ItemStack { for (int j = 0; j < nbttaglist.size(); ++j) { - int k = nbttaglist.get(j).getShort("id"); - int l = nbttaglist.get(j).getShort("lvl"); + Enchantment k = Enchantment.getEnchantment(nbttaglist.get(j).getString("id")); - if (Enchantment.getEnchantmentById(k) != null) + if (k != null) { - list.add(Enchantment.getEnchantmentById(k).getFormattedName(l)); + int l = nbttaglist.get(j).getShort("lvl"); + list.add(k.getFormattedName(l)); } } } @@ -1007,7 +1007,7 @@ public final class ItemStack List nbttaglist = this.tag.getList("ench"); TagObject nbttagcompound = new TagObject(); - nbttagcompound.setShort("id", (short)ench.id); + nbttagcompound.setString("id", ench.getName()); nbttagcompound.setShort("lvl", (short)(/* (byte) */ level)); nbttaglist.add(nbttagcompound); } @@ -1028,7 +1028,7 @@ public final class ItemStack TagObject tag; for(int z = 0; z < oldEnch.size(); z++) { tag = oldEnch.get(z); - if(tag.getShort("id") != ench.id) { + if(Enchantment.getEnchantment(tag.getString("id")) != ench) { newEnch.add(tag); } else { diff --git a/server/src/main/java/server/command/commands/CommandMagic.java b/server/src/main/java/server/command/commands/CommandMagic.java index 28eceab..6c1df47 100644 --- a/server/src/main/java/server/command/commands/CommandMagic.java +++ b/server/src/main/java/server/command/commands/CommandMagic.java @@ -15,7 +15,7 @@ public class CommandMagic extends Command { public CommandMagic() { super("magic"); - this.addEnum("enchantment", Enchantment.class, Enchantment.ENCHANTMENTS); + this.addEnum("enchantment", Enchantment.class, Enchantment.values()); this.setParamsOptional(); this.addInt("level", 1, 32767); this.addFlag("remove", 'r'); @@ -26,7 +26,7 @@ public class CommandMagic extends Command { public void exec(CommandEnvironment env, Executor exec, Enchantment ench, Integer level, boolean remove, boolean force, ItemStack stack) { if(remove) { - int current = EnchantmentHelper.getEnchantmentLevel(ench.id, stack); + int current = EnchantmentHelper.getEnchantmentLevel(ench, stack); if(current == 0) throw new RunException("%s hat die Verzauberung %s nicht", stack.getDisplayName(), ench.getDisplay()); stack.removeEnchantment(ench); @@ -39,10 +39,9 @@ public class CommandMagic extends Command { throw new RunException("Level %d ist zu hoch für %s, maximal %d erlaubt", level, ench.getDisplay(), ench.getMaxLevel()); if(!ench.canApply(stack)) throw new RunException("Verzauberung %s kann nicht auf %s verwendet werden", ench.getDisplay(), stack.getDisplayName()); - for(Entry id : EnchantmentHelper.getEnchantments(stack).entrySet()) { - Enchantment enc = Enchantment.getEnchantmentById(id.getKey()); - if(enc != ench && !ench.canApplyTogether(enc)) - throw new RunException("Verzauberung %s kann nicht zusammen mit %s verwendet werden", ench.getDisplay(), enc.getFormattedName(id.getValue())); + for(Entry id : EnchantmentHelper.getEnchantments(stack).entrySet()) { + if(id.getKey() != ench && !ench.canApplyTogether(id.getKey())) + throw new RunException("Verzauberung %s kann nicht zusammen mit %s verwendet werden", ench.getDisplay(), id.getKey().getFormattedName(id.getValue())); } } stack.removeEnchantment(ench);