@Override public void onUpdate() { super.onUpdate(); if (getRunning()) run(); else postRun(); if (Config.useFuel && !worldObj.isRemote) { if (inventory.getStackInSlot(0) != null && TileEntityFurnace.isItemFuel(inventory.getStackInSlot(0)) && (fuel.get() + TileEntityFurnace.getItemBurnTime(inventory.getStackInSlot(0))) <= Config.maxFuelLevel) if (inventory.getStackInSlot(0).getItem().equals(Items.lava_bucket)) { fuel.modify(TileEntityFurnace.getItemBurnTime(inventory.decrStackSize(0, 1))); inventory.setInventorySlotContents(0, new ItemStack(Items.bucket)); } else { fuel.modify(TileEntityFurnace.getItemBurnTime(inventory.decrStackSize(0, 1))); } if (fuel.isDirty()) sync(); } lastTickPosX = posX; lastTickPosY = posY; lastTickPosZ = posZ; posX += motionX; posY += motionY; posZ += motionZ; setPosition(posX, posY, posZ); if (getTimeSinceHit() > 0) setTimeSinceHit(getTimeSinceHit() - 1); if (getDamageTaken() > 0) setDamageTaken(getDamageTaken() - 1); }
@Override public boolean isItemValidForSlot(int slot, ItemStack stack) { if (stack == null) { return false; } if (slot == 0) { return TileEntityFurnace.isItemFuel(stack) || stack.getItem() == ObjHandler.kleinStars; } else if (slot >= 1 && slot <= 13) { return FurnaceRecipes.smelting().getSmeltingResult(stack) != null; } return false; }
/** Called to transfer a stack from one inventory to the other eg. when shift clicking. */ @Override public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par1) { ItemStack var2 = null; final Slot var3 = (Slot) inventorySlots.get(par1); if (var3 != null && var3.getHasStack()) { final ItemStack var4 = var3.getStack(); var2 = var4.copy(); if (par1 == 1) { if (!mergeItemStack(var4, 2, 38, true)) { return null; } var3.onSlotChange(var4, var2); } else if (par1 != 1 && par1 != 0) { if (FurnaceRecipes.smelting().getSmeltingResult(var4) != null) { if (!mergeItemStack(var4, 0, 1, false)) { return null; } } else if (TileEntityFurnace.isItemFuel(var4)) { if (!mergeItemStack(var4, 0, 1, false)) { return null; } } else if (par1 >= 2 && par1 < 29) { if (!mergeItemStack(var4, 29, 38, false)) { return null; } } else if (par1 >= 29 && par1 < 38 && !mergeItemStack(var4, 2, 29, false)) { return null; } } else if (!mergeItemStack(var4, 2, 38, false)) { return null; } if (var4.stackSize == 0) { var3.putStack((ItemStack) null); } else { var3.onSlotChanged(); } if (var4.stackSize == var2.stackSize) { return null; } var3.onPickupFromSlot(par1EntityPlayer, var4); } return var2; }
@Override public ItemStack transferStackInSlot(EntityPlayer player, int slotID) { ItemStack stack = null; Slot currentSlot = (Slot) inventorySlots.get(slotID); if (currentSlot != null && currentSlot.getHasStack()) { ItemStack slotStack = currentSlot.getStack(); stack = slotStack.copy(); if (slotID == 2) { if (!mergeItemStack(slotStack, 3, 39, true)) { return null; } } else if (slotID != 1 && slotID != 0) { if (FurnaceRecipes.smelting().getSmeltingResult(slotStack) != null) { if (!mergeItemStack(slotStack, 0, 1, false)) { return null; } } else if (TileEntityFurnace.isItemFuel(slotStack)) { if (!mergeItemStack(slotStack, 1, 2, false)) { return null; } } else if (slotID >= 3 && slotID < 30) { if (!mergeItemStack(slotStack, 30, 39, false)) { return null; } } else if (slotID >= 30 && slotID < 39 && !mergeItemStack(slotStack, 3, 30, false)) { return null; } } else if (!mergeItemStack(slotStack, 3, 39, false)) { return null; } if (slotStack.stackSize == 0) { currentSlot.putStack((ItemStack) null); } else { currentSlot.onSlotChanged(); } if (slotStack.stackSize == stack.stackSize) { return null; } currentSlot.onPickupFromSlot(player, slotStack); } return stack; }
private boolean getFuelFromInventory() { for (int i = 0; i < owner.getInventory().getSizeInventory(); i++) { ItemStack stack = owner.getInventory().getStackInSlot(i); if (stack != null) { try { final boolean isFuel = TileEntityFurnace.isItemFuel(stack); int fuelValue = TileEntityFurnace.getItemBurnTime(stack) == 0 ? GameRegistry.getFuelValue(stack) : TileEntityFurnace.getItemBurnTime(stack); fuelValue = fuelValue / Time.SECOND / 10; if (fuelValue == 0 && isFuel) { fuelValue = 1; } if (fuelValue > 0) { hasFuel = true; fuelUsesRemaining = fuelValue; owner .getInventory() .decrStackSize(owner.getInventory().getFirstSlotContainingItem(stack.getItem()), 1); } } catch ( ClassCastException e) // Known problem with earlier versions of MCA, not sure why this happened. { continue; } } } return hasFuel; }
public static boolean canItemBurn(ItemStack stack) { if (TileEntityFurnace.isItemFuel(stack)) return true; return contains(burnItem, stack); }
private void pullFromInventories() { TileEntity tile = this.worldObj.getTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); if (tile instanceof ISidedInventory) { final int side = 0; ISidedInventory inv = (ISidedInventory) tile; int[] slots = inv.getAccessibleSlotsFromSide(side); if (slots.length > 0) { for (int i : slots) { ItemStack stack = inv.getStackInSlot(i); if (stack == null) { continue; } if (inv.canExtractItem(i, stack, side)) { if (TileEntityFurnace.isItemFuel(stack) || stack.getItem() == ObjHandler.kleinStars) { if (inventory[0] == null) { inventory[0] = stack; inv.setInventorySlotContents(i, null); } else if (Utils.areItemStacksEqual(stack, inventory[0])) { int remain = inventory[0].getMaxStackSize() - inventory[0].stackSize; if (stack.stackSize <= remain) { inventory[0].stackSize += stack.stackSize; inv.setInventorySlotContents(i, null); } else { inventory[0].stackSize += remain; stack.stackSize -= remain; } } continue; } for (int j = inputStorage[0]; j < inputStorage[1]; j++) { ItemStack otherStack = inventory[j]; if (otherStack == null) { inventory[j] = stack; inv.setInventorySlotContents(i, null); break; } else if (Utils.areItemStacksEqual(stack, otherStack)) { int remain = otherStack.getMaxStackSize() - otherStack.stackSize; if (stack.stackSize <= remain) { inventory[j].stackSize += stack.stackSize; inv.setInventorySlotContents(i, null); break; } else { inventory[j].stackSize += remain; stack.stackSize -= remain; } } } } } } } else if (tile instanceof IInventory) { IInventory inv = (IInventory) tile; for (int i = 0; i < inv.getSizeInventory(); i++) { ItemStack stack = inv.getStackInSlot(i); if (stack == null) { continue; } if (TileEntityFurnace.isItemFuel(stack) || stack.getItem() == ObjHandler.kleinStars) { ItemStack fuel = inventory[0]; if (fuel == null) { inventory[0] = stack; inv.setInventorySlotContents(i, null); } else { int remain = fuel.getMaxStackSize() - fuel.stackSize; if (stack.stackSize <= remain) { inventory[0].stackSize += stack.stackSize; inv.setInventorySlotContents(i, null); } else { inventory[0].stackSize += remain; stack.stackSize -= remain; } } continue; } else if (FurnaceRecipes.smelting().getSmeltingResult(stack) == null) { continue; } for (int j = inputStorage[0]; j < inputStorage[1]; j++) { ItemStack otherStack = inventory[j]; if (otherStack == null) { inventory[j] = stack; inv.setInventorySlotContents(i, null); break; } else if (Utils.areItemStacksEqual(stack, otherStack)) { int remain = otherStack.getMaxStackSize() - otherStack.stackSize; if (stack.stackSize <= remain) { inventory[j].stackSize += stack.stackSize; inv.setInventorySlotContents(i, null); break; } else { inventory[j].stackSize += remain; stack.stackSize -= remain; } } } } } }
/** * Called when a player shift-clicks on a slot. You must override this or you will crash when * someone does that. */ @Override 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(); if (par2 == 1) { if (!this.mergeItemStack(itemstack1, 29, 65, true)) { return null; } slot.onSlotChange(itemstack1, itemstack); } else if (par2 >= 11 && par2 <= 64) { if (TileEntityFurnace.isItemFuel(itemstack1)) { if (!this.mergeItemStack(itemstack1, 0, 1, false)) { return null; } // else if (!this.mergeItemStack(itemstack1, 11, 20, false)) { // return null; // } // if (par2 <= 19) { // if (!this.mergeItemStack(itemstack1, 0, 1, false)) // { // return null; // } // } // else if (!this.mergeItemStack(itemstack1, 11, 65, false)) { // return null; // } // else if (!this.mergeItemStack(itemstack1, 11, 20, false)) // { // if (!this.mergeItemStack(itemstack1, 20, 65, false)) // { // return null; // } // } } else if (par2 >= 11 && par2 <= 28) { if (!this.mergeItemStack(itemstack1, 29, 65, false)) { return null; } } else if (par2 >= 29 && par2 <= 55) { if (!this.mergeItemStack(itemstack1, 11, 20, false)) { if (!this.mergeItemStack(itemstack1, 56, 65, false)) { return null; } } } else if (par2 >= 56 && par2 <= 64) { if (!this.mergeItemStack(itemstack1, 11, 20, false)) { if (!this.mergeItemStack(itemstack1, 29, 56, false)) { return null; } } } } else if (!this.mergeItemStack(itemstack1, 29, 65, 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; }
@Override public boolean isItemValidForSlot(int slot, ItemStack itemstack) { return slot > 8 && !TileEntityFurnace.isItemFuel(itemstack) ? false : (slot == 8 ? TileEntityFurnace.isItemFuel(itemstack) : true); }