clean up enchantments 2

This commit is contained in:
Sen 2025-06-17 23:03:26 +02:00
parent 38d29ba9c8
commit 9930d1bb6d
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
14 changed files with 218 additions and 250 deletions

View file

@ -5,6 +5,7 @@ import common.enchantment.Enchantment;
import common.inventory.ContainerEnchantment; import common.inventory.ContainerEnchantment;
import common.inventory.InventoryPlayer; import common.inventory.InventoryPlayer;
import common.rng.Random; import common.rng.Random;
import common.util.Pair;
import common.world.World; import common.world.World;
public class GuiEnchant extends GuiContainer public class GuiEnchant extends GuiContainer
@ -150,18 +151,15 @@ public class GuiEnchant extends GuiContainer
for (int j = 0; j < 3; ++j) for (int j = 0; j < 3; ++j)
{ {
int k = this.container.mana[j]; int k = this.container.mana[j];
int l = this.container.ids[j]; Pair<Enchantment, Integer> l = this.container.ench[j];
int i1 = j + 1; 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(); StringBuilder sb = new StringBuilder();
if (l >= 0 && Enchantment.getEnchantmentById(l & 255) != null) String s = l.first().getFormattedName(l.second());
{ sb.append(TextColor.WHITE + s + " . . . ?");
String s = Enchantment.getEnchantmentById(l & 255).getFormattedName((l & 65280) >> 8);
sb.append(TextColor.WHITE + s + " . . . ?");
}
// if (!flag) // if (!flag)
// { // {

View file

@ -1,10 +1,6 @@
package common.enchantment; package common.enchantment;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import common.collect.Lists;
import common.collect.Maps; import common.collect.Maps;
import common.entity.DamageSource; import common.entity.DamageSource;
import common.entity.Entity; import common.entity.Entity;
@ -21,7 +17,7 @@ import common.vars.Vars;
public enum Enchantment implements Displayable, Identifyable public enum Enchantment implements Displayable, Identifyable
{ {
PROTECTION(0, "protection", 10, EnumEnchantmentType.ARMOR, "Schutz") { PROTECTION("protection", 10, EnchantmentType.ARMOR, "Schutz") {
public int getMinEnchantability(int enchantmentLevel) public int getMinEnchantability(int enchantmentLevel)
{ {
return 1 + (enchantmentLevel - 1) * 11; 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 10 + (enchantmentLevel - 1) * 8; 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 5 + (enchantmentLevel - 1) * 6; 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 5 + (enchantmentLevel - 1) * 8; 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 3 + (enchantmentLevel - 1) * 6; 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 10 + 20 * (enchantmentLevel - 1); 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 1 + (enchantmentLevel - 1) * 11; 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 5 + 20 * (enchantmentLevel - 1); return 5 + 20 * (enchantmentLevel - 1);
@ -270,7 +266,7 @@ public enum Enchantment implements Displayable, Identifyable
return 2; return 2;
} }
}, },
FIRE_ASPECT(20, "fire_aspect", 2, EnumEnchantmentType.WEAPON, "Verbrennung") { FIRE_ASPECT("fire_aspect", 2, EnchantmentType.WEAPON, "Verbrennung") {
public int getMinEnchantability(int enchantmentLevel) public int getMinEnchantability(int enchantmentLevel)
{ {
return 10 + 20 * (enchantmentLevel - 1); return 10 + 20 * (enchantmentLevel - 1);
@ -286,7 +282,7 @@ public enum Enchantment implements Displayable, Identifyable
return 2; return 2;
} }
}, },
LOOTING(21, "looting", 2, EnumEnchantmentType.WEAPON, "Plünderung") { LOOTING("looting", 2, EnchantmentType.WEAPON, "Plünderung") {
public int getMinEnchantability(int enchantmentLevel) public int getMinEnchantability(int enchantmentLevel)
{ {
return 15 + (enchantmentLevel - 1) * 9; return 15 + (enchantmentLevel - 1) * 9;
@ -301,13 +297,8 @@ public enum Enchantment implements Displayable, Identifyable
{ {
return 3; 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 1 + 10 * (enchantmentLevel - 1); return 1 + 10 * (enchantmentLevel - 1);
@ -328,7 +319,7 @@ public enum Enchantment implements Displayable, Identifyable
return stack.getItem() instanceof ItemShears ? true : super.canApply(stack); 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 15; return 15;
@ -346,7 +337,7 @@ public enum Enchantment implements Displayable, Identifyable
public boolean canApplyTogether(Enchantment ench) public boolean canApplyTogether(Enchantment ench)
{ {
return super.canApplyTogether(ench) && ench.id != FORTUNE.id; return super.canApplyTogether(ench) && ench != FORTUNE;
} }
public boolean canApply(ItemStack stack) public boolean canApply(ItemStack stack)
@ -354,7 +345,7 @@ public enum Enchantment implements Displayable, Identifyable
return stack.getItem() instanceof ItemShears ? true : super.canApply(stack); 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 5 + (enchantmentLevel - 1) * 8; return 5 + (enchantmentLevel - 1) * 8;
@ -375,7 +366,7 @@ public enum Enchantment implements Displayable, Identifyable
return stack.isItemStackDamageable() ? true : super.canApply(stack); 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 15 + (enchantmentLevel - 1) * 9; return 15 + (enchantmentLevel - 1) * 9;
@ -393,10 +384,10 @@ public enum Enchantment implements Displayable, Identifyable
public boolean canApplyTogether(Enchantment ench) 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) public int getMinEnchantability(int enchantmentLevel)
{ {
return 1 + (enchantmentLevel - 1) * 10; return 1 + (enchantmentLevel - 1) * 10;
@ -412,7 +403,7 @@ public enum Enchantment implements Displayable, Identifyable
return 5; return 5;
} }
}, },
PUNCH(49, "punch", 2, EnumEnchantmentType.BOW, "Schlag") { PUNCH("punch", 2, EnchantmentType.BOW, "Schlag") {
public int getMinEnchantability(int enchantmentLevel) public int getMinEnchantability(int enchantmentLevel)
{ {
return 12 + (enchantmentLevel - 1) * 20; return 12 + (enchantmentLevel - 1) * 20;
@ -428,7 +419,7 @@ public enum Enchantment implements Displayable, Identifyable
return 2; return 2;
} }
}, },
FLAME(50, "flame", 2, EnumEnchantmentType.BOW, "Flamme") { FLAME("flame", 2, EnchantmentType.BOW, "Flamme") {
public int getMinEnchantability(int enchantmentLevel) public int getMinEnchantability(int enchantmentLevel)
{ {
return 20; return 20;
@ -444,7 +435,7 @@ public enum Enchantment implements Displayable, Identifyable
return 1; return 1;
} }
}, },
INFINITY(51, "infinity", 1, EnumEnchantmentType.BOW, "Unendlich") { INFINITY("infinity", 1, EnchantmentType.BOW, "Unendlich") {
public int getMinEnchantability(int enchantmentLevel) public int getMinEnchantability(int enchantmentLevel)
{ {
return 20; return 20;
@ -460,28 +451,7 @@ public enum Enchantment implements Displayable, Identifyable
return 1; return 1;
} }
}, },
LUCK_OF_THE_SEA(61, "luck_of_the_sea", 2, EnumEnchantmentType.FISHING_ROD, "Glück des Meeres") { 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;
}
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") {
public int getMinEnchantability(int enchantmentLevel) public int getMinEnchantability(int enchantmentLevel)
{ {
return 15 + (enchantmentLevel - 1) * 9; return 15 + (enchantmentLevel - 1) * 9;
@ -497,7 +467,23 @@ public enum Enchantment implements Displayable, Identifyable
return 3; 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) { public int getMinEnchantability(int enchantmentLevel) {
return 2 + (enchantmentLevel - 1) * 11; 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 String[] LEVELS = new String[] {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"};
private static final Enchantment[] LOOKUP = new Enchantment[256]; private static final Map<String, Enchantment> LOOKUP = Maps.<String, Enchantment>newHashMap();
public static final Enchantment[] ENCHANTMENTS;
private static final Map<String, Enchantment> NAME_LOOKUP = Maps.<String, Enchantment>newHashMap();
public final int id;
private final String name; private final String name;
private final int weight; private final int weight;
public final EnumEnchantmentType type; private final EnchantmentType type;
private final String display; private final String display;
static { static {
for(Enchantment ench : values()) { for(Enchantment ench : values()) {
if(LOOKUP[ench.id] != null) if(LOOKUP.containsKey(ench.name))
throw new IllegalArgumentException("Verzauberung mit id " + ench.id + " ist bereits registriert"); throw new IllegalArgumentException("Verzauberung " + ench.name + " ist bereits registriert");
if(NAME_LOOKUP.get(ench.name) != null) LOOKUP.put(ench.name, ench);
throw new IllegalArgumentException("Verzauberung mit name " + ench.name + " ist bereits registriert");
LOOKUP[ench.id] = ench;
NAME_LOOKUP.put(ench.name, ench);
} }
List<Enchantment> list = Lists.<Enchantment>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); this.name = name;
} this.weight = weight;
this.type = type;
public static Set<String> 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.display = display; this.display = display;
} }
@ -624,6 +587,10 @@ public enum Enchantment implements Displayable, Identifyable
return this.display; return this.display;
} }
public EnchantmentType getType() {
return this.type;
}
public String getFormattedName(int level) public String getFormattedName(int level)
{ {
return this.getDisplay() + " " + ((level >= 1 && level <= LEVELS.length) ? LEVELS[level - 1] : "" + level); return this.getDisplay() + " " + ((level >= 1 && level <= LEVELS.length) ? LEVELS[level - 1] : "" + level);
@ -644,7 +611,7 @@ public enum Enchantment implements Displayable, Identifyable
public static int getFireTimeForEntity(Entity entity, int duration) 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) if (i > 0)
{ {
@ -656,7 +623,7 @@ public enum Enchantment implements Displayable, Identifyable
public static double getKnockbackFactor(Entity entity, double strength) 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) if (i > 0)
{ {

View file

@ -24,7 +24,7 @@ public class EnchantmentHelper
private static final EnchantmentHelper.HurtIterator ENCHANTMENT_ITERATOR_HURT = new EnchantmentHelper.HurtIterator(); private static final EnchantmentHelper.HurtIterator ENCHANTMENT_ITERATOR_HURT = new EnchantmentHelper.HurtIterator();
private static final EnchantmentHelper.DamageIterator ENCHANTMENT_ITERATOR_DAMAGE = new EnchantmentHelper.DamageIterator(); 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) if (stack == null)
{ {
@ -42,11 +42,11 @@ public class EnchantmentHelper
{ {
for (int i = 0; i < list.size(); ++i) for (int i = 0; i < list.size(); ++i)
{ {
int j = list.get(i).getShort("id"); Enchantment j = Enchantment.getEnchantment(list.get(i).getString("id"));
int k = list.get(i).getShort("lvl");
if (j == enchID) if (j == enchID)
{ {
int k = list.get(i).getShort("lvl");
return k; return k;
} }
} }
@ -56,45 +56,43 @@ public class EnchantmentHelper
} }
} }
public static Map<Integer, Integer> getEnchantments(ItemStack stack) public static Map<Enchantment, Integer> getEnchantments(ItemStack stack)
{ {
Map<Integer, Integer> map = Maps.<Integer, Integer>newLinkedHashMap(); Map<Enchantment, Integer> map = Maps.<Enchantment, Integer>newLinkedHashMap();
List<TagObject> list = stack.getItem() == Items.enchanted_book ? Items.enchanted_book.getEnchantments(stack) : stack.getEnchantmentTagList(); List<TagObject> list = stack.getItem() == Items.enchanted_book ? Items.enchanted_book.getEnchantments(stack) : stack.getEnchantmentTagList();
if (list != null) if (list != null)
{ {
for (int i = 0; i < list.size(); ++i) for (int i = 0; i < list.size(); ++i)
{ {
int j = list.get(i).getShort("id"); Enchantment j = Enchantment.getEnchantment(list.get(i).getString("id"));
int k = list.get(i).getShort("lvl"); if(j != null) {
map.put(j, k); int k = list.get(i).getShort("lvl");
map.put(j, k);
}
} }
} }
return map; return map;
} }
public static void setEnchantments(Map<Integer, Integer> enchMap, ItemStack stack) public static void setEnchantments(Map<Enchantment, Integer> enchMap, ItemStack stack)
{ {
List<TagObject> list = Lists.newArrayList(); List<TagObject> list = Lists.newArrayList();
Iterator iterator = enchMap.keySet().iterator(); Iterator<Enchantment> iterator = enchMap.keySet().iterator();
while (iterator.hasNext()) while (iterator.hasNext())
{ {
int i = ((Integer)iterator.next()).intValue(); Enchantment enchantment = iterator.next();
Enchantment enchantment = Enchantment.getEnchantmentById(i);
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(); Items.enchanted_book.addEnchantment(stack, new RngEnchantment(enchantment, enchMap.get(enchantment).intValue()));
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()));
}
} }
} }
@ -114,7 +112,7 @@ public class EnchantmentHelper
/** /**
* Returns the biggest level of the enchantment on the array of ItemStack passed. * 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) if (stacks == null)
{ {
@ -151,12 +149,12 @@ public class EnchantmentHelper
{ {
for (int i = 0; i < list.size(); ++i) 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"); 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) 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) 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) 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) 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) 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) 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) 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) 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()) 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; return itemstack;
} }
@ -414,7 +412,7 @@ public class EnchantmentHelper
} }
List<RngEnchantment> list = null; List<RngEnchantment> list = null;
Map<Integer, RngEnchantment> map = mapEnchantmentData(k, itemStackIn); Map<Enchantment, RngEnchantment> map = mapEnchantmentData(k, itemStackIn);
if (map != null && !map.isEmpty()) if (map != null && !map.isEmpty())
{ {
@ -427,16 +425,16 @@ public class EnchantmentHelper
for (int l = k; randomIn.zrange(50) <= l; l >>= 1) for (int l = k; randomIn.zrange(50) <= l; l >>= 1)
{ {
Iterator<Integer> iterator = map.keySet().iterator(); Iterator<Enchantment> iterator = map.keySet().iterator();
while (iterator.hasNext()) while (iterator.hasNext())
{ {
Integer integer = (Integer)iterator.next(); Enchantment ench = iterator.next();
boolean flag = true; boolean flag = true;
for (RngEnchantment enchantmentdata1 : list) for (RngEnchantment enchantmentdata1 : list)
{ {
if (!enchantmentdata1.enchantment.canApplyTogether(Enchantment.getEnchantmentById(integer.intValue()))) if (!enchantmentdata1.enchantment.canApplyTogether(ench))
{ {
flag = false; flag = false;
break; break;
@ -462,15 +460,15 @@ public class EnchantmentHelper
} }
} }
public static Map<Integer, RngEnchantment> mapEnchantmentData(int p_77505_0_, ItemStack p_77505_1_) public static Map<Enchantment, RngEnchantment> mapEnchantmentData(int p_77505_0_, ItemStack p_77505_1_)
{ {
Item item = p_77505_1_.getItem(); Item item = p_77505_1_.getItem();
Map<Integer, RngEnchantment> map = null; Map<Enchantment, RngEnchantment> map = null;
boolean flag = p_77505_1_.getItem() == Items.book; 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) for (int i = enchantment.getMinLevel(); i <= enchantment.getMaxLevel(); ++i)
{ {
@ -478,10 +476,10 @@ public class EnchantmentHelper
{ {
if (map == null) if (map == null)
{ {
map = Maps.<Integer, RngEnchantment>newHashMap(); map = Maps.<Enchantment, RngEnchantment>newEnumMap(Enchantment.class);
} }
map.put(enchantment.id, new RngEnchantment(enchantment, i)); map.put(enchantment, new RngEnchantment(enchantment, i));
} }
} }
} }

View file

@ -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)));
}
}
}

View file

@ -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)));
}
}
}

View file

@ -726,8 +726,8 @@ public abstract class EntityNPC extends EntityLiving
return; return;
if(stack.getItem() == Items.bow) { if(stack.getItem() == Items.bow) {
EntityArrow entityarrow = new EntityArrow(this.worldObj, this, target, 1.6F, 2.0f); EntityArrow entityarrow = new EntityArrow(this.worldObj, this, target, 1.6F, 2.0f);
int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER.id, this.getHeldItem()); int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER, this.getHeldItem());
int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.PUNCH.id, 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)); entityarrow.setDamage((double)(range * 2.0F) + this.rand.gaussian() * 0.25D + (double)(/* (float)this.worldObj.getDifficulty().getId() */ 3.0f * 0.11F));
if (i > 0) if (i > 0)
@ -740,7 +740,7 @@ public abstract class EntityNPC extends EntityLiving
entityarrow.setKnockbackStrength(j); entityarrow.setKnockbackStrength(j);
} }
if (EnchantmentHelper.getEnchantmentLevel(Enchantment.FLAME.id, this.getHeldItem()) > 0) if (EnchantmentHelper.getEnchantmentLevel(Enchantment.FLAME, this.getHeldItem()) > 0)
{ {
entityarrow.setFire(100); entityarrow.setFire(100);
} }
@ -750,7 +750,7 @@ public abstract class EntityNPC extends EntityLiving
} }
else if(stack.getItem() instanceof ItemGunBase) { else if(stack.getItem() instanceof ItemGunBase) {
EntityBullet bullet = new EntityBullet(this.worldObj, this, target, ((ItemGunBase)stack.getItem()).getVelocity(), 0.75f); 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()); // int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, this.getHeldItem());
bullet.setDamage(((ItemGunBase)stack.getItem()).getAmmo().getDamage(stack)); bullet.setDamage(((ItemGunBase)stack.getItem()).getAmmo().getDamage(stack));

View file

@ -179,7 +179,7 @@ public abstract class TradeRegistry {
static class BookForGem implements ITradeList { static class BookForGem implements ITradeList {
public void modifyMerchantRecipeList(MerchantRecipeList recipeList, Random random) { 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()); int i = random.range(enchantment.getMinLevel(), enchantment.getMaxLevel());
ItemStack itemstack = Items.enchanted_book.getEnchantedItemStack(new RngEnchantment(enchantment, i)); ItemStack itemstack = Items.enchanted_book.getEnchantedItemStack(new RngEnchantment(enchantment, i));
int j = 2 + random.zrange(5 + i * 10) + 3 * i; int j = 2 + random.zrange(5 + i * 10) + 3 * i;

View file

@ -2,6 +2,7 @@ package common.inventory;
import java.util.List; import java.util.List;
import common.enchantment.Enchantment;
import common.enchantment.EnchantmentHelper; import common.enchantment.EnchantmentHelper;
import common.enchantment.RngEnchantment; import common.enchantment.RngEnchantment;
import common.entity.npc.EntityNPC; import common.entity.npc.EntityNPC;
@ -10,6 +11,7 @@ import common.init.Items;
import common.item.ItemStack; import common.item.ItemStack;
import common.rng.Random; import common.rng.Random;
import common.util.BlockPos; import common.util.BlockPos;
import common.util.Pair;
import common.world.World; import common.world.World;
public class ContainerEnchantment extends Container public class ContainerEnchantment extends Container
@ -20,7 +22,7 @@ public class ContainerEnchantment extends Container
private Random rand; private Random rand;
public int seed; public int seed;
public int[] mana; public int[] mana;
public int[] ids; public Pair<Enchantment, Integer>[] ench;
public ContainerEnchantment(InventoryPlayer playerInv, World worldIn) public ContainerEnchantment(InventoryPlayer playerInv, World worldIn)
{ {
@ -43,7 +45,7 @@ public class ContainerEnchantment extends Container
}; };
this.rand = new Random(); this.rand = new Random();
this.mana = new int[3]; this.mana = new int[3];
this.ids = new int[] { -1, -1, -1}; this.ench = new Pair[] {null, null, null};
this.world = worldIn; this.world = worldIn;
this.position = pos; this.position = pos;
this.seed = playerInv.player.getEnchSeed(); this.seed = playerInv.player.getEnchSeed();
@ -73,6 +75,14 @@ public class ContainerEnchantment extends Container
} }
} }
public static int encodeData(Pair<Enchantment, Integer> data) {
return data == null ? -1 : data.first().ordinal() | data.second() << 8;
}
public static Pair<Enchantment, Integer> decodeData(int data) {
return data < 0 ? null : new Pair<Enchantment, Integer>(Enchantment.values()[(data & 0xff) % Enchantment.values().length], data >> 8);
}
public void onCraftGuiOpened(ICrafting listener) public void onCraftGuiOpened(ICrafting listener)
{ {
super.onCraftGuiOpened(listener); super.onCraftGuiOpened(listener);
@ -80,9 +90,9 @@ public class ContainerEnchantment extends Container
listener.sendProgressBarUpdate(this, 1, this.mana[1]); listener.sendProgressBarUpdate(this, 1, this.mana[1]);
listener.sendProgressBarUpdate(this, 2, this.mana[2]); listener.sendProgressBarUpdate(this, 2, this.mana[2]);
listener.sendProgressBarUpdate(this, 3, this.seed & -16); listener.sendProgressBarUpdate(this, 3, this.seed & -16);
listener.sendProgressBarUpdate(this, 4, this.ids[0]); listener.sendProgressBarUpdate(this, 4, encodeData(this.ench[0]));
listener.sendProgressBarUpdate(this, 5, this.ids[1]); listener.sendProgressBarUpdate(this, 5, encodeData(this.ench[1]));
listener.sendProgressBarUpdate(this, 6, this.ids[2]); listener.sendProgressBarUpdate(this, 6, encodeData(this.ench[2]));
} }
public void detectAndSendChanges() public void detectAndSendChanges()
@ -96,9 +106,9 @@ public class ContainerEnchantment extends Container
icrafting.sendProgressBarUpdate(this, 1, this.mana[1]); icrafting.sendProgressBarUpdate(this, 1, this.mana[1]);
icrafting.sendProgressBarUpdate(this, 2, this.mana[2]); icrafting.sendProgressBarUpdate(this, 2, this.mana[2]);
icrafting.sendProgressBarUpdate(this, 3, this.seed & -16); icrafting.sendProgressBarUpdate(this, 3, this.seed & -16);
icrafting.sendProgressBarUpdate(this, 4, this.ids[0]); icrafting.sendProgressBarUpdate(this, 4, encodeData(this.ench[0]));
icrafting.sendProgressBarUpdate(this, 5, this.ids[1]); icrafting.sendProgressBarUpdate(this, 5, encodeData(this.ench[1]));
icrafting.sendProgressBarUpdate(this, 6, this.ids[2]); icrafting.sendProgressBarUpdate(this, 6, encodeData(this.ench[2]));
} }
} }
@ -114,7 +124,7 @@ public class ContainerEnchantment extends Container
} }
else if (id >= 4 && id <= 6) else if (id >= 4 && id <= 6)
{ {
this.ids[id - 4] = data; this.ench[id - 4] = decodeData(data);
} }
else else
{ {
@ -181,7 +191,7 @@ public class ContainerEnchantment extends Container
for (int i1 = 0; i1 < 3; ++i1) for (int i1 = 0; i1 < 3; ++i1)
{ {
this.mana[i1] = EnchantmentHelper.calcItemStackEnchantability(this.rand, i1, l, itemstack); this.mana[i1] = EnchantmentHelper.calcItemStackEnchantability(this.rand, i1, l, itemstack);
this.ids[i1] = -1; this.ench[i1] = null;
if (this.mana[i1] < i1 + 1) if (this.mana[i1] < i1 + 1)
{ {
@ -198,7 +208,7 @@ public class ContainerEnchantment extends Container
if (list != null && !list.isEmpty()) if (list != null && !list.isEmpty())
{ {
RngEnchantment enchantmentdata = (RngEnchantment)list.get(this.rand.zrange(list.size())); RngEnchantment enchantmentdata = (RngEnchantment)list.get(this.rand.zrange(list.size()));
this.ids[j1] = enchantmentdata.enchantment.id | enchantmentdata.level << 8; this.ench[j1] = new Pair<Enchantment, Integer>(enchantmentdata.enchantment, enchantmentdata.level);
} }
} }
} }
@ -211,7 +221,7 @@ public class ContainerEnchantment extends Container
for (int i = 0; i < 3; ++i) for (int i = 0; i < 3; ++i)
{ {
this.mana[i] = 0; this.mana[i] = 0;
this.ids[i] = -1; this.ench[i] = null;
} }
} }
} }

