VictorHeaven Postado Setembro 12, 2017 Denunciar Compartilhar Postado Setembro 12, 2017 Olá, Gostaria de um serializer e vice-versa, e se possível, como usar pois eu vi um na spigot e quebrei a cabeça :X valeu! :3 Link para o comentário Compartilhar em outros sites More sharing options...
zAth Postado Setembro 12, 2017 Denunciar Compartilhar Postado Setembro 12, 2017 (editado) Class public static String toBase64(ItemStack item) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); DataOutputStream dataOutput = new DataOutputStream(outputStream); NBTTagList nbtTagListItems = new NBTTagList(); NBTTagCompound nbtTagCompoundItem = new NBTTagCompound(); net.minecraft.server.v1_8_R3.ItemStack nmsItem = CraftItemStack.asNMSCopy(item); nmsItem.save(nbtTagCompoundItem); nbtTagListItems.add(nbtTagCompoundItem); try { NBTCompressedStreamTools.a(nbtTagCompoundItem, (DataOutput)dataOutput); } catch (IOException e) { e.printStackTrace(); } return new BigInteger(1, outputStream.toByteArray()).toString(32); } public static org.bukkit.inventory.ItemStack fromBase64(String data) { ByteArrayInputStream inputStream = new ByteArrayInputStream(new BigInteger(data, 32).toByteArray()); NBTTagCompound nbtTagCompoundRoot = null; try { nbtTagCompoundRoot = NBTCompressedStreamTools.a(new DataInputStream(inputStream)); } catch (IOException e) { e.printStackTrace(); } net.minecraft.server.v1_8_R3.ItemStack nmsItem = null; if (nbtTagCompoundRoot != null) { nmsItem = net.minecraft.server.v1_8_R3.ItemStack.createStack(nbtTagCompoundRoot); } return CraftItemStack.asBukkitCopy(nmsItem); } public static String toBase64List(ItemStack[] items) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); dataOutput.writeInt(items.length); int index = 0; for (final ItemStack is : items) { if (is != null && is.getType() != Material.AIR) { dataOutput.writeObject(toBase64(is)); } else { dataOutput.writeObject(null); } dataOutput.writeInt(index); ++index; } dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save item stacks.", e); } } public static ItemStack[] fromBase64List(String items) { try { ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(items)); BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream); int size = dataInput.readInt(); ItemStack[] list = new ItemStack[size]; for (int i = 0; i < size; ++i) { Object utf = dataInput.readObject(); int slot = dataInput.readInt(); if (utf != null) { list[slot] = fromBase64((String)utf); } } dataInput.close(); return list; } catch (Exception e) { throw new IllegalStateException("Unable to load item stacks.", e); } } Uso Inventory inventory = Bukkit.getServer().createInventory(null, 9, "Inventario"); inventory.addItem(new ItemStack(69)); String serializedContents = Serialize.toBase64List(inventory.getContents()); ItemStack[] deserializedContents = Serialize.fromBase64List(serializedContents); Isso serializa os itens apenas. O holder, tamanho do inventário, titulo do inventário e slot de cada item não sei como serializar. Editado Setembro 12, 2017 por zAth Link para o comentário Compartilhar em outros sites More sharing options...
VictorHeaven Postado Setembro 12, 2017 Autor Denunciar Compartilhar Postado Setembro 12, 2017 Class public static String toBase64(ItemStack item) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); DataOutputStream dataOutput = new DataOutputStream(outputStream); NBTTagList nbtTagListItems = new NBTTagList(); NBTTagCompound nbtTagCompoundItem = new NBTTagCompound(); net.minecraft.server.v1_8_R3.ItemStack nmsItem = CraftItemStack.asNMSCopy(item); nmsItem.save(nbtTagCompoundItem); nbtTagListItems.add(nbtTagCompoundItem); try { NBTCompressedStreamTools.a(nbtTagCompoundItem, (DataOutput)dataOutput); } catch (IOException e) { e.printStackTrace(); } return new BigInteger(1, outputStream.toByteArray()).toString(32); } public static org.bukkit.inventory.ItemStack fromBase64(String data) { ByteArrayInputStream inputStream = new ByteArrayInputStream(new BigInteger(data, 32).toByteArray()); NBTTagCompound nbtTagCompoundRoot = null; try { nbtTagCompoundRoot = NBTCompressedStreamTools.a(new DataInputStream(inputStream)); } catch (IOException e) { e.printStackTrace(); } net.minecraft.server.v1_8_R3.ItemStack nmsItem = null; if (nbtTagCompoundRoot != null) { nmsItem = net.minecraft.server.v1_8_R3.ItemStack.createStack(nbtTagCompoundRoot); } return CraftItemStack.asBukkitCopy(nmsItem); } public static String toBase64List(ItemStack[] items) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); dataOutput.writeInt(items.length); int index = 0; for (final ItemStack is : items) { if (is != null && is.getType() != Material.AIR) { dataOutput.writeObject(toBase64(is)); } else { dataOutput.writeObject(null); } dataOutput.writeInt(index); ++index; } dataOutput.close(); return Base64Coder.encodeLines(outputStream.toByteArray()); } catch (Exception e) { throw new IllegalStateException("Unable to save item stacks.", e); } } public static ItemStack[] fromBase64List(String items) { try { ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(items)); BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream); int size = dataInput.readInt(); ItemStack[] list = new ItemStack[size]; for (int i = 0; i < size; ++i) { Object utf = dataInput.readObject(); int slot = dataInput.readInt(); if (utf != null) { list[slot] = fromBase64((String)utf); } } dataInput.close(); return list; } catch (Exception e) { throw new IllegalStateException("Unable to load item stacks.", e); } } Uso Inventory inventory = Bukkit.getServer().createInventory(null, 9, "Inventario"); inventory.addItem(new ItemStack(69)); String serializedContents = Serialize.toBase64List(inventory.getContents()); ItemStack[] deserializedContents = Serialize.fromBase64List(serializedContents); Isso serializa os itens apenas. O holder, tamanho do inventário, titulo do inventário e slot de cada item não sei como serializar. Como eu verifico "se ele não tiver uma serializer" ou relacionado, exemplo, se ele não tiver um inventário salvo, salvar um novo Link para o comentário Compartilhar em outros sites More sharing options...
zAth Postado Setembro 13, 2017 Denunciar Compartilhar Postado Setembro 13, 2017 Como eu verifico "se ele não tiver uma serializer" ou relacionado, exemplo, se ele não tiver um inventário salvo, salvar um novo Isso depende de você ;-; o que quer fazer? Se não tiver um inv salvo vc seta null, ou serializa um inv com Material.AIR e dae quando for pegar vê se é nulo ou se a lista só tem 1 item e se é Material.AIR, se não for nenhum dos 2 é porque ele tem um inv salvo ;-; Link para o comentário Compartilhar em outros sites More sharing options...
leonardosc Postado Setembro 13, 2017 Denunciar Compartilhar Postado Setembro 13, 2017 Sua dúvida foi marcada como [Resolvido] e movido à área de dúvidas resolvidas.Atenciosamente,Gamer's Board Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
VictorHeaven
Olá,
Gostaria de um serializer e vice-versa, e se possível, como usar pois eu vi um na spigot e quebrei a cabeça :X
valeu! :3
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados