Posted May 5, 201411 yr So i was working on another mod and i typed the same code for the ISidedInventory methods and tested. the slot dupes the itemstack you put in there and when i try to take it out it disapears. I even tried copying the code from one of my mods and it still does the same thing. TileEntity: package info.coremodding.realsmelting.tileentities; import info.coremodding.realsmelting.blocks.LavaFurnace; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.tileentity.TileEntity; public class TileEntityLavaFurnace extends TileEntity implements ISidedInventory{ private static final int[] slots_top = new int[]{1}; private static final int[] slots_bottom = new int[]{1}; private static final int[] slots_sides = new int[]{0}; public static float Temp = 0; public static float maxTemp = 300; public static ItemStack[] slots = new ItemStack[2]; public static int smeltItem; public static int furnaceSpeed = 100; public static int cookTime = 0;; public boolean isBurning(){ return this.Temp > 0; } public int getsizeInventory(){ return this.slots.length; } private boolean canSmelt(){ if(this.slots[0] == null){ return false; }else{ ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); if(itemstack == null) return false; if(this.slots[1] == null) return true; if(!this.slots[1].isItemEqual(itemstack)) return false; int result = this.slots[1].stackSize + itemstack.stackSize; return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize()); } } public void smeltItem(){ if(this.canSmelt()){ ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); if(this.slots[1] == null){ this.slots[1] = itemstack.copy(); }else if(this.slots[1].isItemEqual(itemstack)){ this.slots[2].stackSize += itemstack.stackSize; } this.slots[0].stackSize--; if(this.slots[0].stackSize <= 0){ this.slots[0] = null; } } } public void updateEntity(){ if(worldObj.getBlock(xCoord, yCoord-1, zCoord).equals(Blocks.lava)){ if(this.Temp < this.maxTemp){ this.Temp += 0.01F; }else if(!worldObj.getBlock(xCoord, yCoord-1, zCoord).equals(Blocks.lava)){ if(this.Temp > 0){ this.Temp--; } } } System.out.println(this.cookTime); boolean flag = this.Temp > 0; boolean flag1 = false; if(!this.worldObj.isRemote){ if(this.Temp == 0 && this.canSmelt()){ if(this.Temp > 0){ flag1 = true; if(this.slots[0] != null){ this.slots[1].stackSize--; if(this.slots[1].stackSize == 0){ this.slots[1] = this.slots[1].getItem().getContainerItem(this.slots[1]); } } } } if(this.isBurning() && this.canSmelt()){ this.cookTime++; } if(this.cookTime == this.furnaceSpeed){ this.cookTime = 0; this.smeltItem(); flag1 = true; } }else{ this.cookTime = 0; if(flag != this.isBurning()){ flag1 = true; LavaFurnace.updateSaltFurnaceBlockState(this.Temp > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); } } if(flag1){ this.markDirty(); } } @Override public String getInventoryName() { return null; } @Override public boolean hasCustomInventoryName() { return false; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer var1) { return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64D; } @Override public void openInventory() { } @Override public void closeInventory() { } @Override public boolean isItemValidForSlot(int var1, ItemStack var2) { return var1 == 2 ? false : (true); } @Override public int[] getAccessibleSlotsFromSide(int var1) { return var1 == 0 ? slots_bottom : (var1 == 1 ? slots_top : slots_sides); } @Override public boolean canInsertItem(int var1, ItemStack var2, int var3) { return this.isItemValidForSlot(var1, var2); } @Override public boolean canExtractItem(int var1, ItemStack var2, int var3) { return var3 != 0 || var1 != 1 || var2.getItem() == Items.bucket; } public boolean isInvNameLocalized() { return false; } public String getInvName() { return "container.lava_furnace"; } @Override public int getSizeInventory() { return 0; } @Override public ItemStack getStackInSlot(int var1) { return this.slots[var1]; } @Override public ItemStack decrStackSize(int var1, int var2) { if(this.slots[var1] != null){ ItemStack itemstack; if(this.slots[var1].stackSize <= var2){ itemstack = this.slots[var1]; this.slots[var1] = null; return itemstack; }else{ itemstack = this.slots[var1].splitStack(var2); if(this.slots[var1].stackSize == 0){ this.slots[var1] = null; } return itemstack; } } return null; } @Override public ItemStack getStackInSlotOnClosing(int var1) { if(this.slots[var1] != null){ ItemStack itemstack = this.slots[var1]; this.slots[var1] = null; return itemstack; } return null; } @Override public void setInventorySlotContents(int var1, ItemStack var2) { this.slots[var1]= var2; if(var2 != null && var2.stackSize > this.getInventoryStackLimit()){ var2.stackSize = this.getInventoryStackLimit(); } } public int getCookProgressSacled(int i){ return this.cookTime * i / this.furnaceSpeed; } public static boolean isItemFuel(ItemStack itemstack1) { return false; } } Container: package info.coremodding.realsmelting.gui.containers; import info.coremodding.realsmelting.tileentities.TileEntityLavaFurnace; 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.inventory.SlotFurnace; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; public class ContainerLavaFurnace extends Container{ private TileEntityLavaFurnace lava; public ContainerLavaFurnace(InventoryPlayer inventory, TileEntityLavaFurnace entity) { this.lava = entity; this.addSlotToContainer(new Slot(entity, 0, 56, 36)); this.addSlotToContainer(new SlotFurnace(inventory.player, entity, 1, 116, 35)); for(int 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(int i = 0; i < 9; i++){ this.addSlotToContainer(new Slot(inventory, i, 8 + i*18, 142)); } } public ItemStack transferStackInSlot(EntityPlayer player, int slot0){ ItemStack itemstack = null; Slot slot = (Slot)this.inventorySlots.get(slot0); if(slot != null && slot.getHasStack()){ ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if(slot0 == 2){ if(!this.mergeItemStack(itemstack1, 3, 39, true)){ return null; } slot.onSlotChange(itemstack1, itemstack); }else if(slot0 != 1 && slot0 != 0){ if(FurnaceRecipes.smelting().getSmeltingResult(itemstack1) != null){ if(!this.mergeItemStack(itemstack1, 0, 1, false)){ return null; } }else if(TileEntityLavaFurnace.isItemFuel(itemstack1)){ if(!this.mergeItemStack(itemstack1, 1, 2, false)){ return null; } }else if(slot0 >= 3 && slot0 < 30){ if(!this.mergeItemStack(itemstack1, 30, 39, false)){ return null; } }else if(slot0 >= 30 && slot0 < 39){ if(!this.mergeItemStack(itemstack1, 0, 1, false)){ return null; } } }else if(!this.mergeItemStack(itemstack1, 3, 39, 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; } @Override public boolean canInteractWith(EntityPlayer var1) { return this.lava.isUseableByPlayer(var1); } } If you need any other code i will post it.
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.