View file

@ -177,7 +177,7 @@ public class ContainerRepair extends Container
{ {
ItemStack newStack = stack.copy(); ItemStack newStack = stack.copy();
ItemStack repStack = this.inputSlots.getStackInSlot(1); ItemStack repStack = this.inputSlots.getStackInSlot(1);
Map<Integer, Integer> newEnch = EnchantmentHelper.getEnchantments(newStack); Map<Enchantment, Integer> newEnch = EnchantmentHelper.getEnchantments(newStack);
boolean isBook = false; boolean isBook = false;
repairCost = repairCost + stack.getRepairCost() + (repStack == null ? 0 : repStack.getRepairCost()); repairCost = repairCost + stack.getRepairCost() + (repStack == null ? 0 : repStack.getRepairCost());
this.materialCost = 0; this.materialCost = 0;
@ -238,18 +238,17 @@ public class ContainerRepair extends Container
} }
} }
Map<Integer, Integer> ench = EnchantmentHelper.getEnchantments(repStack); Map<Enchantment, Integer> ench = EnchantmentHelper.getEnchantments(repStack);
Iterator enchs = ench.keySet().iterator(); Iterator<Enchantment> enchs = ench.keySet().iterator();
while (enchs.hasNext()) while (enchs.hasNext())
{ {
int eid = ((Integer)enchs.next()).intValue(); Enchantment enchantment = enchs.next();
Enchantment enchantment = Enchantment.getEnchantmentById(eid);
if (enchantment != null) if (enchantment != null)
{ {
int newLevel = newEnch.containsKey(Integer.valueOf(eid)) ? ((Integer)newEnch.get(Integer.valueOf(eid))).intValue() : 0; int newLevel = newEnch.containsKey(enchantment) ? newEnch.get(enchantment) : 0;
int level = ((Integer)ench.get(Integer.valueOf(eid))).intValue(); int level = ench.get(enchantment);
int diff; int diff;
if (newLevel == level) if (newLevel == level)
@ -270,13 +269,13 @@ public class ContainerRepair extends Container
applies = true; applies = true;
} }
Iterator newEnchs = newEnch.keySet().iterator(); Iterator<Enchantment> newEnchs = newEnch.keySet().iterator();
while (newEnchs.hasNext()) 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; applies = false;
++totalCost; ++totalCost;
@ -290,7 +289,7 @@ public class ContainerRepair extends Container
level = enchantment.getMaxLevel(); level = enchantment.getMaxLevel();
} }
newEnch.put(Integer.valueOf(eid), Integer.valueOf(level)); newEnch.put(enchantment, level);
int cost = 0; int cost = 0;
switch (enchantment.getWeight()) switch (enchantment.getWeight())

