Problème IGUIHandler
-
Je sais pas pour ta question du haut, je sais pas du tout comment les entity Properties fonctionnent, dsl.
EDIT : j’ai regardé rapidement le tuto, et donc dans le packet, il faut que tu mettes ton array de stacks sous forme de nbt que tu write dans le PacketBuffer (ou ByteBuffer), à la réception, tu récupère le tag et tu recompose ton array.
-
D’accord merci je pense que j’ai un truc la, par contre j’ai un soucis comment je fais la?:
class packet:public ArrayList <itemstack[]>items = new ArrayList<itemstack[]>(); @Override public void fromBytes(ByteBuf buf) { this.items = buf.readBytes(this.items); // érreur ici } @Override public void toBytes(ByteBuf buf) { buf.array().equals(this.items); // j'ai mis sa j'ai pas dérreur mais jpense que c'est faux }Je trouve pas le bon buf</itemstack[]></itemstack[]>
-
Si tu veux utiliser les nbt avec les buffets, il faut un PacketBuffer (new PacketBuffer (ton bytebuffer);)
-
Comment ça? tu peux m’expliqué mieux j’ai du mal a comprendre .
Dis moi quand j’ouvre mon inv avec un packet side serveur j’ai plus le soucis de l’item qui se drop quand je ferme l’inv par contre l’item se save pas dans le slot que ferme et je ré ouvre il est plus dedans .
-
Faut faire comme ça pour une array list :
public ArrayList <itemstack[]>items = new ArrayList<itemstack[]>(); @Override public void fromBytes(ByteBuf buf) { int size = buf.readInt(); for(int i = 0; i < size; i++) { items.add(ByteBufUtils.readItemStack(buf)); } } @Override public void toBytes(ByteBuf buf) { buf.writeInt(items.size); for(ItemStack stack : items) { ByteBufUtils.writeItemStack(buf, stack); } } ```</itemstack[]></itemstack[]> -
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[]>