Ir para conteúdo
  • 0

[Pedido Java] Serializer Inventory


VictorHeaven

Pergunta

4 respostass a esta questão

Posts Recomendados

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 por zAth
Link para o comentário
Compartilhar em outros sites

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

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

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...