Inventaire personnalisé
-
J’ai plusieurs problèmes avec mon inventaire personnalisé:
1. Quand on clique sur un items pour le déplacer, il est directement remis à sa place donc impossible de déplacer les items et si on fais clique molette et qu’on met un objet dans un autre slot et puis qu’on clique dessus, il disparait
2. Quand j’arrive à mettre un item dans un de mes slots perso, quand je ferme l’inventaire il est droppéJe crois qu’il faut utiliser les nbttag et/ou les paquets mais je ne sais pas comment m’y prendre.
GUI handler:
public class GuiHandlerMod implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == 1) { return new ContainerInventory(player); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == 1) { return new GuiInventory(player); } return null; } }
Container Inventory:
public class ContainerInventory extends Container implements IInventory { public ItemStack[] content = new ItemStack[6]; private final EntityPlayer player; public ContainerInventory(EntityPlayer p) { player = p; this.addSlotToContainer(new Slot(this, 0, 180, 93)); this.addSlotToContainer(new Slot(this, 1, 198, 93)); this.addSlotToContainer(new Slot(this, 2, 180, 124)); this.addSlotToContainer(new Slot(this, 3, 198, 124)); this.addSlotToContainer(new Slot(this, 4, 180, 142)); this.addSlotToContainer(new Slot(this, 5, 198, 142)); this.bindPlayerInventory(player.inventory); } private void bindPlayerInventory(InventoryPlayer inventory) { int i; for(i = 0; i < 3; ++i) { for(int j = 0; j < 9; ++j) { this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for(i = 0; i < 9; ++i) { this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 142)); } } @Override public boolean canInteractWith(EntityPlayer player) { return true; } @Override public int getSizeInventory() { return 42; } @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 "container.inventory"; } @Override public boolean hasCustomInventoryName() { return false; } @Override public int getInventoryStackLimit() { return 64; } @Override public void markDirty() {} @Override public boolean isUseableByPlayer(EntityPlayer p_70300_1_) { return true; } @Override public void openInventory() {} @Override public void closeInventory() {} @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return true; } public ItemStack transferStackInSlot(EntityPlayer player, int id) { ItemStack itemstack = null; Slot slot = (Slot)this.inventorySlots.get(id); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if (id == 0) { if (!this.mergeItemStack(itemstack1, 9, 45, true)) { return null; } slot.onSlotChange(itemstack1, itemstack); } else if (id >= 1 && id < 5) { if (!this.mergeItemStack(itemstack1, 9, 45, false)) { return null; } } else if (id >= 5 && id < 9) { if (!this.mergeItemStack(itemstack1, 9, 45, false)) { return null; } } else if (itemstack.getItem() instanceof ItemArmor && !((Slot)this.inventorySlots.get(5 + ((ItemArmor)itemstack.getItem()).armorType)).getHasStack()) { int j = 5 + ((ItemArmor)itemstack.getItem()).armorType; if (!this.mergeItemStack(itemstack1, j, j + 1, false)) { return null; } } else if (id >= 9 && id < 36) { if (!this.mergeItemStack(itemstack1, 36, 45, false)) { return null; } } else if (id >= 36 && id < 45) { if (!this.mergeItemStack(itemstack1, 9, 36, false)) { return null; } } else if (!this.mergeItemStack(itemstack1, 9, 45, false)) { return null; } if (itemstack1.stackSize == 0) { slot.putStack((ItemStack)null); } else { slot.onSlotChanged(); } if (itemstack1.stackSize == itemstack.stackSize) { return null; } slot.onPickupFromSlot(player, itemstack1); } return itemstack; } }
GuiInventory:
public class GuiInventory extends GuiContainer { private static final ResourceLocation textures = new ResourceLocation(Reference.MOD_ID, "textures/gui/container/brawlcraft_inventory.png"); private IInventory playerInv; public GuiInventory(EntityPlayer player) { super(new ContainerInventory(player)); this.playerInv = player.inventory; this.allowUserInput = false; this.xSize = 228; this.ySize = 166; } @Override protected void drawGuiContainerBackgroundLayer(float partialRenderTick, int x, int y) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(textures); int k = (this.width - this.xSize) / 2; int l = (this.height - this.ySize) / 2; this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); } protected void drawGuiContainerForegroundLayer(int x, int y) { String tileName = "container.inventory"; this.fontRendererObj.drawString(tileName, (this.xSize - this.fontRendererObj.getStringWidth(tileName)) / 2, 6, 0x00ff00); String tileName2 = "weapons"; this.fontRendererObj.drawString(tileName, (this.xSize - this.fontRendererObj.getStringWidth(tileName)) / 2, 6, 0x00ff00); String tileName3 = "gadgets"; this.fontRendererObj.drawString(tileName, (this.xSize - this.fontRendererObj.getStringWidth(tileName)) / 2, 6, 0x00ff00); } }
Merci d’avance
-
Le problème vient de ta fonction transferStackInslot, ce que tu fais de tes items n’est pas très claire
-
Oui je l’ai rajouter mais ça faisait la même chose avant
Envoyé de mon SM-G360F en utilisant Tapatalk
-
Essaie de détailler ce que tu veux faire pour chaque slot pour ensuite le traduire en code
-
Bien c’est l’inventaire de base mais avec 6 slots en plus, 2 réservés à des trucs extends weapons et 4 extends gadgets
Minantcraft