Problème IGUIHandler
-
Bah je peux le remplacer par quoi?
-
Ouais c’est bon^^ par contre petit soucis quand je le met un item dans mon inv et que je referme il drop fin en gros il reste pas dans le slot .
merci d’ailleurs
-
Help?
-
Ah dsl, voulais revenir et ai oublié, ton inv, c’est birn un backpack ?
Et met tt ton code en lien avec ça -
Pas grave ^^, Bah en fait j’ai repris les code du backpack de SCAREX mais moi je veux en faire un inventaire, peut-être pour ça que y’a des soucis^^ non?
Birn = ? -
Il faut que tu saves bien et load bien dans les nbt de l’items et normalement, y a pas de raison que ça loot les items.
Montre ta classe InventoryArma, car il y a une fonction qui pourrait causer ça. -
D’acc je fais ça ce soir tien pour la class inv:
package armacraft.net.GUI; 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.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraftforge.common.util.Constants; public class InventaireArma implements IInventory { public ItemStack[] content; public int size; public InventaireArma(ItemStack container, int size) { this.size = size; this.content = new ItemStack; } /** * 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.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.content* != null) { NBTTagCompound comp1 = new NBTTagCompound(); comp1.setInteger("Slot", i); this.content*.writeToNBT(comp1); nbtlist.appendTag(comp1); } } comp.setTag("e", nbtlist); } @Override public int getSizeInventory() { return this.size; } @Override public ItemStack getStackInSlot(int index) { return this.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.content[index] = null; } else { this.content[index] = null; } } return stack; } @Override public ItemStack getStackInSlotOnClosing(int index) { ItemStack stack = getStackInSlot(index); if (stack != null) this.content[index] = null; return stack; } @Override public void setInventorySlotContents(int index, ItemStack stack) { this.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); } } -
ça m’a l’air d’être bon, je vérifierais en détail tout à l’heure en regardant comment la fermeture des container est gérée. Vérifies juste que tes méthodes read et write soient bien appelée (clic droit sur la fonction –> Call hierarchy).
Et je précise que tu tu compliques la vie dans des fonctions de nbt, tu pourrais directement utiliser le tag pasé en paramètre pour set l’id du slot et sont contenu au lieu de passé pas un tag que tu mets dans une liste que tu mets dans le tag d’origine. -
D’accord merci,
[font=Ubuntu, sans-serifJe préfère pas toucher car je connais pas les container et tout si je commence a touché ça va crash et tout donc je préfère laisser comme ça pour le moment du moment que ça marche ça me dérange pas x) .][font=Ubuntu, sans-serifEDIT:]
[font=Ubuntu, sans-serifAlors,]
[font=Ubuntu, sans-serifdans le read c’est vide il est pas appeler et dans le write il est juste appeler dans la class container quand on close dans la fonction “onContainerClosed” .]
-
Ton container, il est ouvert avec ton item ?
Donc il faut que tu récupères le held item du joueur, que tu vérifies si il a des tags nbt et si oui, t’appelle ta fonction read avec ces tags. -
Nan il est ouvert avec un keybinding ^^, Je dois faire comment quand c’est comme ça ?
Edit:
J’ai essayer ça:private void keyTestTyped() { EntityPlayer player = Minecraft.getMinecraft().thePlayer; World world = player.worldObj; if (stack.hasTagCompound()) stack.setTagCompound(new NBTTagCompound()); // ici la ligne qui cause prob. inv.readFromNBT(stack.getTagCompound()); player.openGui(AltisMineMod.INSTANCE, 0, world, (int) player.posX, (int) player.posY, (int) player.posZ); }J’ai un crash ^^
-
Non mais en fait ce qu’il faut dans ce cas où l’inventaire n’est pas dans un item, c’est faire un extended entity Properties (je n’en ai jamais fait mais y a un tuto je crois)
-
Waa le bordel ^^ ehh t’aurais le lien ou des mots clé pour que je trouve ? se serrai super

-
-
Ah ouais merci, j’avais déjà utilisé ça, par contre a la place je dois prendre mon inv c’est ça ? alors je dois prendre le joueur et dans le packet j’ouvre l’inv au joueur .
Sinon y’a pas un moyen plus simplement normalement on a pas besoin de ça j’crois ^^
-
Si tu n’as pas d’item ou de bloc pour le sauvegarder, t’es obligé de passer pas la
-
D’acc bon bah je vais essayer merci je te dis si j’ai besoin d’aide juste tu peux répondre a la question juste au desus ?
-
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);)