Problème IGUIHandler
-
Ah oui je me rappelkais plus qu’on pouvait mettre directement les items stacks
-
Merci robin,
j’ai quelques érreur par contre:
@Override public void fromBytes(ByteBuf buf) { int size = buf.readInt(); for(int i = 0; i < size; i++) { items.add(ByteBufUtils.readItemStack(buf)); // ici le add a une érreur et quand je met addAll c'est pareil. } } @Override public void toBytes(ByteBuf buf) { buf.writeInt(items.size()); for(ItemStack stack : items) // ici il me demande de mettre ItemStack[] a la place. { ByteBufUtils.writeItemStack(buf, stack); } }Merci de votre aide!
-
Si tu veux faire comme ça, ne passe pas par une liste mais directement par un array de stacks
-
C’est pareil

-
Ah j’avais pas fait attention que s’était une liste de tableau d’item stack x)
Du-coup faut deux boucles.@Override public void fromBytes(ByteBuf buf) { int size = buf.readInt(); for(int i = 0; i < size; i++) { ItemStack[] stacks = new ItemStack[buf.readInt()]; for(int j = 0; j < stacks.length; j++) { stacks[j] = ByteBufUtils.readItemStack(buf); } items.add(stacks); } } @Override public void toBytes(ByteBuf buf) { buf.writeInt(items.size()); for(ItemStack[] stacks : items) { buf.writeInt(stacks.length); for(int i = 0; i < stacks.length;i++) { ByteBufUtils.writeItemStack(buf, stacks_); } } } ```_ -
Pas besoin de se compliquer la vie avec une liste, une n’a pas plusieurs array à envoyer
-
C’e’st toujours pareil j’ai toujours deux érreur pour l’instant au même endroit
-
Montre le code que tu as
-
Tien:
public class PacketInv implements IMessage{ public ArrayStack <itemstack[]>items = new ArrayStack<itemstack[]>(); public PacketInv(ArrayStack <itemstack[]>items2) { this.items = items2; } @Override public void fromBytes(ByteBuf buf) { int size = buf.readInt(); for(int i = 0; i < size; i++) { ItemStack[] stacks = new ItemStack[buf.readInt()]; for(int j = 0; j < stacks.length; j++) { stacks[j] = ByteBufUtils.readItemStack(buf); } items.add(stacks); } } @Override public void toBytes(ByteBuf buf) { buf.writeInt(items.size()); for(ItemStack[] stacks : items) { buf.writeInt(stacks.length); for(int i = 0; i < stacks.length;i++) { ByteBufUtils.writeItemStack(buf, stacks_); } } } public static class Handler implements IMessageHandler <packetinv, imessage="">{ @Override public IMessage onMessage(PacketInv message, MessageContext ctx) { EntityPlayerMP player = ctx.getServerHandler().playerEntity; ExtendedPropInv props = ExtendedPropInv .get(player); props.setItem(message.items); return message; } } } ```</packetinv,>_</itemstack[]></itemstack[]></itemstack[]> -
Elles sont où les erreurs ?
-
1. public ItemStack[] items; 2. public PacketInv(ItemStack[] items2) { 3. this.items = items2; 4. } 5. @Override 6. public void fromBytes(ByteBuf buf) { 7. int size = buf.readInt(); 8. items = new ItemStack; 9. for(int i = 0; i < size; i++) 10. { 11. items* = ByteBufUtils.readItemStack(buf); 12. } 13. } 14. @Override 15. public void toBytes(ByteBuf buf) { 16. buf.writeInt(items.lenght); 17. for(ItemStack stack : items) 18. { 19. ByteBufUtils.writeItemStack(buf, stack); 20. } 21. } 22. public static class Handler implements IMessageHandler <packetinv, imessage="">{</packetinv,> 23. @Override 24. public IMessage onMessage(PacketInv message, MessageContext ctx) { 25. EntityPlayerMP player = ctx.getServerHandler().playerEntity; 26. ExtendedPropInv props = ExtendedPropInv 27. .get(player); 28. props.setItem(message.items); 29. return message; 30. } 31. } 32. }Ce sera plus simple comme ça, après faut que tu changes deux trois trucs au niveau de ton ExtendedPropInv comme c’est un array au lieu d’une liste d’arrays.
-
@Override public void fromBytes(ByteBuf buf) { int size = buf.readInt(); for(int i = 0; i < size; i++) { ItemStack[] stacks = new ItemStack[buf.readInt()]; for(int j = 0; j < stacks.length; j++) { stacks[j] = ByteBufUtils.readItemStack(buf); } items.add(stacks); // ici le add n'est pas définie pour les array de stack } } @Override public void toBytes(ByteBuf buf) { buf.writeInt(items.size()); for(ItemStack[] stacks : items) // et ici j'ai compris, je te met les screens des deux érreur au cas ou. { buf.writeInt(stacks.length); for(int i = 0; i < stacks.length;i++) { ByteBufUtils.writeItemStack(buf, stacks_); } }Screen:
-
Eclipse a accepté que tu mettes ArrayStack <itemstack[]>?, parce qu’il faut mettre ArrayList <itemstack[]>au lieu de ce que t’a mis.</itemstack[]></itemstack[]>
-
Tu peux envoyer ta classe avec les importations ? Car ce n’est pas normal.
-
import java.util.ArrayList; import scala.collection.mutable.ArrayStack; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; import net.minecraft.world.World; import armacraft.net.AltisMineMod; import armacraft.net.ExtendedEntityPropWater; import armacraft.net.ExtendedPropInv; import armacraft.net.ExtendedPropMoney; import cpw.mods.fml.common.network.ByteBufUtils; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; public class PacketInv implements IMessage{ public ArrayStack <itemstack[]>items = new ArrayStack<itemstack[]>(); public PacketInv(ArrayStack <itemstack[]>items2) { this.items = items2; } @Override public void fromBytes(ByteBuf buf) { int size = buf.readInt(); for(int i = 0; i < size; i++) { ItemStack[] stacks = new ItemStack[buf.readInt()]; for(int j = 0; j < stacks.length; j++) { stacks[j] = ByteBufUtils.readItemStack(buf); } items.add(stacks); } } @Override public void toBytes(ByteBuf buf) { buf.writeInt(items.size()); for(ItemStack[] stacks : items) { buf.writeInt(stacks.length); for(int i = 0; i < stacks.length;i++) { ByteBufUtils.writeItemStack(buf, stacks_); } } } public static class Handler implements IMessageHandler <packetinv, imessage="">{ @Override public IMessage onMessage(PacketInv message, MessageContext ctx) { EntityPlayerMP player = ctx.getServerHandler().playerEntity; ExtendedPropInv props = ExtendedPropInv .get(player); props.setItem(message.items); return message; } } } ```</packetinv,>_</itemstack[]></itemstack[]></itemstack[]> -
Ah ok je vois d’où ça vient… Remplace tout les “ArrayStack” par des “ArrayList” (dans ton ExtendedEntityProperties aussi).
-
J’avais même pas vu plutôt x)
-
C’est bon merci ^^

-
résolu ?
-
Nan ^^ toujours pas,
Question:
Je dois créer une fonction ou passer par un packet pour ouvrir mon inventaire ?