@Override
 public void setInventorySlotContents(int slotId, ItemStack itemstack) {
   super.setInventorySlotContents(slotId, itemstack);
   if (TileAdvancedCraftingTable.this.getWorldObj() == null
       || !TileAdvancedCraftingTable.this.getWorldObj().isRemote)
     oreIDs[slotId] = itemstack == null ? -1 : OreDictionary.getOreID(itemstack);
 }
  @Override
  public ItemStack decrStackSize(int i, int j) {
    ItemStack result = inv.decrStackSize(i, j);

    if (i == 0) {
      if (getStackInSlot(0) == null) {
        progressIn = 0;
      }
    }

    if (i == 2) {
      if (getStackInSlot(2) == null) {
        progressOut = 0;
      }
    }

    return result;
  }
  @Override
  public void setInventorySlotContents(int i, ItemStack itemstack) {
    inv.setInventorySlotContents(i, itemstack);

    if (i == 0) {
      if (getStackInSlot(0) != null && getStackInSlot(0).getItem() instanceof ItemBlueprint) {
        progressIn = 1;
      } else {
        progressIn = 0;
      }
    }

    if (i == 2) {
      if (getStackInSlot(2) != null && getStackInSlot(2).getItem() instanceof ItemBlueprint) {
        progressOut = 1;
      } else {
        progressOut = 0;
      }
    }
  }
  @Override
  public void readFromNBT(NBTTagCompound nbttagcompound) {
    super.readFromNBT(nbttagcompound);

    inv.readFromNBT(nbttagcompound);
  }
 @Override
 public ItemStack getStackInSlotOnClosing(int slot) {
   return inv.getStackInSlotOnClosing(slot);
 }
 @Override
 public ItemStack getStackInSlot(int i) {
   return inv.getStackInSlot(i);
 }
  @Override
  public void writeToNBT(NBTTagCompound nbttagcompound) {
    super.writeToNBT(nbttagcompound);

    inv.writeToNBT(nbttagcompound);
  }