package net.kopara.core.utils; import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.inventory.meta.ItemMeta; import java.util.HashMap; import org.bukkit.Material; import java.util.Map; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ByteArrayInputStream; import javax.xml.bind.DatatypeConverter; import java.io.OutputStream; import java.io.ObjectOutputStream; import java.io.ByteArrayOutputStream; import org.bukkit.inventory.ItemStack; public class ItemSerializer { public static String itemsToString(final ItemStack[] items) { try { final ByteArrayOutputStream bos = new ByteArrayOutputStream(); final ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(serializeItemStack(items)); oos.flush(); return DatatypeConverter.printBase64Binary(bos.toByteArray()); } catch (Exception e) { Logger.exception(e); return ""; } } public static ItemStack[] stringToItems(final String s) { try { final ByteArrayInputStream bis = new ByteArrayInputStream(DatatypeConverter.parseBase64Binary(s)); final ObjectInputStream ois = new ObjectInputStream(bis); return deserializeItemStack((Map[])ois.readObject()); } catch (Exception e) { Logger.exception(e); return new ItemStack[] { new ItemStack(Material.AIR) }; } } private static Map[] serializeItemStack(final ItemStack[] items) { final Map[] result = new Map[items.length]; for (int i = 0; i < items.length; ++i) { final ItemStack is = items[i]; if (is == null) { result[i] = new HashMap(); } else { result[i] = is.serialize(); if (is.hasItemMeta()) { result[i].put("meta", is.getItemMeta().serialize()); } } } return (Map[])result; } private static ItemStack[] deserializeItemStack(final Map[] map) { final ItemStack[] items = new ItemStack[map.length]; for (int i = 0; i < items.length; ++i) { final Map s = map[i]; if (s.size() == 0) { items[i] = null; } else { try { if (s.containsKey("meta")) { final Map im = new HashMap(s.remove("meta")); <--- Tu jest błąd im.put("==", "ItemMeta"); final ItemStack is = ItemStack.deserialize((Map)s); is.setItemMeta((ItemMeta)ConfigurationSerialization.deserializeObject((Map)im)); items[i] = is; } else { items[i] = ItemStack.deserialize((Map)s); } } catch (Exception e) { Logger.exception(e); items[i] = null; } } } return items; } }