Сохраняется один слот из пяти

Сделал по гайду
Вот класс тайлэнтити:
TileEntity:
package ru.mrtenfan.metalfever.tileentity;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import ru.mrtenfan.metalfever.ConfigFile;

public class TileEntityAlloyFurnace extends TileEntity implements IInventory {

    private String localyzedName;
    private ItemStack slots[];
    
    public int dualCookTime;
    public int dualPower;
    
    public TileEntityAlloyFurnace( ) {
            slots = new ItemStack[5];
    }

    @Override
    public int getSizeInventory() {
        return slots.length;
    }

    @Override
    public ItemStack getStackInSlot(int i) {
        return slots[i ];
    }

    @Override
    public ItemStack getStackInSlotOnClosing(int p_70304_1_) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void setInventorySlotContents(int i, ItemStack itemStack) {
        slots[i] = itemStack;
        if (itemStack != null && itemStack.stackSize > getInventoryStackLimit())
            itemStack.stackSize = getInventoryStackLimit();
        
    }

    @Override
     public String getInventoryName() {
      
      return this.hasCustomInventoryName() ? this.localyzedName : "container.alloyFurnace";
     }

     @Override
     public boolean hasCustomInventoryName() {
      
      return this.localyzedName != null && this.localyzedName.length() > 0;
     }

     @Override
     public int getInventoryStackLimit() {
         return 64;
     }

     @Override
     public boolean isUseableByPlayer(EntityPlayer player) {
         return worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false : player.getDistanceSq((double)xCoord + 0.5D, (double)yCoord + 0.5D, (double)zCoord + 0.5D) <= 64.0D;
     }

    public void openInventory() {}
    public void closeInventory() {}

    @Override
    public boolean isItemValidForSlot(int i, ItemStack itemStack) {
        return i == 2 ? false : (i == 1 ? hasItemPower(itemStack) : true);
    }
    
    public boolean hasItemPower(ItemStack itemStack) {
        return getItemPower(itemStack) > 0;
    }
    
    private static int getItemPower(ItemStack itemStack) {
        if (itemStack == null)
            return 0;
        else {
            Item item = itemStack.getItem();
            
            if (item == Items.coal)
                return 1600;
        }
        return 0;
    }
    
    public ItemStack decrStackSize(int i, int j) {
        if (slots[i] != null) {
            if (slots[i].stackSize <= j ) {
                ItemStack itemStack = slots[i];
                slots[i] = null;
                return itemStack;
            }
            
            ItemStack itemStack1 = slots[i].splitStack(j);
            
            if (slots[i].stackSize == 0)
                slots[i] = null;
            
            return itemStack1;
        }else
            return null;
    }
    
    public void readFromNBT(NBTTagCompound nbt) {
        super.readFromNBT(nbt);
        NBTTagList list = nbt.getTagList("Items", 10);
        slots = new ItemStack[getSizeInventory()];
        
        for (int i = 0; i < list.tagCount(); i++) {
            NBTTagCompound nbt1 = (NBTTagCompound)list.getCompoundTagAt(i);
            byte b0 = nbt1.getByte("Slot");
            
            if (b0 >= 0 && b0 < slots.length) {
                slots[b0] = ItemStack.loadItemStackFromNBT(nbt1);
            }
        }
        
        dualPower = nbt.getShort("PowerTime");
        dualCookTime = nbt.getShort("CookTime");
    }
    
    public void writeToNBT(NBTTagCompound nbt) {
        super.writeToNBT(nbt);
        nbt.setShort("PowerTime", (short)dualPower);
        nbt.setShort("CookTime", (short)dualCookTime);
        NBTTagList list = new NBTTagList();
        
        for (int i = 0; i < slots.length; i++ ) {
            if (slots[i] != null) {
                NBTTagCompound nbt1 = new NBTTagCompound();
                nbt.setByte("Slot", (byte)i);
                slots[i].writeToNBT(nbt1);
                list.appendTag(nbt1);
            }
        }
        
        nbt.setTag("Items", list);
    }
}
Класс блока:
package ru.mrtenfan.metalfever.blocks;

import java.util.Random;

import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import ru.mrtenfan.metalfever.MetalFeverMain;
import ru.mrtenfan.metalfever.init.MFBlocks;
import ru.mrtenfan.metalfever.init.MFOther;
import ru.mrtenfan.metalfever.tileentity.TileEntityAlloyFurnace;

public class AlloyFurnace extends BlockContainer {
    
    private Random rand;
    private final boolean isActive;
    private static boolean keepInventory = false;
    private String  texPath= "metalfever:";
    @SideOnly(Side.CLIENT)
    protected IIcon BlockIconFront;
    protected IIcon BlockIconSide;
    protected IIcon BlockIconTop;
    protected IIcon BlockIconDown;
    
    @SideOnly(Side.CLIENT)
    private IIcon iconFront;

    public AlloyFurnace(Material mat, String name, float hard, float resist, String tool, int lvl, boolean work) {
        super(mat);
        if (work != true)
        this.setCreativeTab(MFOther.TabMetalFeverMain);
        else
        this.setLightLevel(0.625F);
        this.setHardness(hard);
        this.setResistance(resist);
        this.setHarvestLevel(tool, lvl);
        this.setBlockName(name);
        rand = new Random();
        isActive = work;
    }
    
    @SideOnly(Side.CLIENT)
    @Override
    public void registerBlockIcons(IIconRegister par1IconRegister)
    {
        // Регистрируем путь до png-текстур для разных сторон блока
        BlockIconFront = par1IconRegister.registerIcon(this.isActive ? texPath + "alloy_furnace_on" : texPath + "alloy_furnace_off");
        BlockIconSide = par1IconRegister.registerIcon(texPath + "alloy_furnace_side");
        BlockIconTop = par1IconRegister.registerIcon(texPath + "alloy_furnace_top");
        BlockIconDown = par1IconRegister.registerIcon(texPath + "alloy_furnace_top2");
    }
    
    @SideOnly(Side.CLIENT)
    @Override
    public IIcon getIcon(int side, int meta)
    {
        if (side == 0) 
            return BlockIconDown;
        if (side == 1) 
            return BlockIconTop;
        if (meta == 2 && side == 2) 
            return BlockIconFront;
        if (meta == 3 && side == 5) 
            return BlockIconFront;
        if (meta == 0 && side == 3) 
            return BlockIconFront;
        if (meta == 1 && side == 4) 
            return BlockIconFront;
        return BlockIconSide;
    }
    
    // Этот метод вызывается когда блок ставится кем-то
    @Override
    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityPlayer, ItemStack itemStack)
    {
        int i = MathHelper.floor_double((double)(entityPlayer.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
        world.setBlockMetadataWithNotify(x, y, z, i, 2);
    }
    
    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
        if (world.isRemote) {
            return true;
        }else if (!player.isSneaking()) {
            TileEntityAlloyFurnace entity = (TileEntityAlloyFurnace) world.getTileEntity(x, y, z);
            if (entity != null) {
                FMLNetworkHandler.openGui(player, MetalFeverMain.instance, MFBlocks.GUI_ID_alloy_furnace, world, x, y, z);
            }
            return true;
        } else {
            return false;
        }
    }
    
    @Override
    public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
        return new TileEntityAlloyFurnace();
    }

}
МБ какой-нибудь класс?..
 
Сверху