@Override public void setInventorySlotContents(int i, ItemStack itemstack) { // TODO: add gregcipies if (i == 0) glassPanel = itemstack; else { ForgeDirection front = RotatableBlock.getFront(this.getBlockMetadata()); for (ForgeDirection f : VALID_INVENTORY_DIRECTIONS) { if (f == front) continue; TileEntity e = this.worldObj.getTileEntity( this.xCoord + f.offsetX, this.yCoord + f.offsetY, this.zCoord + f.offsetZ); // TODO: may cause inf loop if (e != null && e instanceof IInventory) if (i < ((IInventory) e).getSizeInventory()) { ((IInventory) e).setInventorySlotContents(i, itemstack); break; } else i -= ((IInventory) e).getSizeInventory(); } this.checkCanRun(); } }
@Override public boolean canConnectEnergy(ForgeDirection from) { return from != ForgeDirection.DOWN && from != RotatableBlock.getFront( this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord)); }
@Override public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) { if (from == ForgeDirection.DOWN || from == RotatableBlock.getFront( this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord))) return 0; return storage.receiveEnergy(maxReceive, simulate); }
/** * Gets the first inventory with an empty slot * * @return first available inventory or null */ private IInventory getAvalibleInv() { ForgeDirection front = RotatableBlock.getFront(this.getBlockMetadata()); for (ForgeDirection f : VALID_INVENTORY_DIRECTIONS) { if (f == front) continue; TileEntity e = this.worldObj.getTileEntity( this.xCoord + f.offsetX, this.yCoord + f.offsetY, this.zCoord + f.offsetZ); if (e != null && e instanceof IInventory && ZUtils.numEmptySlots((IInventory) e) > 0) return (IInventory) e; } return null; }
// InventoryHandling start @Override public int getSizeInventory() { int sizeInv = 0; ForgeDirection front = RotatableBlock.getFront(this.getBlockMetadata()); for (ForgeDirection f : VALID_INVENTORY_DIRECTIONS) { if (f == front) continue; TileEntity e = this.worldObj.getTileEntity( this.xCoord + f.offsetX, this.yCoord + f.offsetY, this.zCoord + f.offsetZ); // TODO: may cause inf loop if (e != null && e instanceof IInventory) sizeInv += ((IInventory) e).getSizeInventory(); } return sizeInv; }
@Override public ItemStack getStackInSlot(int i) { if (i == 0) return glassPanel; else { ForgeDirection front = RotatableBlock.getFront(this.getBlockMetadata()); for (ForgeDirection f : VALID_INVENTORY_DIRECTIONS) { if (f == front) continue; TileEntity e = this.worldObj.getTileEntity( this.xCoord + f.offsetX, this.yCoord + f.offsetY, this.zCoord + f.offsetZ); // TODO: may cause inf loop if (e != null && e instanceof IInventory) if (i < ((IInventory) e).getSizeInventory()) return ((IInventory) e).getStackInSlot(i); else i -= ((IInventory) e).getSizeInventory(); } return null; } }
@Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { if (i == 0) return CompatibilityMgr.gregtechLoaded ? OreDictionary.getOreName(OreDictionary.getOreID(itemstack)).equals("lenseRuby") : Item.getItemFromBlock(Blocks.glass_pane) == itemstack.getItem() ? true : false; ForgeDirection front = RotatableBlock.getFront(this.getBlockMetadata()); for (ForgeDirection f : VALID_INVENTORY_DIRECTIONS) { if (f == front) continue; TileEntity e = this.worldObj.getTileEntity( this.xCoord + f.offsetX, this.yCoord + f.offsetY, this.zCoord + f.offsetZ); // TODO: may cause inf loop if (e != null && e instanceof IInventory) if (i < ((IInventory) e).getSizeInventory()) return ((IInventory) e).isItemValidForSlot(i, itemstack); else i -= ((IInventory) e).getSizeInventory(); } return false; }