@Override
  public void markDirty() {
    EntityPlayer player = parent.get();
    TPlayerStats stats = TPlayerStats.get(player);
    // recalculateSkills(player, stats);
    recalculateHealth(player, stats);

    /*
     * if (inventory[2] == null && stats.knapsack != null) {
     * stats.knapsack.unequipItems(); }
     */
  }
  @Override
  public void setInventorySlotContents(int slot, ItemStack itemstack) {
    inventory[slot] = itemstack;
    // TConstruct.logger.info("Changed slot " + slot + " on side " +
    // FMLCommonHandler.instance().getEffectiveSide());
    if (itemstack != null && itemstack.stackSize > getInventoryStackLimit()) {
      itemstack.stackSize = getInventoryStackLimit();
    }

    EntityPlayer player = parent.get();
    TPlayerStats stats = TPlayerStats.get(player);
    recalculateHealth(player, stats);
  }
 @Override
 public ItemStack decrStackSize(int slot, int quantity) {
   if (inventory[slot] != null) {
     // TConstruct.logger.info("Took something from slot " + slot);
     if (inventory[slot].stackSize <= quantity) {
       ItemStack stack = inventory[slot];
       inventory[slot] = null;
       return stack;
     }
     ItemStack split = inventory[slot].splitStack(quantity);
     if (inventory[slot].stackSize == 0) {
       inventory[slot] = null;
     }
     EntityPlayer player = parent.get();
     TPlayerStats stats = TPlayerStats.get(player);
     recalculateHealth(player, stats);
     return split;
   } else {
     return null;
   }
 }