View file

@ -27,7 +27,7 @@ public class ItemBow extends Item
*/ */
public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityNPC playerIn, int timeLeft) 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)) if (flag || playerIn.inventory.hasItem(Items.arrow))
{ {
@ -52,21 +52,21 @@ public class ItemBow extends Item
entityarrow.setIsCritical(true); entityarrow.setIsCritical(true);
} }
int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER.id, stack); int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER, stack);
if (j > 0) if (j > 0)
{ {
entityarrow.setDamage(entityarrow.getDamage() + (double)j * 0.5D + 0.5D); 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) if (k > 0)
{ {
entityarrow.setKnockbackStrength(k); entityarrow.setKnockbackStrength(k);
} }
if (EnchantmentHelper.getEnchantmentLevel(Enchantment.FLAME.id, stack) > 0) if (EnchantmentHelper.getEnchantmentLevel(Enchantment.FLAME, stack) > 0)
{ {
entityarrow.setFire(100); entityarrow.setFire(100);
} }

View file

@ -34,8 +34,8 @@ public class ItemEnchantedBook extends Item
public void getSubItems(Item itemIn, CheatTab tab, List<ItemStack> subItems) public void getSubItems(Item itemIn, CheatTab tab, List<ItemStack> subItems)
{ {
for (Enchantment enchantment : Enchantment.ENCHANTMENTS) { for (Enchantment enchantment : Enchantment.values()) {
if(enchantment != null && enchantment.type != null) if(enchantment != null && enchantment.getType() != null)
subItems.add(Items.enchanted_book.getEnchantedItemStack(new RngEnchantment(enchantment, enchantment.getMaxLevel()))); 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) for (int i = 0; i < nbttaglist.size(); ++i)
{ {
int j = nbttaglist.get(i).getShort("id"); Enchantment j = Enchantment.getEnchantment(nbttaglist.get(i).getString("id"));
int k = nbttaglist.get(i).getShort("lvl");
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); 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) if (nbttagcompound.getShort("lvl") < enchantment.level)
{ {
@ -104,7 +104,7 @@ public class ItemEnchantedBook extends Item
if (flag) if (flag)
{ {
TagObject nbttagcompound1 = new TagObject(); TagObject nbttagcompound1 = new TagObject();
nbttagcompound1.setShort("id", (short)enchantment.enchantment.id); nbttagcompound1.setString("id", enchantment.enchantment.getName());
nbttagcompound1.setShort("lvl", (short)enchantment.level); nbttagcompound1.setShort("lvl", (short)enchantment.level);
nbttaglist.add(nbttagcompound1); nbttaglist.add(nbttagcompound1);
} }

View file

@ -30,13 +30,13 @@ public abstract class ItemGunBase extends Item
if(stack.getItemDamage() >= this.getMaxDamage()) if(stack.getItemDamage() >= this.getMaxDamage())
return stack; return stack;
boolean flag = // playerIn.creative || boolean flag = // playerIn.creative ||
EnchantmentHelper.getEnchantmentLevel(Enchantment.INFINITY.id, stack) > 0; EnchantmentHelper.getEnchantmentLevel(Enchantment.INFINITY, stack) > 0;
if (flag || playerIn.inventory.hasItem(this.getAmmo())) if (flag || playerIn.inventory.hasItem(this.getAmmo()))
{ {
EntityBullet bullet = new EntityBullet(worldIn, playerIn, this.getVelocity()); EntityBullet bullet = new EntityBullet(worldIn, playerIn, this.getVelocity());
bullet.setDamage(this.getAmmo().getDamage(stack)); bullet.setDamage(this.getAmmo().getDamage(stack));
int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER.id, stack); int j = EnchantmentHelper.getEnchantmentLevel(Enchantment.POWER, stack);
if (j > 0) if (j > 0)
{ {

View file

@ -319,7 +319,7 @@ public final class ItemStack
{ {
if (amount > 0) if (amount > 0)
{ {
int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.UNBREAKING.id, this); int i = EnchantmentHelper.getEnchantmentLevel(Enchantment.UNBREAKING, this);
int j = 0; int j = 0;
for (int k = 0; i > 0 && k < amount; ++k) 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) for (int j = 0; j < nbttaglist.size(); ++j)
{ {
int k = nbttaglist.get(j).getShort("id"); Enchantment k = Enchantment.getEnchantment(nbttaglist.get(j).getString("id"));
int l = nbttaglist.get(j).getShort("lvl");
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<TagObject> nbttaglist = this.tag.getList("ench"); List<TagObject> nbttaglist = this.tag.getList("ench");
TagObject nbttagcompound = new TagObject(); TagObject nbttagcompound = new TagObject();
nbttagcompound.setShort("id", (short)ench.id); nbttagcompound.setString("id", ench.getName());
nbttagcompound.setShort("lvl", (short)(/* (byte) */ level)); nbttagcompound.setShort("lvl", (short)(/* (byte) */ level));
nbttaglist.add(nbttagcompound); nbttaglist.add(nbttagcompound);
} }
@ -1028,7 +1028,7 @@ public final class ItemStack
TagObject tag; TagObject tag;
for(int z = 0; z < oldEnch.size(); z++) { for(int z = 0; z < oldEnch.size(); z++) {
tag = oldEnch.get(z); tag = oldEnch.get(z);
if(tag.getShort("id") != ench.id) { if(Enchantment.getEnchantment(tag.getString("id")) != ench) {
newEnch.add(tag); newEnch.add(tag);
} }
else { else {

View file

@ -15,7 +15,7 @@ public class CommandMagic extends Command {
public CommandMagic() { public CommandMagic() {
super("magic"); super("magic");
this.addEnum("enchantment", Enchantment.class, Enchantment.ENCHANTMENTS); this.addEnum("enchantment", Enchantment.class, Enchantment.values());
this.setParamsOptional(); this.setParamsOptional();
this.addInt("level", 1, 32767); this.addInt("level", 1, 32767);
this.addFlag("remove", 'r'); 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) { public void exec(CommandEnvironment env, Executor exec, Enchantment ench, Integer level, boolean remove, boolean force, ItemStack stack) {
if(remove) { if(remove) {
int current = EnchantmentHelper.getEnchantmentLevel(ench.id, stack); int current = EnchantmentHelper.getEnchantmentLevel(ench, stack);
if(current == 0) if(current == 0)
throw new RunException("%s hat die Verzauberung %s nicht", stack.getDisplayName(), ench.getDisplay()); throw new RunException("%s hat die Verzauberung %s nicht", stack.getDisplayName(), ench.getDisplay());
stack.removeEnchantment(ench); 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()); throw new RunException("Level %d ist zu hoch für %s, maximal %d erlaubt", level, ench.getDisplay(), ench.getMaxLevel());
if(!ench.canApply(stack)) if(!ench.canApply(stack))
throw new RunException("Verzauberung %s kann nicht auf %s verwendet werden", ench.getDisplay(), stack.getDisplayName()); throw new RunException("Verzauberung %s kann nicht auf %s verwendet werden", ench.getDisplay(), stack.getDisplayName());
for(Entry<Integer, Integer> id : EnchantmentHelper.getEnchantments(stack).entrySet()) { for(Entry<Enchantment, Integer> id : EnchantmentHelper.getEnchantments(stack).entrySet()) {
Enchantment enc = Enchantment.getEnchantmentById(id.getKey()); if(id.getKey() != ench && !ench.canApplyTogether(id.getKey()))
if(enc != ench && !ench.canApplyTogether(enc)) throw new RunException("Verzauberung %s kann nicht zusammen mit %s verwendet werden", ench.getDisplay(), id.getKey().getFormattedName(id.getValue()));
throw new RunException("Verzauberung %s kann nicht zusammen mit %s verwendet werden", ench.getDisplay(), enc.getFormattedName(id.getValue()));
} }
} }
stack.removeEnchantment(ench); stack.removeEnchantment(ench);