|
@@ -1,5 +1,6 @@
|
|
|
package com.gmail.nossr50.skills.repair;
|
|
|
|
|
|
+import java.lang.reflect.Field;
|
|
|
import java.util.Map;
|
|
|
import java.util.Map.Entry;
|
|
|
import java.util.Random;
|
|
@@ -108,6 +109,7 @@ public class Repair {
|
|
|
is.removeEnchantment(x);
|
|
|
}
|
|
|
player.sendMessage(LocaleLoader.getString("Repair.Arcane.Lost"));
|
|
|
+ clearEnchantTag(is, player);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -141,6 +143,7 @@ public class Repair {
|
|
|
|
|
|
if (newEnchants.isEmpty()) {
|
|
|
player.sendMessage(LocaleLoader.getString("Repair.Arcane.Fail"));
|
|
|
+ clearEnchantTag(is, player);
|
|
|
}
|
|
|
else if (downgraded || newEnchants.size() < enchants.size()) {
|
|
|
player.sendMessage(LocaleLoader.getString("Repair.Arcane.Downgrade"));
|
|
@@ -150,6 +153,33 @@ public class Repair {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private static void clearEnchantTag(ItemStack is, Player player) {
|
|
|
+ Object o;
|
|
|
+ Class c;
|
|
|
+ Field f;
|
|
|
+
|
|
|
+ o = is;
|
|
|
+ c = o.getClass();
|
|
|
+
|
|
|
+ try {
|
|
|
+ f = c.getDeclaredField("handle");
|
|
|
+ f.setAccessible(true);
|
|
|
+ o = f.get(o);
|
|
|
+
|
|
|
+ c = o.getClass();
|
|
|
+ f = c.getDeclaredField("tag");
|
|
|
+ o = f.get(o);
|
|
|
+
|
|
|
+ c = o.getClass();
|
|
|
+ f = c.getDeclaredField("map");
|
|
|
+ f.setAccessible(true);
|
|
|
+ Map tagMap = (Map) f.get(o);
|
|
|
+
|
|
|
+ tagMap.remove("ench");
|
|
|
+ }
|
|
|
+ catch(Exception e) {}
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Gets chance of keeping enchantment during repair.
|
|
|
*
|