Posted April 21, 201411 yr So I made a custom container, and a tile entity, basically everything (Also a cutom recipe manager, by myself). Didn't use almost any tutorial, just the MC source. Everything is working well, but the transferStackInSlot method isn't(always hated that dumb thing). So when i shift click, if the stack is not full it dupes it. I hope you can help me. PS the machine has 4 slots. ContainerToolSharpener.java package com.core.container; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import com.core.slot.SlotToolSharpener; import com.core.tileentitiy.TileEntityToolSharpener; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ContainerToolSharpener extends Container { private TileEntityToolSharpener tileEntity; private int lastCookTime; private int lastBurnTime; private int lastItemBurnTime; public ContainerToolSharpener(InventoryPlayer par1InventoryPlayer, TileEntityToolSharpener par2TileEntityMachine) { this.tileEntity = par2TileEntityMachine; this.addSlotToContainer(new Slot(par2TileEntityMachine, 0, 40, 17));//tool slot this.addSlotToContainer(new Slot(par2TileEntityMachine, 1, 72, 17));//modifier slot this.addSlotToContainer(new Slot(par2TileEntityMachine, 2, 56, 53));//fuel slot this.addSlotToContainer(new SlotToolSharpener( par1InventoryPlayer.player, par2TileEntityMachine, 3, 116, 35));//output slot int i; for (i = 0; i < 3; ++i) { for (int j = 0; j < 9; ++j) { this.addSlotToContainer(new Slot(par1InventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for (i = 0; i < 9; ++i) { this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + i * 18, 142)); } } public void addCraftingToCrafters(ICrafting par1ICrafting) { super.addCraftingToCrafters(par1ICrafting); par1ICrafting.sendProgressBarUpdate(this, 0, this.tileEntity.furnaceCookTime); par1ICrafting.sendProgressBarUpdate(this, 1, this.tileEntity.burnTime); par1ICrafting.sendProgressBarUpdate(this, 2, this.tileEntity.currentItemBurnTime); } /** * Looks for changes made in the container, sends them to every listener. */ public void detectAndSendChanges() { super.detectAndSendChanges(); for (int i = 0; i < this.crafters.size(); ++i) { ICrafting icrafting = (ICrafting) this.crafters.get(i); if (this.lastCookTime != this.tileEntity.furnaceCookTime) { icrafting.sendProgressBarUpdate(this, 0, this.tileEntity.furnaceCookTime); } if (this.lastBurnTime != this.tileEntity.burnTime) { icrafting.sendProgressBarUpdate(this, 1, this.tileEntity.burnTime); } if (this.lastItemBurnTime != this.tileEntity.currentItemBurnTime) { icrafting.sendProgressBarUpdate(this, 2, this.tileEntity.currentItemBurnTime); } } this.lastCookTime = this.tileEntity.furnaceCookTime; this.lastBurnTime = this.tileEntity.burnTime; this.lastItemBurnTime = this.tileEntity.currentItemBurnTime; } @SideOnly(Side.CLIENT) public void updateProgressBar(int par1, int par2) { if (par1 == 0) { this.tileEntity.furnaceCookTime = par2; } if (par1 == 1) { this.tileEntity.burnTime = par2; } if (par1 == 2) { this.tileEntity.currentItemBurnTime = par2; } } public boolean canInteractWith(EntityPlayer par1EntityPlayer) { return this.tileEntity.isUseableByPlayer(par1EntityPlayer); } /** * Called when a player shift-clicks on a slot. You must override this or * you will crash when someone does that. */ public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(par2); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); System.out.println(par2); if (par2 == 3) { if (!this.mergeItemStack(itemstack1, 4, 40, true)) { return null; } slot.onSlotChange(itemstack1, itemstack); } else if (!this.mergeItemStack(itemstack1, 4, 40, false)) { return null; } if (itemstack1.stackSize == 0) { slot.putStack((ItemStack) null); } else { System.out.println("A"); slot.onSlotChanged(); } if (itemstack1.stackSize == itemstack.stackSize) { return null; } slot.onPickupFromSlot(par1EntityPlayer, itemstack1); } return itemstack; } } If you need any other source just say it, but this is the relevant part. Thanks in forward
April 21, 201411 yr Author Nevermind. NAILED IT public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) { ItemStack itemstack = null; Slot slot = (Slot) this.inventorySlots.get(par2); Slot fuelSlot = (Slot) this.inventorySlots.get(2); Slot toolSlot = (Slot) this.inventorySlots.get(0); Slot modSlot = (Slot) this.inventorySlots.get(1); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); System.out.println(par2); if (par2 == 3 || par2 == 2) { if (!this.mergeItemStack(itemstack1, 4, 40, true)) { return null; } slot.onSlotChange(itemstack1, itemstack); } else if (par2 != 1 && par2 != 0) { if (TileEntityToolSharpener.isItemFuel(itemstack1) && (fuelSlot.getStack() == null || fuelSlot.getStack().stackSize < 64)) { if (!this.mergeItemStack(itemstack1, 2, 3, false)) { return null; } } else if ((itemstack1.getItem() instanceof ItemTool || itemstack1 .getItem() instanceof ItemSword) && !toolSlot.getHasStack()) { if (!this.mergeItemStack(itemstack1, 0, 1, false)) { return null; } } else if (ToolSharpenerRecipes.smelting() .isItemMod(itemstack1) && (!modSlot.getHasStack() || modSlot.getStack().stackSize < 64)) { if (!this.mergeItemStack(itemstack1, 1, 2, false)) { return null; } } else if (par2 >= 4 && par2 < 31) { if (!this.mergeItemStack(itemstack1, 31, 40, false)) { return null; } } else if (par2 >= 31 && par2 < 40 && !this.mergeItemStack(itemstack1, 4, 31, false)) { return null; } } else if (!this.mergeItemStack(itemstack1, 4, 40, false)) { return null; } if (itemstack1.stackSize == 0) { slot.putStack((ItemStack) null); } else { slot.onSlotChanged(); } if (itemstack1.stackSize == itemstack.stackSize) { return null; } slot.onPickupFromSlot(par1EntityPlayer, itemstack1); } return itemstack; }
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.