Problème IGUIHandler
-
Déplacer la texture du slot ?!? Si tu parles tu carré qui apparaît quand tu le survolé, c’est automatique, et sinon ben j’ai zappé quelque chose

-
Ouais je parle du carré qui apparaît quand tu le survole moi quand je vais dessus c’est blanc et non transparent ^^
EDIT: j’ai pas mal de problème ^^ en gros quand je met un item dans le slot de mon inventaire pour test et que je ferme l’inventaire et que je le ré ouvre il disparaît j’ai regarder dans la classe container j’ai pas trouver le soucis … et aussi j’ai un problème en gros je voudrais ouvrir mon inventaire avec une touche normal sauf que dans le commonproxy j’ai la ligne: return new GuiArma(player.inventory, new InventaireArma(player.getHeldItem(), 54)); le player.getHeldItem me fait crash quand j’ai pas d’item dans la main je peux le remplacer par quoi? et quand je déplace un item c’est pareil je crash aussi ça vient de la fonction slotclick J’crois.
Class:
-Container:
package armacraft.net.GUI; import armacraft.net.AltisMineMod; import armacraft.net.Items.Water; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; public class ContainerArma extends Container { public InventaireArma inv; public int rows; public ContainerArma(InventoryPlayer playerInv, InventaireArma inv) { this.inv = inv; this.rows = inv.getSizeInventory() / 8; int i = (this.rows - 4) * 17; int j; int k; // Adding slots to the backpack for (j = 0; j < this.rows; ++j) { for (k = 0; k < 9; ++k) { this.addSlotToContainer(new SlotInvArmaArmor(inv, k + j * 9, 69, 38)); } } for (j = 0; j < 9; ++j) { this.addSlotToContainer(new Slot(playerInv, j, 8 + j * 18, 161 + i)); } } @Override public boolean canInteractWith(EntityPlayer player) { if(player.getHeldItem() != null) { this.writeToNBT(player.getHeldItem()); } return player.getHeldItem() != null && player.getHeldItem().getItem() == AltisMineMod.Water; } public void writeToNBT(ItemStack stack) { if (!stack.hasTagCompound()) stack.setTagCompound(new NBTTagCompound()); inv.writeToNBT(stack.getTagCompound()); } @Override public ItemStack transferStackInSlot(EntityPlayer player, int index) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(index); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if (itemstack.getItem() instanceof Water) return null; if (index < this.inv.getSizeInventory()) { if (!this.mergeItemStack(itemstack1, this.inv.getSizeInventory(), this.inventorySlots.size(), true)) return null; } else if (!this.mergeItemStack(itemstack1, 0, this.inv.getSizeInventory(), false)) { return null; } if (itemstack1.stackSize == 0) slot.putStack((ItemStack) null); else slot.onSlotChanged(); } return itemstack; } /** * @param buttonPressed * left click, right click, wheel click, etc. * @param flag * category (e.g.: hotbar keys) */ @Override public ItemStack slotClick(int slotIndex, int buttonPressed, int flag, EntityPlayer player) { // Prevents from removing current backpack if (flag == 2 && buttonPressed == player.inventory.currentItem) return null; if (slotIndex - this.inv.getSizeInventory() - 27 == player.inventory.currentItem) return null; return super.slotClick(slotIndex, buttonPressed, flag, player); } /** * Used to save content */ @Override public void onContainerClosed(EntityPlayer player) { if(player.getHeldItem() != null) { this.writeToNBT(player.getHeldItem()); } super.onContainerClosed(player); } } -
Help?
-
Pour que ça sauvegarde l’item, il faut faire avec les tags nbt.
Et pour le held Item, il faut que tu retires tout ce qui touche ce stack dans ton inv si il est null -
Je suis perplexe par rapport au fait que tu aies une fonction writeToNBT et pas une fonction readFromNBT, si tu veux écrire dans ton autre classe ajoute directement à ta fonction la-bas, crées y une NBTTagList contenant tes slots. Et puis bon, nommer ses variables en français… Je vais pas faire de commentaire là-dessus mais c’est pas terrible.
-
Se que j’ai du mal a comprendre c’est pourquoi quand j’ouvre mon inventaire avec l’item dans les mains et que je déplace un item je crash pas et quand j’ouvre mon inventaire avec une touche toujours avec un item dans les mains et que je veux déplacer un item dans l’inventaire j’ai un java.lang.IndexOutOfBoundsException: Index: 55, Size: 45 .
/!\ Attention lorsque vous manipulez des tableaux. Chercher un élement d’un tableau à un indice inexistant causera un OutOfBoundException.
pourquoi j’ai cette erreur quand j’ouvre l’inventaire avec une touche? -
Parce que lid du slot est trop élevé, là actuellement tu peux avoir 45 items (donc autant dids) et tu essayes tu mettre un slot avec 45 comme id
-
Merci maintenant il me manque juste a viré le held item et c’est bon par contre j’ai pas trop suivi je dois procédé comment ?
-
Tu retire tout les trucs de nbt qui sont en rapport avec ce stack dans ton InventaireArma (d’après ce que j’avais vu, ça ne servait à rien)
-
Yep c’est nickel merci par contre quand je clique sur échap je crash mais le soucis c’est que si j’enlève le nbt sa save pas mon item dans le slot lorsque je quitte le container.
-
Montre le rapport et le code qui va avec
-
@Override public void onContainerClosed(EntityPlayer player) { if(player.getHeldItem() == null) { this.writeToNBT(player.getHeldItem()); } super.onContainerClosed(player); } -
Heu….
T’a bien relu ton code ?
“if(player.getHeldItem() == null) {”
T’es en train d’écrire dans la nbt uniquement si l’item que tu tiens null, faut que tu mettes != null -
Je crash pas mais ça save pas mon item quand je quitte le container, après ça vient peut-etre pas d’ici
-
Oui ça vient d’ici parce que si tu tiens un item, ta condition retournera toujours faux
-
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 = ?