// Path: src/com/jaquadro/minecraft/chameleon/block/tiledata/CustomNameData.java
// public class CustomNameData extends TileDataShim implements IWorldNameable
// {
//     private String defaultName;
//     private String customName;
// 
//     public CustomNameData (String defaultName) {
//         this.defaultName = defaultName;
//     }
// 
//     @Override
//     public void readFromNBT (NBTTagCompound tag) {
//         customName = null;
//         if (tag.hasKey("CustomName", Constants.NBT.TAG_STRING))
//             customName = tag.getString("CustomName");
//     }
// 
//     @Override
//     public NBTTagCompound writeToNBT (NBTTagCompound tag) {
//         if (hasCustomName())
//             tag.setString("CustomName", customName);
// 
//         return tag;
//     }
// 
//     @Override
//     public String getName () {
//         return hasCustomName() ? customName : defaultName;
//     }
// 
//     @Override
//     public boolean hasCustomName () {
//         return customName != null && customName.length() > 0;
//     }
// 
//     @Override
//     public ITextComponent getDisplayName () {
//         return hasCustomName() ? new TextComponentString(customName) : new TextComponentTranslation(defaultName);
//     }
// 
//     public void setName (String name) {
//         customName = name;
//     }
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/block/tiledata/TileDataShim.java
// public abstract class TileDataShim implements INBTSerializable<NBTTagCompound>
// {
//     public abstract void readFromNBT (NBTTagCompound tag);
// 
//     public abstract NBTTagCompound writeToNBT (NBTTagCompound tag);
// 
//     @Override
//     public NBTTagCompound serializeNBT () {
//         NBTTagCompound tag = new NBTTagCompound();
//         return writeToNBT(tag);
//     }
// 
//     @Override
//     public void deserializeNBT (NBTTagCompound nbt) {
//         readFromNBT(nbt);
//     }
// }


import com.jaquadro.minecraft.chameleon.block.tiledata.CustomNameData;
import com.jaquadro.minecraft.chameleon.block.tiledata.TileDataShim;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryBasic;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.world.IWorldNameable;
import javax.annotation.Nullable;
    public void setInventorySlotContents (int index, @Nullable ItemStack stack) {
        emptyInventory.setInventorySlotContents(index, stack);
    }

    @Override
    public int getInventoryStackLimit () {
        return emptyInventory.getInventoryStackLimit();
    }

    @Override
    public boolean isUsableByPlayer (EntityPlayer player) {
        return emptyInventory.isUsableByPlayer(player);
    }

    @Override
    public void openInventory (EntityPlayer player) {
        emptyInventory.openInventory(player);
    }

    @Override
    public void closeInventory (EntityPlayer player) {
        emptyInventory.closeInventory(player);
    }

    @Override
    public boolean isItemValidForSlot (int index, ItemStack stack) {
        return emptyInventory.isItemValidForSlot(index, stack);
    }

    @Override
// Path: src/com/jaquadro/minecraft/chameleon/block/tiledata/CustomNameData.java
// public class CustomNameData extends TileDataShim implements IWorldNameable
// {
//     private String defaultName;
//     private String customName;
// 
//     public CustomNameData (String defaultName) {
//         this.defaultName = defaultName;
//     }
// 
//     @Override
//     public void readFromNBT (NBTTagCompound tag) {
//         customName = null;
//         if (tag.hasKey("CustomName", Constants.NBT.TAG_STRING))
//             customName = tag.getString("CustomName");
//     }
// 
//     @Override
//     public NBTTagCompound writeToNBT (NBTTagCompound tag) {
//         if (hasCustomName())
//             tag.setString("CustomName", customName);
// 
//         return tag;
//     }
// 
//     @Override
//     public String getName () {
//         return hasCustomName() ? customName : defaultName;
//     }
// 
//     @Override
//     public boolean hasCustomName () {
//         return customName != null && customName.length() > 0;
//     }
// 
//     @Override
//     public ITextComponent getDisplayName () {
//         return hasCustomName() ? new TextComponentString(customName) : new TextComponentTranslation(defaultName);
//     }
// 
//     public void setName (String name) {
//         customName = name;
//     }
// }
// 
// Path: src/com/jaquadro/minecraft/chameleon/block/tiledata/TileDataShim.java
// public abstract class TileDataShim implements INBTSerializable<NBTTagCompound>
// {
//     public abstract void readFromNBT (NBTTagCompound tag);
// 
//     public abstract NBTTagCompound writeToNBT (NBTTagCompound tag);
// 
//     @Override
//     public NBTTagCompound serializeNBT () {
//         NBTTagCompound tag = new NBTTagCompound();
//         return writeToNBT(tag);
//     }
// 
//     @Override
//     public void deserializeNBT (NBTTagCompound nbt) {
//         readFromNBT(nbt);
//     }
// }


// Path: src/com/jaquadro/minecraft/chameleon/block/ChamInvTileEntity.java
import com.jaquadro.minecraft.chameleon.block.tiledata.CustomNameData;
import com.jaquadro.minecraft.chameleon.block.tiledata.TileDataShim;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryBasic;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.world.IWorldNameable;
import javax.annotation.Nullable;

    public void setInventorySlotContents (int index, @Nullable ItemStack stack) {
        emptyInventory.setInventorySlotContents(index, stack);
    }

    @Override
    public int getInventoryStackLimit () {
        return emptyInventory.getInventoryStackLimit();
    }

    @Override
    public boolean isUsableByPlayer (EntityPlayer player) {
        return emptyInventory.isUsableByPlayer(player);
    }

    @Override
    public void openInventory (EntityPlayer player) {
        emptyInventory.openInventory(player);
    }

    @Override
    public void closeInventory (EntityPlayer player) {
        emptyInventory.closeInventory(player);
    }

    @Override
    public boolean isItemValidForSlot (int index, ItemStack stack) {
        return emptyInventory.isItemValidForSlot(index, stack);
    }

    @Override
    public int getField (int id) {