(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.