Jump to content

ElectronFusion

Members
  • Posts

    3
  • Joined

  • Last visited

Everything posted by ElectronFusion

  1. Thanks but now it returns the error "A mod tried to open a gui without being a NetworkMod"
  2. (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.
×
×
  • Create New...

Important Information

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