Problème IGUIHandler
-
package armacraft.net.GUI; import armacraft.net.ExtendedPropInv; import armacraft.net.Items.Water; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraftforge.common.util.Constants; public class InventaireArma implements IInventory { private EntityPlayer player; ExtendedPropInv prop; public int size; public InventaireArma(int size, EntityPlayer player) { this.size = size; this.prop.content = new ItemStack; this.player = player; this.prop = ExtendedPropInv.get(player); } /** * This methods reads the content of the NBTTagCompound inside the container * * @param comp * the container NBTTagCompound */ public void readFromNBT(NBTTagCompound comp) { NBTTagList nbtlist = comp.getTagList("a", Constants.NBT.TAG_COMPOUND); for (int i = 0; i < nbtlist.tagCount(); i++) { NBTTagCompound comp1 = nbtlist.getCompoundTagAt(i); int slot = comp1.getInteger("z"); this.prop.content[slot] = ItemStack.loadItemStackFromNBT(comp1); } } /** * This methods saves the content inside the container * * @param comp * the NBTTagCompound to write in */ public void writeToNBT(NBTTagCompound comp) { NBTTagList nbtlist = new NBTTagList(); for (int i = 0; i < this.size; i++) { if (this.prop.content* != null) { NBTTagCompound comp1 = new NBTTagCompound(); comp1.setInteger("Slot", i); this.prop.content*.writeToNBT(comp1); nbtlist.appendTag(comp1); } } comp.setTag("Inventory", nbtlist); } @Override public int getSizeInventory() { return this.size; } @Override public ItemStack getStackInSlot(int index) { return this.prop.content[index]; } @Override public ItemStack decrStackSize(int index, int amount) { ItemStack stack = getStackInSlot(index); if (stack != null) { if (stack.stackSize > amount) { stack = stack.splitStack(amount); if (stack.stackSize == 0) this.prop.content[index] = null; } else { this.prop.content[index] = null; } } return stack; } @Override public ItemStack getStackInSlotOnClosing(int index) { ItemStack stack = getStackInSlot(index); if (stack != null) this.prop.content[index] = null; return stack; } @Override public void setInventorySlotContents(int index, ItemStack stack) { this.prop.content[index] = stack; } @Override public String getInventoryName() { return "amm" + ".inventaire.arma"; } @Override public boolean hasCustomInventoryName() { return false; } @Override public int getInventoryStackLimit() { return 64; } @Override public void markDirty() {} @Override public boolean isUseableByPlayer(EntityPlayer player) { return true; } @Override public void openInventory() { } @Override public void closeInventory() { } /** * Prevents backpack-ception */ @Override public boolean isItemValidForSlot(int index, ItemStack stack) { return !(stack.getItem() instanceof Water); } } -
T’a fait ce que j’ai dit dans l’autre message à moitié… Il faut que tu définisses this.prop dans ton constructeur, sinon ça marchera pas.
-
Attend, le constructeur c’est pas le code dans le commonproxy ?
-
Whaaaat ? Je parle du constructeur de ton InventaireArma.
-
Est bah le soucis il est ou ?
j’ai ça dedant: this.prop = ExtendedPropInv.get(player); -
Ah oui dsl, j’avais pas vu :-/, mais de tt façon, il faut que tu le mettes avant this.prop.content = ……, car à cette endroit, prop n’est pas encore défini.
-
Pas grave ^^, Effectivement, quand je le met en premier plus de crash mais par contre mon inventaire s’ouvre pas et y’a des soucis avec les packet a l’infinie tu m’avais dis de faire quoi déjà j’ai oublier ^^
-
C’était que à la réception du packet, tu appelles setItem() de ton extended prop et que cette fonction appele sync() qui renvoie un packet.
-
Effectivement ^^, par contre mon inv s’ouvre pas
comme si il était cancelled. -
? Tu ouvres bien le container sur le serveur et le gui sur le client ? Met un System.out.println() dans ton GuiHandler, puis dans tes différents composants pour voir où ça se bloque
-
Je pense que c’est ici le prob.
[19:36:29] [Client thread/INFO] [STDOUT]: [armacraft.net.GUI.ContainerArma:<init>:29]: // il s’ouvre côté client puis serveur
[19:36:29] [Server thread/INFO] [STDOUT]: [armacraft.net.GUI.ContainerArma:<init>:29]:</init></init> -
Je sais pas, pense pas mais possible, alors ouvre uniquement sur le serveur if(!world.isRemote) où tu appelles openGui
-
Ok,
donc j’ai ça maintenant:[21:49:39] [Server thread/INFO] [STDOUT]: [armacraft.net.GUI.ContainerArma:<init>:29]: [21:49:39] [Server thread/INFO] [STDOUT]: [armacraft.net.Packets.PacketInv$Handler:onMessage:69]: [21:49:39] [Server thread/INFO] [STDOUT]: [armacraft.net.Packets.PacketInv$Handler:onMessage:69]: [21:49:39] [Client thread/INFO] [STDOUT]: [armacraft.net.GUI.ContainerArma:<init>:29]: [21:49:39] [Server thread/INFO] [STDOUT]: [armacraft.net.Packets.PacketInv$Handler:onMessage:69]:Et mon inv s’ouvre pas, pour info j’ouvre mon inv avec un packet qui passe côté serveur .</init></init>
-
Donc t’a une boucle, tu renvoies où le packet ?
-
Je r’envois rien du tout j’ai juste le player.opengui et le if(!world.isremote) dans mon IMessage
-
Je voulais pas dire Renvoie, mais envoie le packet
-
Ah, bah je return message; donc je return sur mon Packet ou y’a le player.opengui
-
Ahhh bah dans mon keyinputevent dans mon client proxy je l’envois avec un sendtoserver
-
Vérifies que cette méthode ne soit pas rappeler quelle que part. Et vérifiés aussi que t’envoie pas ce packet dans ton Extended Properties
-
Ok, donc j’ai bien tout regardé mon packet n’est pas envoyer dans l’extended , et ma méthode est appeler que une fois.
Mon inventaire s’ouvre toujours pas.