Jump to content

[1.5.2] Can't have more than one GUI


ElectronFusion

Recommended Posts

(This might be a noob question) I have to make multiple GUIs. My first GUI worked perfectly but as soon as I made my second, the first would not work. I'm sure this is a trivial problem but as I said, I am only a beginner.

 

Core

package TechCraft;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.src.ModLoader;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.PreInit;   
import cpw.mods.fml.common.Mod.Init;       
import cpw.mods.fml.common.Mod.PostInit;   
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;

@Mod(modid="TechCraftID", name="TechCraft", version="0.0.0")
@NetworkMod(clientSideRequired = true, serverSideRequired = false, channels = {ModInfo.CHANNEL}, packetHandler = PacketHandler.class)


public class Core {
public static CreativeTabs tabTechCraft = new  tabTechCraft(CreativeTabs.getNextID(), "TechCraft");

public final static Item cobaltIngot = new CobaltIngot(4001).setMaxStackSize(64).setUnlocalizedName("ingotcobalt").setCreativeTab(tabTechCraft);;
public final static Block cobaltBlock = new CobaltBlock(4002, Material.ground).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Cobalt Block").setCreativeTab(tabTechCraft);
public final static Block cobaltOre = new CobaltOre(4003, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Cobalt Ore").setCreativeTab(tabTechCraft);

public final static Item nickelIngot = new NickelIngot(4008).setMaxStackSize(64).setUnlocalizedName("ingotnickel").setCreativeTab(tabTechCraft);;
public final static Block nickelOre = new NickelOre(4006, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Nickel Ore").setCreativeTab(tabTechCraft);
public final static Block nickelBlock = new NickelBlock(4007, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Nickel Block").setCreativeTab(tabTechCraft);

public final static Item steelIngot = new SteelIngot(4004).setMaxStackSize(64).setUnlocalizedName("ingotsteel").setCreativeTab(tabTechCraft);;
public final static Block steelBlock = new SteelBlock(4005, Material.ground).setHardness(6.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Steel Block").setCreativeTab(tabTechCraft); 

public final static Item copperIngot = new CopperIngot(4009).setMaxStackSize(64).setUnlocalizedName("ingotCopper").setCreativeTab(tabTechCraft);;
public final static Block copperOre = new CopperOre(4010, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Copper Ore").setCreativeTab(tabTechCraft);
public final static Block copperBlock = new CopperBlock(4011, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Copper Bloc").setCreativeTab(tabTechCraft);

public final static Item zincIngot = new ZincIngot(4012).setMaxStackSize(64).setUnlocalizedName("ingotzinc").setCreativeTab(tabTechCraft);;
public final static Block zincOre = new ZincOre(4013, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Zinc Ore").setCreativeTab(tabTechCraft);
public final static Block zincBlock = new ZincBlock(4014, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Zinc Block").setCreativeTab(tabTechCraft);

public final static Block liquefierIdle = new Liquefier(4015, false).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Liquefier").setCreativeTab(tabTechCraft);
public final static Block liquefierActive = new Liquefier(4016, true).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setLightValue(1F).setUnlocalizedName("Liquefier");
public final static Block coolerIdle = new Cooler(4057, false).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Cooler").setCreativeTab(tabTechCraft);
public final static Block coolerActive = new Cooler(4058, true).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Cooler");

public final static Item bucketOfZincAndCopper = new BucketOfZincAndCopper(4017).setMaxStackSize(16).setUnlocalizedName("bucketBrass").setCreativeTab(tabTechCraft);;
public final static Item bucketOfMoltenZincAndCopper = new BucketOfZincAndCopper(4018).setMaxStackSize(16).setUnlocalizedName("bucketMoltenBrass").setCreativeTab(tabTechCraft);;
public final static Item brassIngot = new BrassIngot(4034).setMaxStackSize(64).setUnlocalizedName("brassIngot").setCreativeTab(tabTechCraft);
public final static Block brassBlock = new BrassBlock(4035, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Brass Block").setCreativeTab(tabTechCraft);

public final static Item invarIngot = new InvarIngot(4036).setMaxStackSize(64).setUnlocalizedName("invarIngot").setCreativeTab(tabTechCraft);
public final static Block invarBlock = new InvarBlock(4037, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Invar Block").setCreativeTab(tabTechCraft);

public final static Item electrumIngot = new ElectrumIngot(4038).setMaxStackSize(64).setUnlocalizedName("electrumIngot").setCreativeTab(tabTechCraft);
public final static Block electrumBlock = new ElectrumBlock(4039, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Electrum Block").setCreativeTab(tabTechCraft);

public final static Item bronzeIngot = new BronzeIngot(4040).setMaxStackSize(64).setUnlocalizedName("bronzeIngot").setCreativeTab(tabTechCraft);
public final static Block bronzeBlock = new BronzeBlock(4041, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Bronze Block").setCreativeTab(tabTechCraft);

public final static Item pewterIngot = new PewterIngot(4042).setMaxStackSize(64).setUnlocalizedName("pewterIngot").setCreativeTab(tabTechCraft);
public final static Block pewterBlock = new PewterBlock(4043, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Pewter Block").setCreativeTab(tabTechCraft);

public final static Item silverIngot = new SilverIngot(4044).setMaxStackSize(64).setUnlocalizedName("silverIngot").setCreativeTab(tabTechCraft);
public final static Block silverBlock = new SilverBlock(4045, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Silver Block").setCreativeTab(tabTechCraft);
public final static Block silverOre = new SilverOre(4046, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Silver Ore").setCreativeTab(tabTechCraft);

public final static Item  tinIngot = new TinIngot(4047).setMaxStackSize(64).setUnlocalizedName("tinIngot").setCreativeTab(tabTechCraft);
public final static Block tinBlock = new TinBlock(4048, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Tin Block").setCreativeTab(tabTechCraft);
public final static Block tinOre = new TinOre(4049, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Tin Ore").setCreativeTab(tabTechCraft);

public final static Item  aluminiumIngot = new AluminiumIngot(4050).setMaxStackSize(64).setUnlocalizedName("aluminiumIngot").setCreativeTab(tabTechCraft);
public final static Block aluminiumBlock = new AluminiumBlock(4051, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Aluminium Block").setCreativeTab(tabTechCraft);
public final static Block aluminiumOre = new AluminiumOre(4052, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Aluminium Ore").setCreativeTab(tabTechCraft);

public final static Item plutoniumShard = new PlutoniumShard(4020).setMaxStackSize(64).setUnlocalizedName("plutoniumShard");
public final static Item plutoniumIngot = new PlutoniumIngot(4021).setMaxStackSize(64).setUnlocalizedName("plutoniumIngot");
public final static Block plutoniumOre = new PlutoniumOre(4019, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Plutonium Ore").setLightValue(0.4F).setCreativeTab(tabTechCraft);
public final static Item plutoniumBillet = new PlutoniumBillet(4022).setMaxStackSize(64).setUnlocalizedName("plutoniumBillet");
public final static Block plutoniumBlock = new PlutoniumBlock(4023, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Plutonium Block").setLightValue(0.7F);

public final static Item  plutonium244Billet = new Plutonium244Billet(4024).setMaxStackSize(64).setUnlocalizedName("plutonium244Billet");
public final static Item plutonium238Billet = new Plutonium238Billet(4025).setMaxStackSize(64).setUnlocalizedName("plutonium238Billet");
public final static Item plutonium239Billet = new Plutonium239Billet(4026).setMaxStackSize(64).setUnlocalizedName("plutonium239Billet");

public final static Item neptuniumShard = new NeptuniumShard(4027).setMaxStackSize(64).setUnlocalizedName("neptuniumShard");
public final static Item neptuniumIngot = new NeptuniumIngot(4028).setMaxStackSize(64).setUnlocalizedName("neptuniumIngot");
public final static Block neptuniumOre = new NeptuniumOre(4029, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Neptunium Ore").setLightValue(0.4F).setCreativeTab(tabTechCraft);
public final static Item neptuniumBillet = new NeptuniumBillet(4030).setMaxStackSize(64).setUnlocalizedName("neptuniumbillet");
public final static Block neptuniumBlock = new NeptuniumBlock(4031, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Neptunium Block").setLightValue(0.4F).setCreativeTab(tabTechCraft);

public final static Item neptunium235Billet = new Neptunium235Billet(4031).setMaxStackSize(64).setUnlocalizedName("neptunium235billet");
public final static Item neptunium236Billet = new Neptunium236Billet(4032).setMaxStackSize(64).setUnlocalizedName("neptunium236billet");
public final static Item neptunium237Billet = new Neptunium237Billet(4033).setMaxStackSize(64).setUnlocalizedName("neptunium239billet");

public final static Item uraniumIngot = new UraniumIngot(4053).setMaxStackSize(64).setUnlocalizedName("uraniumIngot");
public final static Block uraniumOre = new UraniumOre(4054, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Uranium Ore").setLightValue(0.4F).setCreativeTab(tabTechCraft);
public final static Item uraniumBillet = new UraniumBillet(4055).setMaxStackSize(64).setUnlocalizedName("uraniumbillet");
public final static Block uraniumBlock = new UraniumBlock(4056, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Neptunium Block").setLightValue(0.4F).setCreativeTab(tabTechCraft);

public final static Item uranium235Billet = new Uranium235Billet(4077).setMaxStackSize(64).setUnlocalizedName("uranium235billet");
public final static Item uranium238Billet = new Uranium238Billet(4078).setMaxStackSize(64).setUnlocalizedName("uranium238billet");
public final static Item uranium233Billet = new Uranium233Billet(4079).setMaxStackSize(64).setUnlocalizedName("uranium233billet");

public final static Item bucketOfMercury = new bucketOfMercury(4080).setMaxStackSize(16).setUnlocalizedName("bucektOfMercury");
public final static Block mercuryOre = new MercuryOre(4081, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Mercury Ore");

public final static Item  chromiumIngot = new ChromiumIngot(4082).setMaxStackSize(64).setUnlocalizedName("chromiumIngot").setCreativeTab(tabTechCraft);
public final static Block chromiumBlock = new ChromiumBlock(4083, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Chromium Block").setCreativeTab(tabTechCraft);
public final static Block chromiumOre = new ChromiumOre(4084, Material.rock).setHardness(4.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("Chromium Ore").setCreativeTab(tabTechCraft);

public final static Block b83Bomb = new B83Bomb(3000, Material.rock).setHardness(4.0F).setStepSound(Block.soundClothFootstep).setUnlocalizedName("B83 Nuclear Bomb").setCreativeTab(tabTechCraft);
public final static Block rDXExplosive = new RDXExplosive(3001, Material.grass).setHardness(4.0F).setStepSound(Block.soundGrassFootstep).setUnlocalizedName("RDX").setCreativeTab(tabTechCraft);

@Instance(value = "TechCraftID")
public static Core instance = new Core();


@SidedProxy(clientSide="TechCraft.ClientProxy", serverSide="TechCraft.CommonProxy")
public static CommonProxy proxy;





@PreInit
public void preInit(FMLPreInitializationEvent event){
	NetworkRegistry.instance().registerGuiHandler(this, this.proxy);
	instance = this;

}

@Init
public void load(FMLInitializationEvent event){

	new GuiHandler();


	LanguageRegistry.addName(cobaltIngot, ("Cobalt Ingot"));



	LanguageRegistry.addName(cobaltBlock, ("Cobalt Block"));
	MinecraftForge.setBlockHarvestLevel(cobaltBlock, "pickaxe", 2);
	GameRegistry.registerBlock(cobaltBlock, "cobaltBlock");


	LanguageRegistry.addName(cobaltOre, ("Cobalt Ore"));
	MinecraftForge.setBlockHarvestLevel(cobaltOre, "pickaxe", 2);
	GameRegistry.registerBlock(cobaltOre, "cobaltOre");

	LanguageRegistry.addName(steelIngot,("Steel Ingot"));

	LanguageRegistry.addName(steelBlock, ("Steel Block"));
	MinecraftForge.setBlockHarvestLevel(steelBlock, "pickaxe", 2);
	GameRegistry.registerBlock(steelBlock, "steelBlock");

	LanguageRegistry.addName(nickelIngot, ("Nickel Ingot"));

	LanguageRegistry.addName(nickelOre, ("Nickel Ore"));
	MinecraftForge.setBlockHarvestLevel(nickelOre, "pickaxe", 2);
	GameRegistry.registerBlock(nickelOre, "nickelOre");

	LanguageRegistry.addName(nickelBlock, ("Nickel Block"));
	MinecraftForge.setBlockHarvestLevel(nickelBlock, "pickaxe", 2);
	GameRegistry.registerBlock(nickelBlock, "nickelBlock");

	LanguageRegistry.addName(copperIngot, ("Copper Ingot"));

	LanguageRegistry.addName(copperOre, ("Copper Ore"));
	MinecraftForge.setBlockHarvestLevel(copperBlock, "pickaxe", 2);
	GameRegistry.registerBlock(copperOre, "copperOre");

	LanguageRegistry.addName(copperBlock, ("Copper Block"));
	MinecraftForge.setBlockHarvestLevel(copperBlock, "pickaxe", 2);
	GameRegistry.registerBlock(copperBlock, "copperBlock");

	LanguageRegistry.addName(zincIngot, ("Zinc Ingot"));

	LanguageRegistry.addName(zincOre, ("Zinc Ore"));
	MinecraftForge.setBlockHarvestLevel(zincOre, "pickaxe", 2);
	GameRegistry.registerBlock(zincOre, "zincOre");

	LanguageRegistry.addName(zincBlock, ("Zinc Block"));
	MinecraftForge.setBlockHarvestLevel(zincBlock, "pickaxe", 2);
	GameRegistry.registerBlock(zincBlock, "zincBlock");

	LanguageRegistry.addName(plutoniumOre, ("Plutonium Ore"));
	MinecraftForge.setBlockHarvestLevel(plutoniumOre, "pickaxe", 3);
	GameRegistry.registerBlock(plutoniumOre, "plutoniumOre");

	LanguageRegistry.addName(plutoniumBlock, ("Plutonium Block"));
	MinecraftForge.setBlockHarvestLevel(plutoniumBlock, "pickaxe", 3);
	GameRegistry.registerBlock(plutoniumBlock, "plutoniumBlock");

	LanguageRegistry.addName(plutoniumShard, ("Plutonium Shard"));
	LanguageRegistry.addName(plutoniumIngot, ("Plutonium Ingot"));
	LanguageRegistry.addName(plutoniumBillet, ("Plutonium Billet"));
	LanguageRegistry.addName(plutonium244Billet, ("Plutonium 244 Billet"));
	LanguageRegistry.addName(plutonium238Billet, ("Plutonium 238 Billet"));
	LanguageRegistry.addName(plutonium239Billet, ("Plutonium 239 Billet"));

	LanguageRegistry.addName(neptuniumOre, ("Neptunium Ore"));
	MinecraftForge.setBlockHarvestLevel(neptuniumOre, "pickaxe", 3);
	GameRegistry.registerBlock(neptuniumOre, "neptuniumOre");

	LanguageRegistry.addName(neptuniumBlock, ("Neptunium Block"));
	MinecraftForge.setBlockHarvestLevel(neptuniumBlock, "pickaxe", 3);
	GameRegistry.registerBlock(neptuniumBlock, "neptuniumBlock");

	LanguageRegistry.addName(neptuniumShard, ("Neptunium Shard"));
	LanguageRegistry.addName(neptuniumIngot, ("Neptunium Ingot"));
	LanguageRegistry.addName(neptuniumBillet, ("Neptunium Billet"));
	LanguageRegistry.addName(neptunium235Billet, ("Neptunium 235 Billet"));
	LanguageRegistry.addName(neptunium236Billet, ("Neptunium 236 Billet"));
	LanguageRegistry.addName(neptunium237Billet, ("Neptunium 237 Billet"));

	LanguageRegistry.addName(uraniumIngot, ("Uranium Ingot"));
	LanguageRegistry.addName(uraniumBillet, ("Uranium Billet"));
	LanguageRegistry.addName(uranium233Billet, ("Uranium 233 Billet"));
	LanguageRegistry.addName(uranium238Billet, ("Uranium 238 Billet"));
	LanguageRegistry.addName(uranium235Billet, ("Uranium 235 Billet"));

	LanguageRegistry.addName(liquefierIdle, ("Liquefier"));
	MinecraftForge.setBlockHarvestLevel(liquefierIdle, "pickaxe", 2);
	GameRegistry.registerBlock(liquefierIdle, "liquefier");

	LanguageRegistry.addName(liquefierActive, ("Liquefier"));
	MinecraftForge.setBlockHarvestLevel(liquefierActive, "pickaxe", 2);
	GameRegistry.registerBlock(liquefierActive, "liquefieractive");

	LanguageRegistry.addName(bucketOfZincAndCopper, ("Bucket of Zinc and Copper"));

	LanguageRegistry.addName(bucketOfMoltenZincAndCopper, ("Bucket of Molten Brass"));

	LanguageRegistry.addName(brassIngot, ("Brass Ingot"));
	LanguageRegistry.addName(brassBlock, ("Brass Block"));
	MinecraftForge.setBlockHarvestLevel(brassBlock, "pickaxe", 2);
	GameRegistry.registerBlock(brassBlock, "brassBlock");

	LanguageRegistry.addName(invarIngot, ("Invar Ingot"));
	LanguageRegistry.addName(invarBlock, ("Invar Block"));
	MinecraftForge.setBlockHarvestLevel(invarBlock, "pickaxe", 2);
	GameRegistry.registerBlock(invarBlock, "invarBlock");

	LanguageRegistry.addName(electrumIngot, ("Electrum Ingot"));
	LanguageRegistry.addName(electrumBlock, ("Electrum Block"));
	MinecraftForge.setBlockHarvestLevel(electrumBlock, "pickaxe", 2);
	GameRegistry.registerBlock(electrumBlock, "electrumBlock");

	LanguageRegistry.addName(bronzeIngot, ("Bronze Ingot"));
	LanguageRegistry.addName(bronzeBlock, ("Bronze Block"));
	MinecraftForge.setBlockHarvestLevel(bronzeBlock, "pickaxe", 2);
	GameRegistry.registerBlock(bronzeBlock, "bronzeBlock");

	LanguageRegistry.addName(pewterIngot, ("Pewter Ingot"));
	LanguageRegistry.addName(pewterBlock, ("Pewter Block"));
	MinecraftForge.setBlockHarvestLevel(pewterBlock, "pickaxe", 2);
	GameRegistry.registerBlock(pewterBlock, "pewterBlock");

	LanguageRegistry.addName(tinIngot, ("Tin Ingot"));

	LanguageRegistry.addName(tinOre, ("Tin Ore"));
	MinecraftForge.setBlockHarvestLevel(tinOre, "pickaxe", 2);
	GameRegistry.registerBlock(tinOre, "tinOre");

	LanguageRegistry.addName(tinBlock, ("Tin Block"));
	MinecraftForge.setBlockHarvestLevel(tinBlock, "pickaxe", 2);
	GameRegistry.registerBlock(tinBlock, "tinBlock");

	LanguageRegistry.addName(silverIngot, ("Silver Ingot"));

	LanguageRegistry.addName(silverOre, ("Silver Ore"));
	MinecraftForge.setBlockHarvestLevel(silverOre, "pickaxe", 2);
	GameRegistry.registerBlock(silverOre, "silverOre");

	LanguageRegistry.addName(silverBlock, ("Silver Block"));
	MinecraftForge.setBlockHarvestLevel(silverBlock, "pickaxe", 2);
	GameRegistry.registerBlock(silverBlock, "silverBlock");

	LanguageRegistry.addName(coolerIdle, ("Cooler"));
	MinecraftForge.setBlockHarvestLevel(coolerIdle, "pickaxe", 2);
	GameRegistry.registerBlock(coolerIdle, "cooler");

	LanguageRegistry.addName(coolerActive, ("Cooler"));
	MinecraftForge.setBlockHarvestLevel(coolerActive, "pickaxe", 2);
	GameRegistry.registerBlock(coolerActive, "coolerActive");

	LanguageRegistry.addName(aluminiumIngot, ("Aluminium Ingot"));

	LanguageRegistry.addName(aluminiumOre, ("Aluminium Ore"));
	MinecraftForge.setBlockHarvestLevel(aluminiumOre, "pickaxe", 2);
	GameRegistry.registerBlock(aluminiumOre, "AluminiumOre");

	LanguageRegistry.addName(aluminiumBlock, ("Aluminium Block"));
	MinecraftForge.setBlockHarvestLevel(aluminiumBlock, "pickaxe", 2);
	GameRegistry.registerBlock(aluminiumBlock, "AluminiumBlock");

	LanguageRegistry.addName(chromiumIngot, ("Chromium Ingot"));

	LanguageRegistry.addName(chromiumOre, ("Chromium Ore"));
	MinecraftForge.setBlockHarvestLevel(chromiumOre, "pickaxe", 2);
	GameRegistry.registerBlock(chromiumOre, "ChromiumOre");

	LanguageRegistry.addName(chromiumBlock, ("Chromium Block"));
	MinecraftForge.setBlockHarvestLevel(chromiumBlock, "pickaxe", 2);
	GameRegistry.registerBlock(chromiumBlock, "Chromium Block");

	LanguageRegistry.addName(bucketOfMercury, ("Bucket of Mercury"));
	LanguageRegistry.addName(mercuryOre, ("Mercury Ore"));
	MinecraftForge.setBlockHarvestLevel(mercuryOre, "pickaxe", 2);
	GameRegistry.registerBlock(mercuryOre, "Mercury Ore");


	LanguageRegistry.addName(b83Bomb, ("B83 Nuclear Bomb"));
	MinecraftForge.setBlockHarvestLevel(b83Bomb, "pickaxe", 3);
	GameRegistry.registerBlock(b83Bomb, "b61Bomb");

	LanguageRegistry.addName(rDXExplosive, ("RDX"));
	MinecraftForge.setBlockHarvestLevel(rDXExplosive, "pickaxe", 0);
	GameRegistry.registerBlock(rDXExplosive, "rDXEXplosive");


	LanguageRegistry.instance().addStringLocalization("entity.B83", "en_US", "B83 Nuclear Bomb");
	EntityRegistry.registerGlobalEntityID(EntityB83Primed.class, "B83", EntityRegistry.findGlobalUniqueEntityId());
	EntityRegistry.registerModEntity(EntityB83Primed.class, "B83", 1, this, 128, 1, false); 

	LanguageRegistry.instance().addStringLocalization("entity.RDX", "en_US", "RDX");
	RenderingRegistry.registerEntityRenderingHandler(EntityRDXPrimed.class, new RenderRDX());
	EntityRegistry.registerModEntity(EntityRDXPrimed.class, "RDX", 1, this, 127, 1, false);
	EntityRegistry.registerGlobalEntityID(EntityRDXPrimed.class, "RDX", EntityRegistry.findGlobalUniqueEntityId());

	GameRegistry.addSmelting(cobaltOre.blockID, new ItemStack(cobaltIngot), 0.1f);
	GameRegistry.addRecipe(new ItemStack(cobaltBlock), "xxx", "xxx", "xxx",'x', cobaltIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(cobaltIngot, 9), new ItemStack(cobaltBlock));

	GameRegistry.addSmelting(nickelOre.blockID, new ItemStack(nickelIngot), 0.1f);
	GameRegistry.addRecipe(new ItemStack(nickelBlock), "xxx", "xxx", "xxx",'x', nickelIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(nickelIngot, 9), new ItemStack(nickelBlock));

	GameRegistry.addSmelting(copperOre.blockID, new ItemStack(copperIngot), 0.1f);
	GameRegistry.addRecipe(new ItemStack(copperBlock), "xxx", "xxx", "xxx",'x', copperIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(copperIngot, 9), new ItemStack(copperBlock));

	GameRegistry.addSmelting(Item.ingotIron.itemID, new ItemStack(steelIngot), 0.1f);
	GameRegistry.addRecipe(new ItemStack(steelBlock), "xxx", "xxx", "xxx",'x', steelIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(steelIngot, 9), new ItemStack(steelBlock));

	GameRegistry.addRecipe(new ItemStack(bucketOfZincAndCopper), "xxx", " y ", " z ", 'x', copperIngot, 'y', zincIngot, 'z',Item.bucketEmpty);

	GameRegistry.addRecipe(new ItemStack(brassBlock), "xxx", "xxx", "xxx", 'x', brassIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(brassIngot, 9), new ItemStack(brassBlock));

	GameRegistry.addRecipe(new ItemStack(invarBlock), "xxx", "xxx", "xxx", 'x', invarIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(invarIngot, 9), new ItemStack(invarBlock));

	GameRegistry.addRecipe(new ItemStack(electrumBlock), "xxx", "xxx", "xxx", 'x', electrumIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(electrumIngot, 9), new ItemStack(electrumBlock));

	GameRegistry.addRecipe(new ItemStack(bronzeBlock), "xxx", "xxx", "xxx", 'x', bronzeIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(electrumIngot, 9), new ItemStack(electrumBlock));

	GameRegistry.addSmelting(tinOre.blockID, new ItemStack(tinIngot), 0.1f);
	GameRegistry.addRecipe(new ItemStack(tinBlock), "xxx", "xxx", "xxx", 'x', tinIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(tinIngot, 9), new ItemStack(tinBlock));

	GameRegistry.addSmelting(silverOre.blockID, new ItemStack(silverIngot), 0.1f);
	GameRegistry.addRecipe(new ItemStack(silverBlock), "xxx", "xxx", "xxx", 'x', silverIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(silverIngot, 9), new ItemStack(silverBlock));

	GameRegistry.addSmelting(aluminiumOre.blockID, new ItemStack(aluminiumIngot), 0.1f);
	GameRegistry.addRecipe(new ItemStack(aluminiumBlock), "xxx", "xxx", "xxx", 'x', aluminiumIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(aluminiumIngot, 9), new ItemStack(aluminiumBlock));

	GameRegistry.addSmelting(chromiumOre.blockID, new ItemStack(chromiumIngot), 0.1f);
	GameRegistry.addRecipe(new ItemStack(chromiumBlock), "xxx", "xxx", "xxx", 'x', chromiumIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(chromiumIngot, 9), new ItemStack(chromiumBlock));

	GameRegistry.addRecipe(new ItemStack(liquefierIdle), "xxx", "xyx", "xxx", 'x', steelIngot, 'y', Item.bucketLava);
	GameRegistry.addRecipe(new ItemStack(coolerIdle), "xxx", "xyx", "xxx", 'x', steelIngot, 'x', Block.ice);
	GameRegistry.addRecipe(new ItemStack(plutoniumIngot), "xxx", "xxx", "xxx", 'x', plutoniumShard);
	GameRegistry.addRecipe(new ItemStack(plutoniumBillet), " x ", "xxx", " x ", 'x', plutoniumIngot);
	GameRegistry.addRecipe(new ItemStack(plutoniumBlock), "xxx", "xxx", "xxx", 'x', plutoniumIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(plutoniumIngot, 9), new ItemStack(plutoniumBlock));
	GameRegistry.addRecipe(new ItemStack(neptuniumIngot), "xxx", "xxx", "xxx", 'x', neptuniumShard);
	GameRegistry.addRecipe(new ItemStack(neptuniumBillet), " x ", "xxx", " x ", 'x', neptuniumIngot);
	GameRegistry.addRecipe(new ItemStack(neptuniumBlock), "xxx", "xxx", "xxx", 'x', neptuniumIngot);
	GameRegistry.addShapelessRecipe(new ItemStack(neptuniumIngot, 9), new ItemStack(neptuniumBlock));

	GameRegistry.registerWorldGenerator(new WorldGenerator());

	GameRegistry.registerTileEntity(TileEntityLiquefier.class,"TileEntityLiquefier");
	GameRegistry.registerTileEntity(TileEntityCooler.class,"TileEntityCooler");

                

	proxy.registerRenderers();
}

@PostInit
public void postInit(FMLPostInitializationEvent event){

}

}

Liquefier

package TechCraft;

import cpw.mods.fml.common.network.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import TechCraft.TileEntityLiquefier;
import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;

public class Liquefier extends BlockContainer
{
    /**
     * Is the random generator used by furnace to drop the inventory contents in random directions.
     */
    private final Random furnaceRand = new Random();

    /** True if this is an active furnace, false if idle */
    private final boolean isActive;

    /**
     * This flag is used to prevent the furnace inventory to be dropped upon block removal, is used internally when the
     * furnace block changes from idle to active and vice-versa.
     */
    private static boolean keepFurnaceInventory = false;
    @SideOnly(Side.CLIENT)
    private Icon furnaceIconTop;
    @SideOnly(Side.CLIENT)
    private Icon furnaceIconFront;

    protected Liquefier(int par1, boolean par2)
    {
        super(par1, Material.rock);
        this.isActive = par2;
    }

    /**
     * Returns the ID of the items to drop on destruction.
     */
    public int idDropped(int par1, Random par2Random, int par3)
    {
        return Core.liquefierIdle.blockID;
    }

    /**
     * Called whenever the block is added into the world. Args: world, x, y, z
     */
    public void onBlockAdded(World par1World, int par2, int par3, int par4)
    {
        super.onBlockAdded(par1World, par2, par3, par4);
        this.setDefaultDirection(par1World, par2, par3, par4);
    }

    /**
     * set a blocks direction
     */
    private void setDefaultDirection(World par1World, int par2, int par3, int par4)
    {
        if (!par1World.isRemote)
        {
            int l = par1World.getBlockId(par2, par3, par4 - 1);
            int i1 = par1World.getBlockId(par2, par3, par4 + 1);
            int j1 = par1World.getBlockId(par2 - 1, par3, par4);
            int k1 = par1World.getBlockId(par2 + 1, par3, par4);
            byte b0 = 3;

            if (Block.opaqueCubeLookup[l] && !Block.opaqueCubeLookup[i1])
            {
                b0 = 3;
            }

            if (Block.opaqueCubeLookup[i1] && !Block.opaqueCubeLookup[l])
            {
                b0 = 2;
            }

            if (Block.opaqueCubeLookup[j1] && !Block.opaqueCubeLookup[k1])
            {
                b0 = 5;
            }

            if (Block.opaqueCubeLookup[k1] && !Block.opaqueCubeLookup[j1])
            {
                b0 = 4;
            }

            par1World.setBlockMetadataWithNotify(par2, par3, par4, b0, 2);
        }
    }

    @SideOnly(Side.CLIENT)

    /**
     * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
     */
    public Icon getIcon(int par1, int par2)
    {
        return par1 == 1 ? this.furnaceIconTop : (par1 == 0 ? this.furnaceIconTop : (par1 != par2 ? this.blockIcon : this.furnaceIconFront));
    }

    @SideOnly(Side.CLIENT)

    /**
     * When this method is called, your block should register all the icons it needs with the given IconRegister. This
     * is the only chance you get to register icons.
     */
    public void registerIcons(IconRegister par1IconRegister)
    {
        this.blockIcon = par1IconRegister.registerIcon("TechCraft:machine_side");
        this.furnaceIconFront = par1IconRegister.registerIcon(this.isActive ? "TechCraft:machine_front_lit" : "TechCraft:machine_front");
        this.furnaceIconTop = par1IconRegister.registerIcon("TechCraft:machine_top");
    }

    /**
     * Called upon block activation (right click on the block.)
     */
    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer player, int par6, float par7, float par8, float par9)
    {
        if (par1World.isRemote)
        {
            return true;
        }
        else
        {
            TileEntityLiquefier tileentityfurnace = (TileEntityLiquefier)par1World.getBlockTileEntity(par2, par3, par4);

            if (tileentityfurnace != null)
            {
            	player.openGui(player, 0, par1World, par2, par3, par4);
            }

            return true;
        }
    }

    /**
     * Update which block ID the furnace is using depending on whether or not it is burning
     */
    public static void updateFurnaceBlockState(boolean par0, World par1World, int par2, int par3, int par4)
    {
        int l = par1World.getBlockMetadata(par2, par3, par4);
        TileEntity tileentity = par1World.getBlockTileEntity(par2, par3, par4);
        keepFurnaceInventory = true;

        if (par0)
        {
            par1World.setBlock(par2, par3, par4, Core.liquefierActive.blockID);
        }
        else
        {
            par1World.setBlock(par2, par3, par4, Core.liquefierIdle.blockID);
        }

        keepFurnaceInventory = false;
        par1World.setBlockMetadataWithNotify(par2, par3, par4, l, 2);

        if (tileentity != null)
        {
            tileentity.validate();
            par1World.setBlockTileEntity(par2, par3, par4, tileentity);
        }
    }

    @SideOnly(Side.CLIENT)

    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
        if (this.isActive)
        {
            int l = par1World.getBlockMetadata(par2, par3, par4);
            float f = (float)par2 + 0.5F;
            float f1 = (float)par3 + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F;
            float f2 = (float)par4 + 0.5F;
            float f3 = 0.52F;
            float f4 = par5Random.nextFloat() * 0.6F - 0.3F;

            if (l == 4)
            {
                par1World.spawnParticle("smoke", (double)(f - f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
                par1World.spawnParticle("flame", (double)(f - f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
            }
            else if (l == 5)
            {
                par1World.spawnParticle("smoke", (double)(f + f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
                par1World.spawnParticle("flame", (double)(f + f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
            }
            else if (l == 2)
            {
                par1World.spawnParticle("smoke", (double)(f + f4), (double)f1, (double)(f2 - f3), 0.0D, 0.0D, 0.0D);
                par1World.spawnParticle("flame", (double)(f + f4), (double)f1, (double)(f2 - f3), 0.0D, 0.0D, 0.0D);
            }
            else if (l == 3)
            {
                par1World.spawnParticle("smoke", (double)(f + f4), (double)f1, (double)(f2 + f3), 0.0D, 0.0D, 0.0D);
                par1World.spawnParticle("flame", (double)(f + f4), (double)f1, (double)(f2 + f3), 0.0D, 0.0D, 0.0D);
            }
        }
    }

    /**
     * Returns a new instance of a block's tile entity class. Called on placing the block.
     */
    public TileEntity createNewTileEntity(World par1World)
    {
        return new TileEntityLiquefier();
    }

    /**
     * Called when the block is placed in the world.
     */
    public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving, ItemStack par6ItemStack)
    {
        int l = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;

        if (l == 0)
        {
            par1World.setBlockMetadataWithNotify(par2, par3, par4, 2, 2);
        }

        if (l == 1)
        {
            par1World.setBlockMetadataWithNotify(par2, par3, par4, 5, 2);
        }

        if (l == 2)
        {
            par1World.setBlockMetadataWithNotify(par2, par3, par4, 3, 2);
        }

        if (l == 3)
        {
            par1World.setBlockMetadataWithNotify(par2, par3, par4, 4, 2);
        }

        if (par6ItemStack.hasDisplayName())
        {
            ((TileEntityLiquefier)par1World.getBlockTileEntity(par2, par3, par4)).func_94129_a(par6ItemStack.getDisplayName());
        }
    }

    /**
     * ejects contained items into the world, and notifies neighbours of an update, as appropriate
     */
    public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6)
    {
        if (!keepFurnaceInventory)
        {
            TileEntityLiquefier tileentityfurnace = (TileEntityLiquefier)par1World.getBlockTileEntity(par2, par3, par4);

            if (tileentityfurnace != null)
            {
                for (int j1 = 0; j1 < tileentityfurnace.getSizeInventory(); ++j1)
                {
                    ItemStack itemstack = tileentityfurnace.getStackInSlot(j1);

                    if (itemstack != null)
                    {
                        float f = this.furnaceRand.nextFloat() * 0.8F + 0.1F;
                        float f1 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;
                        float f2 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;

                        while (itemstack.stackSize > 0)
                        {
                            int k1 = this.furnaceRand.nextInt(21) + 10;

                            if (k1 > itemstack.stackSize)
                            {
                                k1 = itemstack.stackSize;
                            }

                            itemstack.stackSize -= k1;
                            EntityItem entityitem = new EntityItem(par1World, (double)((float)par2 + f), (double)((float)par3 + f1), (double)((float)par4 + f2), new ItemStack(itemstack.itemID, k1, itemstack.getItemDamage()));

                            if (itemstack.hasTagCompound())
                            {
                                entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
                            }

                            float f3 = 0.05F;
                            entityitem.motionX = (double)((float)this.furnaceRand.nextGaussian() * f3);
                            entityitem.motionY = (double)((float)this.furnaceRand.nextGaussian() * f3 + 0.2F);
                            entityitem.motionZ = (double)((float)this.furnaceRand.nextGaussian() * f3);
                            par1World.spawnEntityInWorld(entityitem);
                        }
                    }
                }

                par1World.func_96440_m(par2, par3, par4, par5);
            }
        }

        super.breakBlock(par1World, par2, par3, par4, par5, par6);
    }

    /**
     * If this returns true, then comparators facing away from this block will use the value from
     * getComparatorInputOverride instead of the actual redstone signal strength.
     */
    public boolean hasComparatorInputOverride()
    {
        return true;
    }

    /**
     * If hasComparatorInputOverride returns true, the return value from this is used instead of the redstone signal
     * strength when this block inputs to a comparator.
     */
    public int getComparatorInputOverride(World par1World, int par2, int par3, int par4, int par5)
    {
        return Container.calcRedstoneFromInventory((IInventory)par1World.getBlockTileEntity(par2, par3, par4));
    }

    @SideOnly(Side.CLIENT)

    /**
     * only called by clickMiddleMouseButton , and passed to inventory.setCurrentItem (along with isCreative)
     */
    public int idPicked(World par1World, int par2, int par3, int par4)
    {
        return Core.liquefierIdle.blockID;
    }
}

TileEntityLiquefier

package TechCraft;

import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import TechCraft.Liquefier;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemHoe;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.item.ItemTool;
import TechCraft.RecipesLiquefier;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.ForgeDummyContainer;

public class TileEntityLiquefier extends TileEntity implements ISidedInventory, net.minecraftforge.common.ISidedInventory
{
    private static final int[] field_102010_d = new int[] {0};
    private static final int[] field_102011_e = new int[] {2, 1};
    private static final int[] field_102009_f = new int[] {1};

    /**
     * The ItemStacks that hold the items currently being used in the furnace
     */
    private ItemStack[] furnaceItemStacks = new ItemStack[3];

    /** The number of ticks that the furnace will keep burning */
    public int furnaceBurnTime = 0;

    /**
     * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for
     */
    public int currentItemBurnTime = 0;

    /** The number of ticks that the current item has been cooking for */
    public int furnaceCookTime = 0;
    private String field_94130_e;

    /**
     * Returns the number of slots in the inventory.
     */
    public int getSizeInventory()
    {
        return this.furnaceItemStacks.length;
    }

    /**
     * Returns the stack in slot i
     */
    public ItemStack getStackInSlot(int par1)
    {
        return this.furnaceItemStacks[par1];
    }

    /**
     * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a
     * new stack.
     */
    public ItemStack decrStackSize(int par1, int par2)
    {
        if (this.furnaceItemStacks[par1] != null)
        {
            ItemStack itemstack;

            if (this.furnaceItemStacks[par1].stackSize <= par2)
            {
                itemstack = this.furnaceItemStacks[par1];
                this.furnaceItemStacks[par1] = null;
                return itemstack;
            }
            else
            {
                itemstack = this.furnaceItemStacks[par1].splitStack(par2);

                if (this.furnaceItemStacks[par1].stackSize == 0)
                {
                    this.furnaceItemStacks[par1] = null;
                }

                return itemstack;
            }
        }
        else
        {
            return null;
        }
    }

    /**
     * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem -
     * like when you close a workbench GUI.
     */
    public ItemStack getStackInSlotOnClosing(int par1)
    {
        if (this.furnaceItemStacks[par1] != null)
        {
            ItemStack itemstack = this.furnaceItemStacks[par1];
            this.furnaceItemStacks[par1] = null;
            return itemstack;
        }
        else
        {
            return null;
        }
    }

    /**
     * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections).
     */
    public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
    {
        this.furnaceItemStacks[par1] = par2ItemStack;

        if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit())
        {
            par2ItemStack.stackSize = this.getInventoryStackLimit();
        }
    }

    /**
     * Returns the name of the inventory.
     */
    public String getInvName()
    {
        return this.isInvNameLocalized() ? this.field_94130_e : "container.furnace";
    }

    /**
     * If this returns false, the inventory name will be used as an unlocalized name, and translated into the player's
     * language. Otherwise it will be used directly.
     */
    public boolean isInvNameLocalized()
    {
        return this.field_94130_e != null && this.field_94130_e.length() > 0;
    }

    public void func_94129_a(String par1Str)
    {
        this.field_94130_e = par1Str;
    }

    /**
     * Reads a tile entity from NBT.
     */
    public void readFromNBT(NBTTagCompound par1NBTTagCompound)
    {
        super.readFromNBT(par1NBTTagCompound);
        NBTTagList nbttaglist = par1NBTTagCompound.getTagList("Items");
        this.furnaceItemStacks = new ItemStack[this.getSizeInventory()];

        for (int i = 0; i < nbttaglist.tagCount(); ++i)
        {
            NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttaglist.tagAt(i);
            byte b0 = nbttagcompound1.getByte("Slot");

            if (b0 >= 0 && b0 < this.furnaceItemStacks.length)
            {
                this.furnaceItemStacks[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
            }
        }

        this.furnaceBurnTime = par1NBTTagCompound.getShort("BurnTime");
        this.furnaceCookTime = par1NBTTagCompound.getShort("CookTime");
        this.currentItemBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);

        if (par1NBTTagCompound.hasKey("CustomName"))
        {
            this.field_94130_e = par1NBTTagCompound.getString("CustomName");
        }
    }

    /**
     * Writes a tile entity to NBT.
     */
    public void writeToNBT(NBTTagCompound par1NBTTagCompound)
    {
        super.writeToNBT(par1NBTTagCompound);
        par1NBTTagCompound.setShort("BurnTime", (short)this.furnaceBurnTime);
        par1NBTTagCompound.setShort("CookTime", (short)this.furnaceCookTime);
        NBTTagList nbttaglist = new NBTTagList();

        for (int i = 0; i < this.furnaceItemStacks.length; ++i)
        {
            if (this.furnaceItemStacks[i] != null)
            {
                NBTTagCompound nbttagcompound1 = new NBTTagCompound();
                nbttagcompound1.setByte("Slot", (byte)i);
                this.furnaceItemStacks[i].writeToNBT(nbttagcompound1);
                nbttaglist.appendTag(nbttagcompound1);
            }
        }

        par1NBTTagCompound.setTag("Items", nbttaglist);

        if (this.isInvNameLocalized())
        {
            par1NBTTagCompound.setString("CustomName", this.field_94130_e);
        }
    }

    /**
     * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't
     * this more of a set than a get?*
     */
    public int getInventoryStackLimit()
    {
        return 64;
    }

    @SideOnly(Side.CLIENT)

    /**
     * Returns an integer between 0 and the passed value representing how close the current item is to being completely
     * cooked
     */
    public int getCookProgressScaled(int par1)
    {
        return this.furnaceCookTime * par1 / 200;
    }

    @SideOnly(Side.CLIENT)

    /**
     * Returns an integer between 0 and the passed value representing how much burn time is left on the current fuel
     * item, where 0 means that the item is exhausted and the passed value means that the item is fresh
     */
    public int getBurnTimeRemainingScaled(int par1)
    {
        if (this.currentItemBurnTime == 0)
        {
            this.currentItemBurnTime = 200;
        }

        return this.furnaceBurnTime * par1 / this.currentItemBurnTime;
    }

    /**
     * Returns true if the furnace is currently burning
     */
    public boolean isBurning()
    {
        return this.furnaceBurnTime > 0;
    }

    /**
     * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count
     * ticks and creates a new spawn inside its implementation.
     */
    public void updateEntity()
    {
        boolean flag = this.furnaceBurnTime > 0;
        boolean flag1 = false;

        if (this.furnaceBurnTime > 0)
        {
            --this.furnaceBurnTime;
        }

        if (!this.worldObj.isRemote)
        {
            if (this.furnaceBurnTime == 0 && this.canSmelt())
            {
                this.currentItemBurnTime = this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);

                if (this.furnaceBurnTime > 0)
                {
                    flag1 = true;

                    if (this.furnaceItemStacks[1] != null)
                    {
                        --this.furnaceItemStacks[1].stackSize;

                        if (this.furnaceItemStacks[1].stackSize == 0)
                        {
                            this.furnaceItemStacks[1] = this.furnaceItemStacks[1].getItem().getContainerItemStack(furnaceItemStacks[1]);
                        }
                    }
                }
            }

            if (this.isBurning() && this.canSmelt())
            {
                ++this.furnaceCookTime;

                if (this.furnaceCookTime == 200)
                {
                    this.furnaceCookTime = 0;
                    this.smeltItem();
                    flag1 = true;
                }
            }
            else
            {
                this.furnaceCookTime = 0;
            }

            if (flag != this.furnaceBurnTime > 0)
            {
                flag1 = true;
                Liquefier.updateFurnaceBlockState(this.furnaceBurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
            }
        }

        if (flag1)
        {
            this.onInventoryChanged();
        }
    }

    /**
     * Returns true if the furnace can smelt an item, i.e. has a source item, destination stack isn't full, etc.
     */
    private boolean canSmelt()
    {
        if (this.furnaceItemStacks[0] == null)
        {
            return false;
        }
        else
        {
            ItemStack itemstack = RecipesLiquefier.smelting().getSmeltingResult(this.furnaceItemStacks[0]);
            if (itemstack == null) return false;
            if (this.furnaceItemStacks[2] == null) return true;
            if (!this.furnaceItemStacks[2].isItemEqual(itemstack)) return false;
            int result = furnaceItemStacks[2].stackSize + itemstack.stackSize;
            return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
        }
    }

    /**
     * Turn one item from the furnace source stack into the appropriate smelted item in the furnace result stack
     */
    public void smeltItem()
    {
        if (this.canSmelt())
        {
            ItemStack itemstack = RecipesLiquefier.smelting().getSmeltingResult(this.furnaceItemStacks[0]);

            if (this.furnaceItemStacks[2] == null)
            {
                this.furnaceItemStacks[2] = itemstack.copy();
            }
            else if (this.furnaceItemStacks[2].isItemEqual(itemstack))
            {
                furnaceItemStacks[2].stackSize += itemstack.stackSize;
            }

            --this.furnaceItemStacks[0].stackSize;

            if (this.furnaceItemStacks[0].stackSize <= 0)
            {
                this.furnaceItemStacks[0] = null;
            }
        }
    }

    /**
     * Returns the number of ticks that the supplied fuel item will keep the furnace burning, or 0 if the item isn't
     * fuel
     */
    public static int getItemBurnTime(ItemStack par0ItemStack)
    {
        if (par0ItemStack == null)
        {
            return 0;
        }
        else
        {
            int i = par0ItemStack.getItem().itemID;
            Item item = par0ItemStack.getItem();

            if (par0ItemStack.getItem() instanceof ItemBlock && Block.blocksList[i] != null)
            {
                Block block = Block.blocksList[i];

                if (block == Block.woodSingleSlab)
                {
                    return 150;
                }

                if (block.blockMaterial == Material.wood)
                {
                    return 300;
                }
            }

            if (item instanceof ItemTool && ((ItemTool) item).getToolMaterialName().equals("WOOD")) return 200;
            if (item instanceof ItemSword && ((ItemSword) item).getToolMaterialName().equals("WOOD")) return 200;
            if (item instanceof ItemHoe && ((ItemHoe) item).getMaterialName().equals("WOOD")) return 200;
            if (i == Item.stick.itemID) return 100;
            if (i == Item.coal.itemID) return 1600;
            if (i == Item.bucketLava.itemID) return 20000;
            if (i == Block.sapling.blockID) return 100;
            if (i == Item.blazeRod.itemID) return 2400;
            return GameRegistry.getFuelValue(par0ItemStack);
        }
    }

    /**
     * Return true if item is a fuel source (getItemBurnTime() > 0).
     */
    public static boolean isItemFuel(ItemStack par0ItemStack)
    {
        return getItemBurnTime(par0ItemStack) > 0;
    }

    /**
     * Do not make give this method the name canInteractWith because it clashes with Container
     */
    public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)
    {
        return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;
    }

    public void openChest() {}

    public void closeChest() {}

    /**
     * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot.
     */
    public boolean isStackValidForSlot(int par1, ItemStack par2ItemStack)
    {
        return par1 == 2 ? false : (par1 == 1 ? isItemFuel(par2ItemStack) : true);
    }

    /**
     * Returns an array containing the indices of the slots that can be accessed by automation on the given side of this
     * block.
     */
    public int[] getAccessibleSlotsFromSide(int par1)
    {
        return par1 == 0 ? field_102011_e : (par1 == 1 ? field_102010_d : field_102009_f);
    }

    /**
     * Returns true if automation can insert the given item in the given slot from the given side. Args: Slot, item,
     * side
     */
    public boolean canInsertItem(int par1, ItemStack par2ItemStack, int par3)
    {
        return this.isStackValidForSlot(par1, par2ItemStack);
    }

    /**
     * Returns true if automation can extract the given item in the given slot from the given side. Args: Slot, item,
     * side
     */
    public boolean canExtractItem(int par1, ItemStack par2ItemStack, int par3)
    {
        return par3 != 0 || par1 != 1 || par2ItemStack.itemID == Item.bucketEmpty.itemID;
    }

    /***********************************************************************************
     * This function is here for compatibilities sake, Modders should Check for
     * Sided before ContainerWorldly, Vanilla Minecraft does not follow the sided standard
     * that Modding has for a while.
     *
     * In vanilla:
     *
     *   Top: Ores
     *   Sides: Fuel
     *   Bottom: Output
     *
     * Standard Modding:
     *   Top: Ores
     *   Sides: Output
     *   Bottom: Fuel
     *
     * The Modding one is designed after the GUI, the vanilla one is designed because its
     * intended use is for the hopper, which logically would take things in from the top.
     *
     * This will possibly be removed in future updates, and make vanilla the definitive
     * standard.
     */

    @Override
    public int getStartInventorySide(ForgeDirection side)
    {
        if (ForgeDummyContainer.legacyFurnaceSides)
        {
            if (side == ForgeDirection.DOWN) return 1;
            if (side == ForgeDirection.UP) return 0;
            return 2;
        }
        else
        {
            if (side == ForgeDirection.DOWN) return 2;
            if (side == ForgeDirection.UP) return 0;
            return 1;
        }
    }

    @Override
    public int getSizeInventorySide(ForgeDirection side)
    {
        return 1;
    }
}

ContainerLiquefier

package TechCraft;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import TechCraft.RecipesLiquefier;
import TechCraft.TileEntityLiquefier;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class ContainerLiquefier extends Container
{
    private TileEntityLiquefier furnace;
    private int lastCookTime = 0;
    private int lastBurnTime = 0;
    private int lastItemBurnTime = 0;

    public ContainerLiquefier(InventoryPlayer par1InventoryPlayer, TileEntityLiquefier par2TileEntityFurnace)
    {
        this.furnace = par2TileEntityFurnace;
        this.addSlotToContainer(new Slot(par2TileEntityFurnace, 0, 56, 17));
        this.addSlotToContainer(new Slot(par2TileEntityFurnace, 1, 56, 53));
        this.addSlotToContainer(new SlotLiquefier(par1InventoryPlayer.player, par2TileEntityFurnace, 2, 116, 35));
        int i;

        for (i = 0; i < 3; ++i)
        {
            for (int j = 0; j < 9; ++j)
            {
                this.addSlotToContainer(new Slot(par1InventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
            }
        }

        for (i = 0; i < 9; ++i)
        {
            this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + i * 18, 142));
        }
    }

    public void addCraftingToCrafters(ICrafting par1ICrafting)
    {
        super.addCraftingToCrafters(par1ICrafting);
        par1ICrafting.sendProgressBarUpdate(this, 0, this.furnace.furnaceCookTime);
        par1ICrafting.sendProgressBarUpdate(this, 1, this.furnace.furnaceBurnTime);
        par1ICrafting.sendProgressBarUpdate(this, 2, this.furnace.currentItemBurnTime);
    }

    /**
     * Looks for changes made in the container, sends them to every listener.
     */
    public void detectAndSendChanges()
    {
        super.detectAndSendChanges();

        for (int i = 0; i < this.crafters.size(); ++i)
        {
            ICrafting icrafting = (ICrafting)this.crafters.get(i);

            if (this.lastCookTime != this.furnace.furnaceCookTime)
            {
                icrafting.sendProgressBarUpdate(this, 0, this.furnace.furnaceCookTime);
            }

            if (this.lastBurnTime != this.furnace.furnaceBurnTime)
            {
                icrafting.sendProgressBarUpdate(this, 1, this.furnace.furnaceBurnTime);
            }

            if (this.lastItemBurnTime != this.furnace.currentItemBurnTime)
            {
                icrafting.sendProgressBarUpdate(this, 2, this.furnace.currentItemBurnTime);
            }
        }

        this.lastCookTime = this.furnace.furnaceCookTime;
        this.lastBurnTime = this.furnace.furnaceBurnTime;
        this.lastItemBurnTime = this.furnace.currentItemBurnTime;
    }

    @SideOnly(Side.CLIENT)
    public void updateProgressBar(int par1, int par2)
    {
        if (par1 == 0)
        {
            this.furnace.furnaceCookTime = par2;
        }

        if (par1 == 1)
        {
            this.furnace.furnaceBurnTime = par2;
        }

        if (par1 == 2)
        {
            this.furnace.currentItemBurnTime = par2;
        }
    }

    public boolean canInteractWith(EntityPlayer par1EntityPlayer)
    {
        return this.furnace.isUseableByPlayer(par1EntityPlayer);
    }

    /**
     * Called when a player shift-clicks on a slot. You must override this or you will crash when someone does that.
     */
    public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2)
    {
        ItemStack itemstack = null;
        Slot slot = (Slot)this.inventorySlots.get(par2);

        if (slot != null && slot.getHasStack())
        {
            ItemStack itemstack1 = slot.getStack();
            itemstack = itemstack1.copy();

            if (par2 == 2)
            {
                if (!this.mergeItemStack(itemstack1, 3, 39, true))
                {
                    return null;
                }

                slot.onSlotChange(itemstack1, itemstack);
            }
            else if (par2 != 1 && par2 != 0)
            {
                if (RecipesLiquefier.smelting().getSmeltingResult(itemstack1) != null)
                {
                    if (!this.mergeItemStack(itemstack1, 0, 1, false))
                    {
                        return null;
                    }
                }
                else if (TileEntityLiquefier.isItemFuel(itemstack1))
                {
                    if (!this.mergeItemStack(itemstack1, 1, 2, false))
                    {
                        return null;
                    }
                }
                else if (par2 >= 3 && par2 < 30)
                {
                    if (!this.mergeItemStack(itemstack1, 30, 39, false))
                    {
                        return null;
                    }
                }
                else if (par2 >= 30 && par2 < 39 && !this.mergeItemStack(itemstack1, 3, 30, false))
                {
                    return null;
                }
            }
            else if (!this.mergeItemStack(itemstack1, 3, 39, false))
            {
                return null;
            }

            if (itemstack1.stackSize == 0)
            {
                slot.putStack((ItemStack)null);
            }
            else
            {
                slot.onSlotChanged();
            }

            if (itemstack1.stackSize == itemstack.stackSize)
            {
                return null;
            }

            slot.onPickupFromSlot(par1EntityPlayer, itemstack1);
        }

        return itemstack;
    }
}

GuiLiquefier

package TechCraft;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
import TechCraft.ContainerLiquefier;
import TechCraft.TileEntityLiquefier;
import net.minecraft.util.StatCollector;

import org.lwjgl.opengl.GL11;

@SideOnly(Side.CLIENT)
public class GuiLiquefier extends GuiContainer
{
    private TileEntityLiquefier furnaceInventory;

    public GuiLiquefier(InventoryPlayer par1InventoryPlayer, TileEntityLiquefier par2TileEntityFurnace)
    {
        super(new ContainerLiquefier(par1InventoryPlayer, par2TileEntityFurnace));
        this.furnaceInventory = par2TileEntityFurnace;
    }

    /**
     * Draw the foreground layer for the GuiContainer (everything in front of the items)
     */
    protected void drawGuiContainerForegroundLayer(int par1, int par2)
    {
        String s = this.furnaceInventory.isInvNameLocalized() ? this.furnaceInventory.getInvName() : StatCollector.translateToLocal("Liquefier");
        this.fontRenderer.drawString(s, this.xSize / 2 - this.fontRenderer.getStringWidth(s) / 2, 6, 4210752);
        this.fontRenderer.drawString(StatCollector.translateToLocal("Inventory"), 8, this.ySize - 96 + 2, 4210752);
    }

    /**
     * Draw the background layer for the GuiContainer (everything behind the items)
     */
    protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
    {
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        this.mc.renderEngine.bindTexture("/gui/furnace.png");
        int k = (this.width - this.xSize) / 2;
        int l = (this.height - this.ySize) / 2;
        this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
        int i1;

        if (this.furnaceInventory.isBurning())
        {
            i1 = this.furnaceInventory.getBurnTimeRemainingScaled(12);
            this.drawTexturedModalRect(k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 2);
        }

        i1 = this.furnaceInventory.getCookProgressScaled(24);
        this.drawTexturedModalRect(k + 79, l + 34, 176, 14, i1 + 1, 16);
    }
}

SlotLiquefier

package TechCraft;

import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import TechCraft.RecipesLiquefier;
import net.minecraft.stats.AchievementList;
import net.minecraft.util.MathHelper;

public class SlotLiquefier extends Slot
{
    /** The player that is using the GUI where this slot resides. */
    private EntityPlayer thePlayer;
    private int field_75228_b;

    public SlotLiquefier(EntityPlayer par1EntityPlayer, IInventory par2IInventory, int par3, int par4, int par5)
    {
        super(par2IInventory, par3, par4, par5);
        this.thePlayer = par1EntityPlayer;
    }

    /**
     * Check if the stack is a valid item for this slot. Always true beside for the armor slots.
     */
    public boolean isItemValid(ItemStack par1ItemStack)
    {
        return false;
    }

    /**
     * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new
     * stack.
     */
    public ItemStack decrStackSize(int par1)
    {
        if (this.getHasStack())
        {
            this.field_75228_b += Math.min(par1, this.getStack().stackSize);
        }

        return super.decrStackSize(par1);
    }

    public void onPickupFromSlot(EntityPlayer par1EntityPlayer, ItemStack par2ItemStack)
    {
        this.onCrafting(par2ItemStack);
        super.onPickupFromSlot(par1EntityPlayer, par2ItemStack);
    }

    /**
     * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an
     * internal count then calls onCrafting(item).
     */
    protected void onCrafting(ItemStack par1ItemStack, int par2)
    {
        this.field_75228_b += par2;
        this.onCrafting(par1ItemStack);
    }

    /**
     * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood.
     */
    protected void onCrafting(ItemStack par1ItemStack)
    {
        par1ItemStack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_75228_b);

        if (!this.thePlayer.worldObj.isRemote)
        {
            int i = this.field_75228_b;
            float f = RecipesLiquefier.smelting().getExperience(par1ItemStack);
            int j;

            if (f == 0.0F)
            {
                i = 0;
            }
            else if (f < 1.0F)
            {
                j = MathHelper.floor_float((float)i * f);

                if (j < MathHelper.ceiling_float_int((float)i * f) && (float)Math.random() < (float)i * f - (float)j)
                {
                    ++j;
                }

                i = j;
            }

            while (i > 0)
            {
                j = EntityXPOrb.getXPSplit(i);
                i -= j;
                this.thePlayer.worldObj.spawnEntityInWorld(new EntityXPOrb(this.thePlayer.worldObj, this.thePlayer.posX, this.thePlayer.posY + 0.5D, this.thePlayer.posZ + 0.5D, j));
            }
        }

        this.field_75228_b = 0;

        GameRegistry.onItemSmelted(thePlayer, par1ItemStack);

        if (par1ItemStack.itemID == Item.ingotIron.itemID)
        {
            this.thePlayer.addStat(AchievementList.acquireIron, 1);
        }

        if (par1ItemStack.itemID == Item.fishCooked.itemID)
        {
            this.thePlayer.addStat(AchievementList.cookFish, 1);
        }
    }
}

GuiHandler

package TechCraft;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import TechCraft.*;
import cpw.mods.fml.common.network.IGuiHandler;
import cpw.mods.fml.common.network.NetworkRegistry;

public class GuiHandler implements IGuiHandler {
public GuiHandler() {
NetworkRegistry.instance().registerGuiHandler(Core.instance, this);
}

@Override
public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) {
TileEntity entity = world.getBlockTileEntity(x, y, z);

switch(id) {
case 0:
return new ContainerCooler(player.inventory, (TileEntityCooler) entity);
case 1:

return new ContainerLiquefier(player.inventory, (TileEntityLiquefier) entity);
}
return null;

}

@Override
public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) {
TileEntity entity = world.getBlockTileEntity(x, y, z);

switch(id) {
case 0:
return new GuiCooler(player.inventory, (TileEntityCooler) entity);

case 1:

return new GuiLiquefier(player.inventory, (TileEntityLiquefier) entity);

}
return null;
}
}

Cooler

package TechCraft;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import TechCraft.TileEntityCooler;
import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class Cooler extends BlockContainer
{
    /**
     * Is the random generator used by furnace to drop the inventory contents in random directions.
     */
    private final Random furnaceRand = new Random();

    /** True if this is an active furnace, false if idle */
    private final boolean isActive;

    /**
     * This flag is used to prevent the furnace inventory to be dropped upon block removal, is used internally when the
     * furnace block changes from idle to active and vice-versa.
     */
    private static boolean keepFurnaceInventory = false;
    @SideOnly(Side.CLIENT)
    private Icon furnaceIconTop;
    @SideOnly(Side.CLIENT)
    private Icon furnaceIconFront;

    protected Cooler(int par1, boolean par2)
    {
        super(par1, Material.rock);
        this.isActive = par2;
    }

    /**
     * Returns the ID of the items to drop on destruction.
     */
    public int idDropped(int par1, Random par2Random, int par3)
    {
        return Core.coolerIdle.blockID;
    }

    /**
     * Called whenever the block is added into the world. Args: world, x, y, z
     */
    public void onBlockAdded(World par1World, int par2, int par3, int par4)
    {
        super.onBlockAdded(par1World, par2, par3, par4);
        this.setDefaultDirection(par1World, par2, par3, par4);
    }

    /**
     * set a blocks direction
     */
    private void setDefaultDirection(World par1World, int par2, int par3, int par4)
    {
        if (!par1World.isRemote)
        {
            int l = par1World.getBlockId(par2, par3, par4 - 1);
            int i1 = par1World.getBlockId(par2, par3, par4 + 1);
            int j1 = par1World.getBlockId(par2 - 1, par3, par4);
            int k1 = par1World.getBlockId(par2 + 1, par3, par4);
            byte b0 = 3;

            if (Block.opaqueCubeLookup[l] && !Block.opaqueCubeLookup[i1])
            {
                b0 = 3;
            }

            if (Block.opaqueCubeLookup[i1] && !Block.opaqueCubeLookup[l])
            {
                b0 = 2;
            }

            if (Block.opaqueCubeLookup[j1] && !Block.opaqueCubeLookup[k1])
            {
                b0 = 5;
            }

            if (Block.opaqueCubeLookup[k1] && !Block.opaqueCubeLookup[j1])
            {
                b0 = 4;
            }

            par1World.setBlockMetadataWithNotify(par2, par3, par4, b0, 2);
        }
    }

    @SideOnly(Side.CLIENT)

    /**
     * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
     */
    public Icon getIcon(int par1, int par2)
    {
        return par1 == 1 ? this.furnaceIconTop : (par1 == 0 ? this.furnaceIconTop : (par1 != par2 ? this.blockIcon : this.furnaceIconFront));
    }

    @SideOnly(Side.CLIENT)

    /**
     * When this method is called, your block should register all the icons it needs with the given IconRegister. This
     * is the only chance you get to register icons.
     */
    public void registerIcons(IconRegister par1IconRegister)
    {
        this.blockIcon = par1IconRegister.registerIcon("TechCraft:machine_side");
        this.furnaceIconFront = par1IconRegister.registerIcon(this.isActive ? "TechCraft:machine_front_frost" : "TechCraft:machine_front");
        this.furnaceIconTop = par1IconRegister.registerIcon("TechCraft:machine_top");
    }

    /**
     * Called upon block activation (right click on the block.)
     */
    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer player, int par6, float par7, float par8, float par9)
    {
        if (par1World.isRemote)
        {
            return true;
        }
        else
        {
            TileEntityCooler tileentityfurnace = (TileEntityCooler)par1World.getBlockTileEntity(par2, par3, par4);

            if (tileentityfurnace != null)
            {
            	player.openGui(Core.instance, 0, par1World, par2, par3, par4);
            }

            return true;
        }
    }

    /**
     * Update which block ID the furnace is using depending on whether or not it is burning
     */
    public static void updateFurnaceBlockState(boolean par0, World par1World, int par2, int par3, int par4)
    {
        int l = par1World.getBlockMetadata(par2, par3, par4);
        TileEntity tileentity = par1World.getBlockTileEntity(par2, par3, par4);
        keepFurnaceInventory = true;

        if (par0)
        {
            par1World.setBlock(par2, par3, par4, Core.coolerActive.blockID);
        }
        else
        {
            par1World.setBlock(par2, par3, par4, Core.coolerIdle.blockID);
        }

        keepFurnaceInventory = false;
        par1World.setBlockMetadataWithNotify(par2, par3, par4, l, 2);

        if (tileentity != null)
        {
            tileentity.validate();
            par1World.setBlockTileEntity(par2, par3, par4, tileentity);
        }
    }

    @SideOnly(Side.CLIENT)

    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
        if (this.isActive)
        {
            int l = par1World.getBlockMetadata(par2, par3, par4);
            float f = (float)par2 + 0.5F;
            float f1 = (float)par3 + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F;
            float f2 = (float)par4 + 0.5F;
            float f3 = 0.52F;
            float f4 = par5Random.nextFloat() * 0.6F - 0.3F;

            
        }
    }

    /**
     * Returns a new instance of a block's tile entity class. Called on placing the block.
     */
    public TileEntity createNewTileEntity(World par1World)
    {
        return new TileEntityCooler();
    }

    /**
     * Called when the block is placed in the world.
     */
    public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving, ItemStack par6ItemStack)
    {
        int l = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;

        if (l == 0)
        {
            par1World.setBlockMetadataWithNotify(par2, par3, par4, 2, 2);
        }

        if (l == 1)
        {
            par1World.setBlockMetadataWithNotify(par2, par3, par4, 5, 2);
        }

        if (l == 2)
        {
            par1World.setBlockMetadataWithNotify(par2, par3, par4, 3, 2);
        }

        if (l == 3)
        {
            par1World.setBlockMetadataWithNotify(par2, par3, par4, 4, 2);
        }

        if (par6ItemStack.hasDisplayName())
        {
            ((TileEntityCooler)par1World.getBlockTileEntity(par2, par3, par4)).func_94129_a(par6ItemStack.getDisplayName());
        }
    }

    /**
     * ejects contained items into the world, and notifies neighbours of an update, as appropriate
     */
    public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6)
    {
        if (!keepFurnaceInventory)
        {
            TileEntityCooler tileentityfurnace = (TileEntityCooler)par1World.getBlockTileEntity(par2, par3, par4);

            if (tileentityfurnace != null)
            {
                for (int j1 = 0; j1 < tileentityfurnace.getSizeInventory(); ++j1)
                {
                    ItemStack itemstack = tileentityfurnace.getStackInSlot(j1);

                    if (itemstack != null)
                    {
                        float f = this.furnaceRand.nextFloat() * 0.8F + 0.1F;
                        float f1 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;
                        float f2 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;

                        while (itemstack.stackSize > 0)
                        {
                            int k1 = this.furnaceRand.nextInt(21) + 10;

                            if (k1 > itemstack.stackSize)
                            {
                                k1 = itemstack.stackSize;
                            }

                            itemstack.stackSize -= k1;
                            EntityItem entityitem = new EntityItem(par1World, (double)((float)par2 + f), (double)((float)par3 + f1), (double)((float)par4 + f2), new ItemStack(itemstack.itemID, k1, itemstack.getItemDamage()));

                            if (itemstack.hasTagCompound())
                            {
                                entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
                            }

                            float f3 = 0.05F;
                            entityitem.motionX = (double)((float)this.furnaceRand.nextGaussian() * f3);
                            entityitem.motionY = (double)((float)this.furnaceRand.nextGaussian() * f3 + 0.2F);
                            entityitem.motionZ = (double)((float)this.furnaceRand.nextGaussian() * f3);
                            par1World.spawnEntityInWorld(entityitem);
                        }
                    }
                }

                par1World.func_96440_m(par2, par3, par4, par5);
            }
        }

        super.breakBlock(par1World, par2, par3, par4, par5, par6);
    }

    /**
     * If this returns true, then comparators facing away from this block will use the value from
     * getComparatorInputOverride instead of the actual redstone signal strength.
     */
    public boolean hasComparatorInputOverride()
    {
        return true;
    }

    /**
     * If hasComparatorInputOverride returns true, the return value from this is used instead of the redstone signal
     * strength when this block inputs to a comparator.
     */
    public int getComparatorInputOverride(World par1World, int par2, int par3, int par4, int par5)
    {
        return Container.calcRedstoneFromInventory((IInventory)par1World.getBlockTileEntity(par2, par3, par4));
    }

    @SideOnly(Side.CLIENT)

    /**
     * only called by clickMiddleMouseButton , and passed to inventory.setCurrentItem (along with isCreative)
     */
    public int idPicked(World par1World, int par2, int par3, int par4)
    {
        return Core.coolerIdle.blockID;
    }
}

TileEntityCooler

package TechCraft;

import net.minecraft.block.Block;
import TechCraft.Cooler;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemHoe;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.item.ItemTool;
import TechCraft.RecipesCooler;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.ForgeDummyContainer;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class TileEntityCooler extends TileEntity implements ISidedInventory, net.minecraftforge.common.ISidedInventory
{
    private static final int[] field_102010_d = new int[] {0};
    private static final int[] field_102011_e = new int[] {2, 1};
    private static final int[] field_102009_f = new int[] {1};

    /**
     * The ItemStacks that hold the items currently being used in the furnace
     */
    private ItemStack[] furnaceItemStacks = new ItemStack[3];

    /** The number of ticks that the furnace will keep burning */
    public int coolerFrostTime = 0;

    /**
     * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for
     */
    public int currentItemBurnTime = 0;

    /** The number of ticks that the current item has been cooking for */
    public int furnaceCookTime = 0;
    private String field_94130_e;

    /**
     * Returns the number of slots in the inventory.
     */
    public int getSizeInventory()
    {
        return this.furnaceItemStacks.length;
    }

    /**
     * Returns the stack in slot i
     */
    public ItemStack getStackInSlot(int par1)
    {
        return this.furnaceItemStacks[par1];
    }

    /**
     * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a
     * new stack.
     */
    public ItemStack decrStackSize(int par1, int par2)
    {
        if (this.furnaceItemStacks[par1] != null)
        {
            ItemStack itemstack;

            if (this.furnaceItemStacks[par1].stackSize <= par2)
            {
                itemstack = this.furnaceItemStacks[par1];
                this.furnaceItemStacks[par1] = null;
                return itemstack;
            }
            else
            {
                itemstack = this.furnaceItemStacks[par1].splitStack(par2);

                if (this.furnaceItemStacks[par1].stackSize == 0)
                {
                    this.furnaceItemStacks[par1] = null;
                }

                return itemstack;
            }
        }
        else
        {
            return null;
        }
    }

    /**
     * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem -
     * like when you close a workbench GUI.
     */
    public ItemStack getStackInSlotOnClosing(int par1)
    {
        if (this.furnaceItemStacks[par1] != null)
        {
            ItemStack itemstack = this.furnaceItemStacks[par1];
            this.furnaceItemStacks[par1] = null;
            return itemstack;
        }
        else
        {
            return null;
        }
    }

    /**
     * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections).
     */
    public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
    {
        this.furnaceItemStacks[par1] = par2ItemStack;

        if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit())
        {
            par2ItemStack.stackSize = this.getInventoryStackLimit();
        }
    }

    /**
     * Returns the name of the inventory.
     */
    public String getInvName()
    {
        return this.isInvNameLocalized() ? this.field_94130_e : "container.furnace";
    }

    /**
     * If this returns false, the inventory name will be used as an unlocalized name, and translated into the player's
     * language. Otherwise it will be used directly.
     */
    public boolean isInvNameLocalized()
    {
        return this.field_94130_e != null && this.field_94130_e.length() > 0;
    }

    public void func_94129_a(String par1Str)
    {
        this.field_94130_e = par1Str;
    }

    /**
     * Reads a tile entity from NBT.
     */
    public void readFromNBT(NBTTagCompound par1NBTTagCompound)
    {
        super.readFromNBT(par1NBTTagCompound);
        NBTTagList nbttaglist = par1NBTTagCompound.getTagList("Items");
        this.furnaceItemStacks = new ItemStack[this.getSizeInventory()];

        for (int i = 0; i < nbttaglist.tagCount(); ++i)
        {
            NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttaglist.tagAt(i);
            byte b0 = nbttagcompound1.getByte("Slot");

            if (b0 >= 0 && b0 < this.furnaceItemStacks.length)
            {
                this.furnaceItemStacks[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
            }
        }

        this.coolerFrostTime = par1NBTTagCompound.getShort("BurnTime");
        this.furnaceCookTime = par1NBTTagCompound.getShort("CookTime");
        this.currentItemBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);

        if (par1NBTTagCompound.hasKey("CustomName"))
        {
            this.field_94130_e = par1NBTTagCompound.getString("CustomName");
        }
    }

    /**
     * Writes a tile entity to NBT.
     */
    public void writeToNBT(NBTTagCompound par1NBTTagCompound)
    {
        super.writeToNBT(par1NBTTagCompound);
        par1NBTTagCompound.setShort("BurnTime", (short)this.coolerFrostTime);
        par1NBTTagCompound.setShort("CookTime", (short)this.furnaceCookTime);
        NBTTagList nbttaglist = new NBTTagList();

        for (int i = 0; i < this.furnaceItemStacks.length; ++i)
        {
            if (this.furnaceItemStacks[i] != null)
            {
                NBTTagCompound nbttagcompound1 = new NBTTagCompound();
                nbttagcompound1.setByte("Slot", (byte)i);
                this.furnaceItemStacks[i].writeToNBT(nbttagcompound1);
                nbttaglist.appendTag(nbttagcompound1);
            }
        }

        par1NBTTagCompound.setTag("Items", nbttaglist);

        if (this.isInvNameLocalized())
        {
            par1NBTTagCompound.setString("CustomName", this.field_94130_e);
        }
    }

    /**
     * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't
     * this more of a set than a get?*
     */
    public int getInventoryStackLimit()
    {
        return 64;
    }

    @SideOnly(Side.CLIENT)

    /**
     * Returns an integer between 0 and the passed value representing how close the current item is to being completely
     * cooked
     */
    public int getCookProgressScaled(int par1)
    {
        return this.furnaceCookTime * par1 / 200;
    }

    @SideOnly(Side.CLIENT)

    /**
     * Returns an integer between 0 and the passed value representing how much burn time is left on the current fuel
     * item, where 0 means that the item is exhausted and the passed value means that the item is fresh
     */
    public int getBurnTimeRemainingScaled(int par1)
    {
        if (this.currentItemBurnTime == 0)
        {
            this.currentItemBurnTime = 200;
        }

        return this.coolerFrostTime * par1 / this.currentItemBurnTime;
    }

    /**
     * Returns true if the furnace is currently burning
     */
    public boolean isBurning()
    {
        return this.coolerFrostTime > 0;
    }

    /**
     * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count
     * ticks and creates a new spawn inside its implementation.
     */
    public void updateEntity()
    {
        boolean flag = this.coolerFrostTime > 0;
        boolean flag1 = false;

        if (this.coolerFrostTime > 0)
        {
            --this.coolerFrostTime;
        }

        if (!this.worldObj.isRemote)
        {
            if (this.coolerFrostTime == 0 && this.canSmelt())
            {
                this.currentItemBurnTime = this.coolerFrostTime = getItemBurnTime(this.furnaceItemStacks[1]);

                if (this.coolerFrostTime > 0)
                {
                    flag1 = true;

                    if (this.furnaceItemStacks[1] != null)
                    {
                        --this.furnaceItemStacks[1].stackSize;

                        if (this.furnaceItemStacks[1].stackSize == 0)
                        {
                            this.furnaceItemStacks[1] = this.furnaceItemStacks[1].getItem().getContainerItemStack(furnaceItemStacks[1]);
                        }
                    }
                }
            }

            if (this.isBurning() && this.canSmelt())
            {
                ++this.furnaceCookTime;

                if (this.furnaceCookTime == 200)
                {
                    this.furnaceCookTime = 0;
                    this.smeltItem();
                    flag1 = true;
                }
            }
            else
            {
                this.furnaceCookTime = 0;
            }

            if (flag != this.coolerFrostTime > 0)
            {
                flag1 = true;
                Cooler.updateFurnaceBlockState(this.coolerFrostTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
            }
        }

        if (flag1)
        {
            this.onInventoryChanged();
        }
    }

    /**
     * Returns true if the furnace can smelt an item, i.e. has a source item, destination stack isn't full, etc.
     */
    private boolean canSmelt()
    {
        if (this.furnaceItemStacks[0] == null)
        {
            return false;
        }
        else
        {
            ItemStack itemstack = RecipesCooler.smelting().getSmeltingResult(this.furnaceItemStacks[0]);
            if (itemstack == null) return false;
            if (this.furnaceItemStacks[2] == null) return true;
            if (!this.furnaceItemStacks[2].isItemEqual(itemstack)) return false;
            int result = furnaceItemStacks[2].stackSize + itemstack.stackSize;
            return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
        }
    }

    /**
     * Turn one item from the furnace source stack into the appropriate smelted item in the furnace result stack
     */
    public void smeltItem()
    {
        if (this.canSmelt())
        {
            ItemStack itemstack = RecipesCooler.smelting().getSmeltingResult(this.furnaceItemStacks[0]);

            if (this.furnaceItemStacks[2] == null)
            {
                this.furnaceItemStacks[2] = itemstack.copy();
            }
            else if (this.furnaceItemStacks[2].isItemEqual(itemstack))
            {
                furnaceItemStacks[2].stackSize += itemstack.stackSize;
            }

            --this.furnaceItemStacks[0].stackSize;

            if (this.furnaceItemStacks[0].stackSize <= 0)
            {
                this.furnaceItemStacks[0] = null;
            }
        }
    }

    /**
     * Returns the number of ticks that the supplied fuel item will keep the furnace burning, or 0 if the item isn't
     * fuel
     */
    public static int getItemBurnTime(ItemStack par0ItemStack)
    {
        if (par0ItemStack == null)
        {
            return 0;
        }
        else
        {
            int i = par0ItemStack.getItem().itemID;
            Item item = par0ItemStack.getItem();

            if (par0ItemStack.getItem() instanceof ItemBlock && Block.blocksList[i] != null)
            {
                Block block = Block.blocksList[i];

                if (block == Block.woodSingleSlab)
                {
                    return 150;
                }

                if (block.blockMaterial == Material.wood)
                {
                    return 300;
                }
            }

            if (item instanceof ItemTool && ((ItemTool) item).getToolMaterialName().equals("WOOD")) return 200;
            if (item instanceof ItemSword && ((ItemSword) item).getToolMaterialName().equals("WOOD")) return 200;
            if (item instanceof ItemHoe && ((ItemHoe) item).getMaterialName().equals("WOOD")) return 200;
            if (i == Item.stick.itemID) return 100;
            if (i == Item.coal.itemID) return 1600;
            if (i == Item.bucketLava.itemID) return 20000;
            if (i == Block.sapling.blockID) return 100;
            if (i == Item.blazeRod.itemID) return 2400;
            return GameRegistry.getFuelValue(par0ItemStack);
        }
    }

    /**
     * Return true if item is a fuel source (getItemBurnTime() > 0).
     */
    public static boolean isItemFuel(ItemStack par0ItemStack)
    {
        return getItemBurnTime(par0ItemStack) > 0;
    }

    /**
     * Do not make give this method the name canInteractWith because it clashes with Container
     */
    public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)
    {
        return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;
    }

    public void openChest() {}

    public void closeChest() {}

    /**
     * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot.
     */
    public boolean isStackValidForSlot(int par1, ItemStack par2ItemStack)
    {
        return par1 == 2 ? false : (par1 == 1 ? isItemFuel(par2ItemStack) : true);
    }

    /**
     * Returns an array containing the indices of the slots that can be accessed by automation on the given side of this
     * block.
     */
    public int[] getAccessibleSlotsFromSide(int par1)
    {
        return par1 == 0 ? field_102011_e : (par1 == 1 ? field_102010_d : field_102009_f);
    }

    /**
     * Returns true if automation can insert the given item in the given slot from the given side. Args: Slot, item,
     * side
     */
    public boolean canInsertItem(int par1, ItemStack par2ItemStack, int par3)
    {
        return this.isStackValidForSlot(par1, par2ItemStack);
    }

    /**
     * Returns true if automation can extract the given item in the given slot from the given side. Args: Slot, item,
     * side
     */
    public boolean canExtractItem(int par1, ItemStack par2ItemStack, int par3)
    {
        return par3 != 0 || par1 != 1 || par2ItemStack.itemID == Item.bucketEmpty.itemID;
    }

    /***********************************************************************************
     * This function is here for compatibilities sake, Modders should Check for
     * Sided before ContainerWorldly, Vanilla Minecraft does not follow the sided standard
     * that Modding has for a while.
     *
     * In vanilla:
     *
     *   Top: Ores
     *   Sides: Fuel
     *   Bottom: Output
     *
     * Standard Modding:
     *   Top: Ores
     *   Sides: Output
     *   Bottom: Fuel
     *
     * The Modding one is designed after the GUI, the vanilla one is designed because its
     * intended use is for the hopper, which logically would take things in from the top.
     *
     * This will possibly be removed in future updates, and make vanilla the definitive
     * standard.
     */

    @Override
    public int getStartInventorySide(ForgeDirection side)
    {
        if (ForgeDummyContainer.legacyFurnaceSides)
        {
            if (side == ForgeDirection.DOWN) return 1;
            if (side == ForgeDirection.UP) return 0;
            return 2;
        }
        else
        {
            if (side == ForgeDirection.DOWN) return 2;
            if (side == ForgeDirection.UP) return 0;
            return 1;
        }
    }

    @Override
    public int getSizeInventorySide(ForgeDirection side)
    {
        return 1;
    }
}

GuiCooler

package TechCraft;

import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
import TechCraft.ContainerCooler;
import TechCraft.TileEntityCooler;
import net.minecraft.util.StatCollector;

import org.lwjgl.opengl.GL11;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

@SideOnly(Side.CLIENT)
public class GuiCooler extends GuiContainer
{
    private TileEntityCooler furnaceInventory;

    public GuiCooler(InventoryPlayer par1InventoryPlayer, TileEntityCooler par2TileEntityFurnace)
    {
        super(new ContainerCooler(par1InventoryPlayer, par2TileEntityFurnace));
        this.furnaceInventory = par2TileEntityFurnace;
    }

    /**
     * Draw the foreground layer for the GuiContainer (everything in front of the items)
     */
    protected void drawGuiContainerForegroundLayer(int par1, int par2)
    {
        String s = this.furnaceInventory.isInvNameLocalized() ? this.furnaceInventory.getInvName() : StatCollector.translateToLocal("Cooler");
        this.fontRenderer.drawString(s, this.xSize / 2 - this.fontRenderer.getStringWidth(s) / 2, 6, 4210752);
        this.fontRenderer.drawString(StatCollector.translateToLocal("Inventory"), 8, this.ySize - 96 + 2, 4210752);
    }

    /**
     * Draw the background layer for the GuiContainer (everything behind the items)
     */
    protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
    {
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        this.mc.renderEngine.bindTexture("/gui/furnace.png");
        int k = (this.width - this.xSize) / 2;
        int l = (this.height - this.ySize) / 2;
        this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
        int i1;

        if (this.furnaceInventory.isBurning())
        {
            i1 = this.furnaceInventory.getBurnTimeRemainingScaled(12);
            this.drawTexturedModalRect(k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 2);
        }

        i1 = this.furnaceInventory.getCookProgressScaled(24);
        this.drawTexturedModalRect(k + 79, l + 34, 176, 14, i1 + 1, 16);
    }
}

SlotCooler

package TechCraft;

import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.AchievementList;
import net.minecraft.util.MathHelper;
import cpw.mods.fml.common.registry.GameRegistry;

public class SlotCooler extends Slot
{
    /** The player that is using the GUI where this slot resides. */
    private EntityPlayer thePlayer;
    private int field_75228_b;

    public SlotCooler(EntityPlayer par1EntityPlayer, IInventory par2IInventory, int par3, int par4, int par5)
    {
        super(par2IInventory, par3, par4, par5);
        this.thePlayer = par1EntityPlayer;
    }

    /**
     * Check if the stack is a valid item for this slot. Always true beside for the armor slots.
     */
    public boolean isItemValid(ItemStack par1ItemStack)
    {
        return false;
    }

    /**
     * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new
     * stack.
     */
    public ItemStack decrStackSize(int par1)
    {
        if (this.getHasStack())
        {
            this.field_75228_b += Math.min(par1, this.getStack().stackSize);
        }

        return super.decrStackSize(par1);
    }

    public void onPickupFromSlot(EntityPlayer par1EntityPlayer, ItemStack par2ItemStack)
    {
        this.onCrafting(par2ItemStack);
        super.onPickupFromSlot(par1EntityPlayer, par2ItemStack);
    }

    /**
     * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an
     * internal count then calls onCrafting(item).
     */
    protected void onCrafting(ItemStack par1ItemStack, int par2)
    {
        this.field_75228_b += par2;
        this.onCrafting(par1ItemStack);
    }

    /**
     * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood.
     */
    protected void onCrafting(ItemStack par1ItemStack)
    {
        par1ItemStack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_75228_b);

        if (!this.thePlayer.worldObj.isRemote)
        {
            int i = this.field_75228_b;
            float f = RecipesCooler.smelting().getExperience(par1ItemStack);
            int j;

            if (f == 0.0F)
            {
                i = 0;
            }
            else if (f < 1.0F)
            {
                j = MathHelper.floor_float((float)i * f);

                if (j < MathHelper.ceiling_float_int((float)i * f) && (float)Math.random() < (float)i * f - (float)j)
                {
                    ++j;
                }

                i = j;
            }

            while (i > 0)
            {
                j = EntityXPOrb.getXPSplit(i);
                i -= j;
                this.thePlayer.worldObj.spawnEntityInWorld(new EntityXPOrb(this.thePlayer.worldObj, this.thePlayer.posX, this.thePlayer.posY + 0.5D, this.thePlayer.posZ + 0.5D, j));
            }
        }

        this.field_75228_b = 0;

        GameRegistry.onItemSmelted(thePlayer, par1ItemStack);

        if (par1ItemStack.itemID == Item.ingotIron.itemID)
        {
            this.thePlayer.addStat(AchievementList.acquireIron, 1);
        }

        if (par1ItemStack.itemID == Item.fishCooked.itemID)
        {
            this.thePlayer.addStat(AchievementList.cookFish, 1);
        }
    }
}

ContainerCooler

package TechCraft;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import TechCraft.SlotCooler;
import net.minecraft.item.ItemStack;
import TechCraft.RecipesCooler;
import TechCraft.TileEntityCooler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class ContainerCooler extends Container
{
    private TileEntityCooler cooler;
    private int lastCoolTime = 0;
    private int lastFrostTime = 0;
    private int lastItemFrostTime = 0;

    public ContainerCooler(InventoryPlayer par1InventoryPlayer, TileEntityCooler par2TileEntityFurnace)
    {
        this.cooler = par2TileEntityFurnace;
        this.addSlotToContainer(new Slot(par2TileEntityFurnace, 0, 56, 17));
        this.addSlotToContainer(new Slot(par2TileEntityFurnace, 1, 56, 53));
        this.addSlotToContainer(new SlotCooler(par1InventoryPlayer.player, par2TileEntityFurnace, 2, 116, 35));
        int i;

        for (i = 0; i < 3; ++i)
        {
            for (int j = 0; j < 9; ++j)
            {
                this.addSlotToContainer(new Slot(par1InventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
            }
        }

        for (i = 0; i < 9; ++i)
        {
            this.addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + i * 18, 142));
        }
    }

    public void addCraftingToCrafters(ICrafting par1ICrafting)
    {
        super.addCraftingToCrafters(par1ICrafting);
        par1ICrafting.sendProgressBarUpdate(this, 0, this.cooler.furnaceCookTime);
        par1ICrafting.sendProgressBarUpdate(this, 1, this.cooler.coolerFrostTime);
        par1ICrafting.sendProgressBarUpdate(this, 2, this.cooler.currentItemBurnTime);
    }

    /**
     * Looks for changes made in the container, sends them to every listener.
     */
    public void detectAndSendChanges()
    {
        super.detectAndSendChanges();

        for (int i = 0; i < this.crafters.size(); ++i)
        {
            ICrafting icrafting = (ICrafting)this.crafters.get(i);

            if (this.lastCoolTime != this.cooler.furnaceCookTime)
            {
                icrafting.sendProgressBarUpdate(this, 0, this.cooler.furnaceCookTime);
            }

            if (this.lastFrostTime != this.cooler.coolerFrostTime)
            {
                icrafting.sendProgressBarUpdate(this, 1, this.cooler.coolerFrostTime);
            }

            if (this.lastItemFrostTime != this.cooler.currentItemBurnTime)
            {
                icrafting.sendProgressBarUpdate(this, 2, this.cooler.currentItemBurnTime);
            }
        }

        this.lastCoolTime = this.cooler.furnaceCookTime;
        this.lastFrostTime = this.cooler.coolerFrostTime;
        this.lastItemFrostTime = this.cooler.currentItemBurnTime;
    }

    @SideOnly(Side.CLIENT)
    public void updateProgressBar(int par1, int par2)
    {
        if (par1 == 0)
        {
            this.cooler.furnaceCookTime = par2;
        }

        if (par1 == 1)
        {
            this.cooler.coolerFrostTime = par2;
        }

        if (par1 == 2)
        {
            this.cooler.currentItemBurnTime = par2;
        }
    }

    public boolean canInteractWith(EntityPlayer par1EntityPlayer)
    {
        return this.cooler.isUseableByPlayer(par1EntityPlayer);
    }

    /**
     * Called when a player shift-clicks on a slot. You must override this or you will crash when someone does that.
     */
    public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2)
    {
        ItemStack itemstack = null;
        Slot slot = (Slot)this.inventorySlots.get(par2);

        if (slot != null && slot.getHasStack())
        {
            ItemStack itemstack1 = slot.getStack();
            itemstack = itemstack1.copy();

            if (par2 == 2)
            {
                if (!this.mergeItemStack(itemstack1, 3, 39, true))
                {
                    return null;
                }

                slot.onSlotChange(itemstack1, itemstack);
            }
            else if (par2 != 1 && par2 != 0)
            {
                if (RecipesCooler.smelting().getSmeltingResult(itemstack1) != null)
                {
                    if (!this.mergeItemStack(itemstack1, 0, 1, false))
                    {
                        return null;
                    }
                }
                else if (TileEntityCooler.isItemFuel(itemstack1))
                {
                    if (!this.mergeItemStack(itemstack1, 1, 2, false))
                    {
                        return null;
                    }
                }
                else if (par2 >= 3 && par2 < 30)
                {
                    if (!this.mergeItemStack(itemstack1, 30, 39, false))
                    {
                        return null;
                    }
                }
                else if (par2 >= 30 && par2 < 39 && !this.mergeItemStack(itemstack1, 3, 30, false))
                {
                    return null;
                }
            }
            else if (!this.mergeItemStack(itemstack1, 3, 39, false))
            {
                return null;
            }

            if (itemstack1.stackSize == 0)
            {
                slot.putStack((ItemStack)null);
            }
            else
            {
                slot.onSlotChanged();
            }

            if (itemstack1.stackSize == itemstack.stackSize)
            {
                return null;
            }

            slot.onPickupFromSlot(par1EntityPlayer, itemstack1);
        }

        return itemstack;
    }
}

ClientProxy

package TechCraft;

import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.common.MinecraftForge;


public class ClientProxy extends CommonProxy
{



@Override
public void registerRenderers()
{
RenderingRegistry.registerEntityRenderingHandler(EntityRDXPrimed.class, new RenderRDX());

}
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{

TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
if (tileEntity != null)
{
switch(ID)
{
case 0: /* your GUIs go here */
}
}
return tileEntity;

}
}

CommonProxy

package TechCraft;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import cpw.mods.fml.common.network.IGuiHandler;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.GameRegistry;

public class CommonProxy implements IGuiHandler
{

@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
return null;
}
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);

if(tileEntity != null)
{
switch(ID)
{
case 0: /* your Containers go here*/
}
}
return tileEntity;
}
public void registerRenderers() {
    EntityRegistry.registerGlobalEntityID(EntityRDXPrimed.class, "RDX", 180);
    EntityRegistry.registerModEntity(EntityRDXPrimed.class, "RDX", 10, Core.instance, 180, 1, false);


}
}

Please help. Any assistance will be much appreciated.

Link to comment
Share on other sites

guiid.png

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

+1 for the awesome Paint art.

 

Snip tool, actually, but it amounts to the same thing. ;)

(I love the Windows Vista/7 snip tool.  *Drool*)

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Thanks but now it returns the error "A mod tried to open a gui without being a NetworkMod"

 

Good thing you solved it, as that error is woefully inadequate, as there are something like FIVE different problems that will generate that error.  I had the misfortune of having the most uncommon one when I was doing my gui container.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Thanks but now it returns the error "A mod tried to open a gui without being a NetworkMod"

 

Good thing you solved it, as that error is woefully inadequate, as there are something like FIVE different problems that will generate that error.  I had the misfortune of having the most uncommon one when I was doing my gui container.

 

Glad to see your back from your hiatus Draco :D

I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes.

 

I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there xD

Link to comment
Share on other sites

Glad to see your back from your hiatus Draco :D

 

It's what happens when you tear your hair out trying to do something that should be simple, only to find that Forge didn't unfinalize something* and get dragged back into the help forum. :P

 

*Lex told me that there's no reason it should be unfinalized, three days later a pull request is made, acted on, and merged with the main trunk.  I think Lex just hates me.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Glad to see your back from your hiatus Draco :D

 

It's what happens when you tear your hair out trying to do something that should be simple, only to find that Forge didn't unfinalize something* and get dragged back into the help forum. :P

 

*Lex told me that there's no reason it should be unfinalized, three days later a pull request is made, acted on, and merged with the main trunk.  I think Lex just hates me.

 

Lol, maybe. It seems as if he has minor respect for everyone with a descent question, and those that answer correctly and know what they are doing, and then no respect for anyone else xD ( except for the moderators etc. and the Forge team )

I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes.

 

I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there xD

Link to comment
Share on other sites

Lol, maybe. It seems as if he has minor respect for everyone with a descent question, and those that answer correctly and know what they are doing, and then no respect for anyone else xD ( except for the moderators etc. and the Forge team )

 

More like "no respect for anyone asking what appears to be an uninformed question" regardless of how informed that person actually is.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Lol, maybe. It seems as if he has minor respect for everyone with a descent question, and those that answer correctly and know what they are doing, and then no respect for anyone else xD ( except for the moderators etc. and the Forge team )

 

More like "no respect for anyone asking what appears to be an uninformed question" regardless of how informed that person actually is.

 

True.. Even though you can be entirely informed, if you phrase something wrong, the question then takes a completely new path. And that in turn can lead to something that you had not entirely wanted to be informed on. Thus resulting in yourself seeming uninformed.

 

:/ The joys of misdirection in its fullest. ( and no the magician kind xD )

I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes.

 

I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there xD

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.