--- miscJava/bukkit-minecraft-plugins/CreativeWorld/src/main/java/dk/thoerup/bukkit/creativeworld/WorldChanged.java 2012/11/27 15:38:11 1874 +++ miscJava/bukkit-minecraft-plugins/CreativeWorld/src/main/java/dk/thoerup/bukkit/creativeworld/WorldChanged.java 2012/11/29 20:18:25 1875 @@ -6,12 +6,16 @@ import org.bukkit.event.player.*; import org.bukkit.configuration.*; import org.bukkit.inventory.*; +import org.bukkit.enchantments.*; + +import java.util.*; public class WorldChanged implements Listener { final static String STACK_TYPE = ".type"; final static String STACK_AMOUNT = ".amount"; final static String STACK_DAMAGE = ".damage"; final static String STACK_DATA = ".data"; + final static String STACK_ENCHANTMENT = ".enchantment"; final static String INVENTORY_CREATIVE = ".inventory.creative."; final static String INVENTORY_CREATIVE_ARMOR = ".inventory.creative.armor."; @@ -100,18 +104,21 @@ int amount = 0; int damage = 0; int data = 0; + String enchantment = ""; if (stack != null) { type = stack.getTypeId(); amount = stack.getAmount(); damage = stack.getDurability(); data = stack.getData().getData(); + enchantment = getEnchantmentString(stack); } config.set(node + STACK_TYPE, type ); config.set(node + STACK_AMOUNT, amount ); config.set(node + STACK_DAMAGE, damage ); config.set(node + STACK_DATA, data ); + config.set(node + STACK_ENCHANTMENT, enchantment ); } public ItemStack getItemStack(Configuration config, String node) { @@ -119,10 +126,45 @@ int amount = config.getInt( node + STACK_AMOUNT); short damage = (short) config.getInt(node + STACK_DAMAGE); byte data = (byte) config.getInt(node + STACK_DATA); + String enc = config.getString(node + STACK_ENCHANTMENT ); ItemStack stack = new ItemStack(type,amount,damage,data); stack.setDurability( damage ); //ItemStack constructor with Data value overrides durability + stack.addEnchantments( parseEnchantmentString(enc) ); return stack; } + + public String getEnchantmentString(ItemStack stack) { + StringBuilder sb = new StringBuilder(); + + Map map = stack.getEnchantments(); + for(Enchantment enc : map.keySet() ) { + if (sb.length() > 0) + sb.append(";"); + + Integer level = map.get(enc); + sb.append( enc.getName() ).append("=").append(level); + } + + return sb.toString(); + } + + public Map parseEnchantmentString(String input) { + Map map = new HashMap(); + + if (input.length() == 0) + return map; + + String parts[] = input.split(";"); + for(String part : parts) { + String keyval[] = part.split("="); + + Enchantment enc = Enchantment.getByName( keyval[0] ); + int level = Integer.parseInt( keyval[1]); + map.put(enc, level); + } + + return map; + } }