• 0

    posted a message on SHoRTAxE MoD [v2.0.0]! • Tools that do everything! • Swords that throw enemies! • And MORE! • [last updated: 3/24/15: 11:02PM]

    Created by xSHoRTYxxYTRoHSx -- © 2015 Lee Barton



    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Description

    Welcome to the SHoRTAxE MoD! This mod adds 9 new blocks, 7 new items, a new creative tab, a new tool, and a new sword! The tools and sword have color options - it just depends on how you craft them! The main point being the SHoRTAxE! Basically my version of a shickaxe, paxel, multitool, etc.

    I have been developing this mod by myself, for myself. I wanted a tool that could do everything! I wanted to make it fun though, and not just make it easy to receive such a tool. So that is where this mod came into place. I always thought about releasing it, but was always too lazy and just never had the motivation. So now I decided to release this mod for all to enjoy! Or not. It's up to you. :P

    This is version 2.0.0 for Minecraft 1.8! I plan on adding features and new 'minecraft-ic' and 'SHoRTAxE-ic' things, but I went ahead and updated the mod to 1.8 before adding more content. (See "Upcoming Features" below to find out more.)


    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Announcements

    3/24/2015 -- SHoRTAxE MoD Release of version 2.0.0 for Minecraft 1.8!

    -- Working on adding new content (lots of new content) for v2.5.0

    3/22/2015 -- SHoRTAxE MoD Release of version 1.1.1! (Version 1.1.1 because I have fixed bugs and issues while it was not released.)


    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Download & Install

    Latest Release: [1.8]SHoRTAxE_MoDv2.0.0 (Old release below: version 1.1.1 for Minecraft 1.7.10 or Minecraft 1.7.2)
    Compatibility: Minecraft 1.8
    Required: Forge for Minecraft 1.8
    Download Link: [1.8]SHoRTAxE_MoDv2.0.0.jar

    (1) Click the link above to download.
    (2) Skip the ad once the 5 seconds is over in the top right corner of the page.
    (3) Download the .jar file
    (4) Once downloaded, install minecraft forge first.
    (5) Then place the [1.8]SHoRTAxE_MoDv1.0.0.jar in your mods folder ("%appdata%/.minecraft/mods/")
    -----------------------------------------------------------------------------------------------------------------------------------
    Older Release: [1.7.10]SHoRTAxE_MoDv1.1.1
    Compatibility: Minecraft 1.7.10, or Minecraft 1.7.2
    Required: Forge for Minecraft 1.7.10 or Forge for Minecraft 1.7.2
    Download Link: [1.7.10]SHoRTAxE_MoDv1.1.1.jar

    (1) Click the link above to download.
    (2) Skip the ad once the 5 seconds is over in the top right corner of the page.
    (3) Download the .jar file
    (4) Once downloaded, install minecraft forge first.
    (5) Then place the [1.7.10]SHoRTAxE_MoDv1.1.1.jar in your mods folder ("%appdata%/.minecraft/mods/")


    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Crafting and Info

    There is two different ways to get the SHoRT GeM:

    One is a process that requires you to craft 4 different blocks: EaRTH BLoCK, NeTHER BLoCK, MoB BLoCK, and the OrE BLoCK. Once each are crafted, you throw them into the crafting table and make the SHoRT BLoCK, which is mined for the GeMs. The BLoCK drops each colored gem randomly. You could end up with all three colors or all of the same color.

    Two is just finding the SHoRT OrE BLoCK deep in the depths of Mincraftia and mining them for SHaRDs. Once you have 9 shards of the same color, you are able to craft 1 GeM of said color.


    Just remember, you have to have a diamond pickaxe to mine the SHoRT OrE and SHoRT BLoCK.


    Each is a grind to do, but always worth it in the end.


    Also, each weapon and tool is able to be enchanted, which creates monstrous tools and weapons!


    Crafting:



    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Upcoming Features

    (I went ahead and updated the mod to 1.8, because of how much content I want to add for v2.5.0 and how long that will take.)

    ---- SHoRT ArMoR with fully equipped armor abilities. (adds content for gems.)
    ---- SHoRT RiNGs that have their own special ability. (adds content for shards.)
    ---- OBSiDIAN TORcHES that are brighter than normal torches. (adds content for obsidian sticks)
    ---- More weapons.
    ---- Maaaayyybbeee a dimension. Maybe. I don't know.

    -- I have other mod ideas that may end up being a package of SHoRT MoDs.

    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Please leave any ideas, comments, or suggestions.

    Report any errors or bugs that are found, as I have created this alone and there will always be something wrong. I cannot find everything!

    If you hate this mod, please let me know why! It will help! :]

    Also if you would like to contact me besides this forum, my email is: [email protected]


    Thank you and I hope you enjoy!

    Posted in: Minecraft Mods
  • 0

    posted a message on SHoRTAxE MoD [v1.1.1]• Tools that do everything! • Swords that throw enemies! • And MORE!

    Yes, actually. In upcoming features above, I put a few solid and for sure content that I am working on. I am also thinking of more weapons, as well as tools, but I still need to develop more solid ideas and plans for those.

    Posted in: Minecraft Mods
  • 1

    posted a message on SHoRTAxE MoD [v1.1.1]• Tools that do everything! • Swords that throw enemies! • And MORE!

    Created by xSHoRTYxxYTRoHSx -- © 2015 Lee Barton



    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Description


    Welcome to the SHoRTAxE MoD! This mod adds 9 new blocks, 7 new items, a new creative tab, a new tool, and a new sword! The tools and sword have color options - it just depends on how you craft them!


    I have been developing this mod by myself, for myself. I wanted a tool that could do everything! I wanted to make it fun though, and not just make it easy to receive such a tool. So that is where this mod came into place. I always thought about releasing it, but was always too lazy and just never had the motivation. So now I decided to release this mod for all to enjoy! Or not. It's up to you. :P


    I do plan on updating this mod to 1.8, but life happens and it will take awhile. I plan on adding features and new 'minecraft-ic' and 'SHoRTAxE-ic' things. (See "Upcoming Features" below to find out more.)


    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Announcements


    3/22/2015 -- SHoRTAxE MoD Release of version 1.1.1! (Version 1.1.1 because I have fixed bugs and issues while it was not released.)


    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Download & Install


    Latest Release: [1.7.10]SHoRTAxE_MoDv1.1.1

    Compatibility: Minecraft 1.7.10, or Minecraft 1.7.2


    (1) Click the link above to download.

    (2) Skip the ad once the 5 seconds is over in the top right corner of the page.

    (3) Download the .jar file

    (4) Once downloaded, install minecraft forge first.

    (5) Then place the [1.7.10]SHoRTAxE_MoDv1.1.1.jar in your mods folder ("%appdata%/.minecraft/mods/")


    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Crafting and Info


    There is two different ways to get the SHoRT GeM.

    One is a process that requires you to craft 4 different blocks: EaRTH BLoCK, NeTHER BLoCK, MoB BLoCK, and the OrE BLoCK. Once each are crafted, you throw them into the crafting table and make the SHoRT BLoCK, which is mined for the GeMs. The BLoCK drops each colored gem randomly. You could end up with all three colors or all of the same color.

    Two is just finding the SHoRT OrE BLoCK deep in the depths of Mincraftia and mining them for SHaRDs. Once you have 9 shards of the same color, you are able to craft 1 GeM of said color.


    Each is a grind to do, but always worth it in the end.


    Also, each weapon and tool is able to be enchanted, which creates monstrous tools and weapons!


    Crafting:



    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Upcoming Features


    -- Version 2.0 for 1.8

    ---- SHoRT ArMoR with fully equipped armor abilities.

    ---- SHoRT RiNGs that have their own special ability.

    ---- OBSiDIAN TORcHES that are brighter than normal torches.

    ---- More weapons.


    -- I have other mod ideas that may end up being a package of SHoRT MoDs.


    ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

    Please leave any ideas, comments, or suggestions.

    Report any errors or bugs that are found, as I have created this alone and there will always be something wrong. I cannot find everything!

    If you hate this mod, please let me know why! It will help! :]

    Also if you would like to contact me besides this forum, my email is: [email protected]


    Thank you and I hope you enjoy!

    Posted in: Minecraft Mods
  • 0

    posted a message on [1.7.2] Forge Modding - Trouble opening GUI with key (internal server crash)
    That makes a lot of since. Feeling dumb now. Thank you for the help!

    Here is the ContainerEquipItems:

    package net.lee.wizardmod.container;
    
    import net.lee.wizardmod.entity.TileEntityEquipItems;
    import net.lee.wizardmod.entity.TileEntityRingEnchanter;
    import net.lee.wizardmod.helper.ringEnchanterRecipes;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.inventory.Container;
    import net.minecraft.inventory.Slot;
    import net.minecraft.item.ItemStack;
    
    public class ContainerEquipItems extends Container
    {
    private TileEntityEquipItems equipItems;
    
    public ContainerEquipItems(InventoryPlayer inventory, TileEntityEquipItems equipItems)
    {
    this.equipItems = equipItems;
    
    // adding all 8 slots
    this.addSlotToContainer(new Slot(equipItems, 0, 40, 7));
    this.addSlotToContainer(new Slot(equipItems, 1, 40, 25));
    this.addSlotToContainer(new Slot(equipItems, 2, 40, 43));
    this.addSlotToContainer(new Slot(equipItems, 3, 40, 61));
    
    this.addSlotToContainer(new Slot(equipItems, 4, 120, 7));
    this.addSlotToContainer(new Slot(equipItems, 5, 120, 25));
    this.addSlotToContainer(new Slot(equipItems, 6, 120, 43));
    this.addSlotToContainer(new Slot(equipItems, 7, 120, 61));
    
    // bottom inventory slots
    for (int i = 0; i < 9; i++)
    {
    this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 142));
    }
    
    // all inventory slots
    for (int i = 0; i < 3; i++)
    {
    for (int j = 0; j < 9; j++)
    {
    this.addSlotToContainer(new Slot(inventory, j + 9 + i * 9, 8 + 18 * j, 84 + i * 18));
    }
    }
    }
    
    public boolean canInteractWith(EntityPlayer entityplayer) {
    return this.equipItems.isUseableByPlayer(entityplayer);
    }
    
    // shift clicking problem fixed ;)
    public ItemStack transferStackInSlot(EntityPlayer entityPlayer, 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 (ringEnchanterRecipes.enchanting().getEnchantingResult(itemstack1) != null)
    {
    if (!this.mergeItemStack(itemstack1, 1, 2, false))
    {
    return null;
    }
    }
    else if (TileEntityRingEnchanter.isItemFuel(itemstack1))
    {
    if (!this.mergeItemStack(itemstack1, 0, 1, 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(entityPlayer, itemstack1);
    }
    
    return itemstack;
    }
    
    }
    sense*
    Posted in: Modification Development
  • 0

    posted a message on [1.7.2] Forge Modding - Trouble opening GUI with key (internal server crash)
    I am experienced with modding, but have not used a key to open up a GUI. It is a container with a tileentity class. I though that I could make my key, which I did, and then with 'keyInpuEvent', just open up my GUI like a block would when right clicked. However, when I hit my key, the X key, the game crashes: "Shutting down internal server..." It seems that I must to do something, like make packets, because the tile entity and container must retrieve and store information, such as the players inventory.

    Just a warning, when I am brain storming and creating a mod that I have not planned well, it gets a little unorganized. So, yes, I do realize my code is unorganized, and some code is unnecessary :P

    package net.lee.wizardmod;
    
    import org.lwjgl.input.Keyboard;
    
    import net.lee.wizardmod.blocks.MagickaOre;
    import net.lee.wizardmod.blocks.RingEnchanterBlock;
    import net.lee.wizardmod.blocks.worldgeneration.MagickaOreWorldGen;
    import net.lee.wizardmod.entity.TileEntityEquipItems;
    import net.lee.wizardmod.entity.TileEntityRingEnchanter;
    import net.lee.wizardmod.helper.KeyHandlerWiZARD;
    import net.lee.wizardmod.items.ItemMagicka;
    import net.lee.wizardmod.items.ItemScroll;
    import net.lee.wizardmod.proxy.CommonProxy;
    import net.lee.wizardmod.render.RenderRingEnchanter;
    import net.lee.wizardmod.rings.ItemEnchantedRing;
    import net.lee.wizardmod.rings.ItemRing;
    import net.minecraft.block.Block;
    import net.minecraft.block.Block.SoundType;
    import net.minecraft.block.material.Material;
    import net.minecraft.client.settings.KeyBinding;
    import net.minecraft.item.Item;
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.item.ItemStack;
    import cpw.mods.fml.client.registry.ClientRegistry;
    import cpw.mods.fml.client.registry.RenderingRegistry;
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    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.NetworkRegistry;
    import cpw.mods.fml.common.registry.GameRegistry;
    import cpw.mods.fml.common.registry.LanguageRegistry;
    
    @Mod(modid = WiZARDId.MODID, name = WiZARDId.NAME, version = WiZARDId.VERSION)
    public class WiZARDMain
    {
    // keyBinding
    public static KeyBinding equipItems;
    
    
    // block materials && sound types
    private static SoundType stone;
    private static Material rock;
    
    
    
    // rings [7 + 1]
    public static Item ringForCrafting;
    
    public static Item ringOfInvisibility;
    public static Item ringOfInvisibilityEnchanted;
    
    public static Item ringOfLevitation;
    public static Item ringOfLevitationEnchanted;
    
    public static Item ringOfAranea;
    public static Item ringOfAraneaEnchanted;
    
    public static Item ringOfAquatics;
    public static Item ringOfAquaticsEnchanted;
    
    public static Item ringOfIgnition;
    public static Item ringOfIgnitionEnchanted;
    
    public static Item ringOfHunger;
    public static Item ringOfHungerEnchanted;
    
    public static Item ringOfInvincibility;
    public static Item ringOfInvincibilityEnchanted;
    
    
    
    // scrolls[7] (used to enchant items [rings, amulets, etc.]
    public static Item Scroll; // enough magicka to enchant up to 1 item
    public static Item deadScroll; // 16 items
    public static Item lesserScroll; // 32 items
    public static Item greaterScroll; // 64 items
    public static Item goldenScroll; // 256 items
    public static Item emeraldScroll; // 512 items
    public static Item strangeScroll; // 1024 items
    
    
    
    // magicka[4] (used to craft scrolls)
    public static Item Magicka; // only minable (1 item) (as rare as emerald, larger veins)
    public static Item lesserMagicka; // crafted by normal magicka (16 items)
    public static Item greaterMagicka; // only crafted (32 items) (as rare as emerald)
    public static Item weirdMagicka; // only picken up from rare bosses (not crafted) (64 items)
    public static Item strangeMagicka; // only crafted with greater and weirdMagicka (128 items)
    
    
    
    // blocks
    public static Block ringEnchanter;
    public static Block oreMagicka;
    
    
    
    // ore generations
    public static MagickaOreWorldGen oreMagickaGen = new MagickaOreWorldGen();
    
    
    // proxies
    @SidedProxy(clientSide="net.lee.wizardmod.proxy.ClientProxy", serverSide="net.lee.wizardmod.proxy.CommonProxy")
    public static CommonProxy proxy;
    
    
    // instance
    @Instance(WiZARDId.MODID)
    public static WiZARDMain instance;
    
    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
    // keyBinding
    equipItems = new KeyBinding("Equip WiZARD Items", Keyboard.KEY_X, "WiZARD");
    
    
    
    // rings
    ringForCrafting = new ItemRing().setName("ring");
    
    ringOfInvisibility = new ItemRing().setName("ringOfInvisibility");
    ringOfLevitation = new ItemRing().setName("ringOfLevitation");
    ringOfAranea = new ItemRing().setName("ringOfAranea");
    ringOfAquatics = new ItemRing().setName("ringOfAquatics");
    ringOfIgnition = new ItemRing().setName("ringOfIgnition");
    ringOfHunger = new ItemRing().setName("ringOfHunger");
    ringOfInvincibility = new ItemRing().setName("ringOfInvincibility");
    
    ringOfInvisibilityEnchanted = new ItemEnchantedRing().setName("ringOfInvisibilityEnchanted");
    ringOfInvincibilityEnchanted = new ItemEnchantedRing().setName("ringOfInvincibilityEnchanted");
    ringOfHungerEnchanted = new ItemEnchantedRing().setName("ringOfHungerEnchanted");
    ringOfIgnitionEnchanted = new ItemEnchantedRing().setName("ringOfIgnitionEnchanted");
    ringOfAquaticsEnchanted = new ItemEnchantedRing().setName("ringOfAquaticsEnchanted");
    ringOfAraneaEnchanted = new ItemEnchantedRing().setName("ringOfAraneaEnchanted");
    ringOfLevitationEnchanted = new ItemEnchantedRing().setName("ringOfLevitationEnchanted");
    
    
    // scrolls
    Scroll = new ItemScroll().setName("Scroll");
    deadScroll = new ItemScroll().setName("deadScroll");
    lesserScroll = new ItemScroll().setName("lesserScroll");
    greaterScroll = new ItemScroll().setName("greaterScroll");
    goldenScroll = new ItemScroll().setName("goldenScroll");
    emeraldScroll = new ItemScroll().setName("emeraldScroll");
    strangeScroll = new ItemScroll().setName("strangeScroll");
    
    // magicka
    Magicka = new ItemMagicka().setName("Magicka");
    lesserMagicka = new ItemMagicka().setName("lesserMagicka");
    greaterMagicka = new ItemMagicka().setName("greaterMagicka");
    weirdMagicka = new ItemMagicka().setName("weirdMagicka");
    strangeMagicka = new ItemMagicka().setName("strangeMagicka");
    
    
    // enchanters
    ringEnchanter = new RingEnchanterBlock(Material.rock).setName("ringEnchanter");
    
    // ore
    oreMagicka = new MagickaOre(Material.rock, 0.25F, 5.0F).setName("oreMagicka");
    
    
    
    }
    
    @EventHandler
    public void init(FMLInitializationEvent event)
    {
    // ring enchanter block
    GameRegistry.addShapedRecipe(new ItemStack(ringEnchanter), new Object[] {" R ", "MEM", "OOO",
    'M', Magicka, 'R', ringForCrafting, 'E', Blocks.enchanting_table, 'O', Blocks.obsidian});
    
    
    
    // scrolls crafting
    GameRegistry.addShapedRecipe(new ItemStack(Scroll), new Object[] {"P", "P", "M",
    'P', Items.paper, 'M', Magicka});
    
    GameRegistry.addShapedRecipe(new ItemStack(deadScroll), new Object[]{"MBM","BSB","MBM",
    'M', Magicka, 'B', Items.bone, 'S', Scroll});
    
    //GameRegistry.addShapedRecipe(new ItemStack(lesserScroll), new Object[]{"","","",
    // '', });
    
    //GameRegistry.addShapedRecipe(new ItemStack(greaterScroll), new Object[]{"","","",
    // '', });
    
    //GameRegistry.addShapedRecipe(new ItemStack(goldenScroll), new Object[]{"","","",
    // '', });
    
    //GameRegistry.addShapedRecipe(new ItemStack(emeraldScroll), new Object[]{"","","",
    // '', });
    
    //GameRegistry.addShapedRecipe(new ItemStack(strangeScroll), new Object[]{"","","",
    // '', });
    
    
    
    // rings crafting
    GameRegistry.addShapedRecipe(new ItemStack(ringForCrafting), new Object[] {" * ", "* *", " * ",
    '*', Items.gold_nugget});
    
    GameRegistry.addShapedRecipe(new ItemStack(ringOfInvisibility), new Object[] {"GEG", "uRu", "GEG",
    'G', Blocks.glass_pane, 'E', Items.ender_eye, 'u', Items.ender_pearl, 'R', ringForCrafting});
    
    GameRegistry.addShapedRecipe(new ItemStack(ringOfLevitation), new Object[] {"FGF", "GRG", "FGF",
    'F', Items.feather, 'G', Items.ghast_tear, 'R', ringForCrafting});
    
    GameRegistry.addShapedRecipe(new ItemStack(ringOfAranea), new Object[] {"SES", "BRB", "SES",
    'S', Items.string, 'E', Items.slime_ball, 'B', Items.spider_eye, 'R', ringForCrafting});
    
    GameRegistry.addShapedRecipe(new ItemStack(ringOfAquatics), new Object[] {"FWF", "WRW", "IWI",
    'F', Items.fish, 'W', Items.water_bucket, 'R', ringForCrafting});
    
    GameRegistry.addShapedRecipe(new ItemStack(ringOfIgnition), new Object[] {"FLF", "LRL", "FLF",
    'F', Items.fire_charge, 'L', Items.lava_bucket, 'R', ringForCrafting});
    
    // crafting recipe for the ringOfHunger (meat placed anywhere)
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"BSP", "SRS", "FSC",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"PSB", "SRS", "FSC",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"BSP", "SRS", "CSF",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"PSB", "SRS", "CSF",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    //
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"FSC", "SRS", "BSP",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"FSC", "SRS", "PSB",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"CSF", "SRS", "BSP",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"CSF", "SRS", "PSB",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    //
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"BSF", "SRS", "PSC",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"BSF", "SRS", "CSP",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"FSB", "SRS", "PSC",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"FSB", "SRS", "CSP",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    //
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"BSC", "SRS", "PSF",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"BSC", "SRS", "FSP",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"CSB", "SRS", "PSF",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"CSB", "SRS", "FSP",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    //
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"CSP", "SRS", "BSF",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"CSP", "SRS", "FSB",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"PSC", "SRS", "BSF",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"PSC", "SRS", "FSB",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    //
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"FSP", "SRS", "BSC",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"FSP", "SRS", "CSB",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"PSF", "SRS", "CSB",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    GameRegistry.addShapedRecipe(new ItemStack(ringOfHunger), new Object[] {"PSF", "SRS", "BPC",
    'B', Items.cooked_beef, 'P', Items.cooked_porkchop,'F', Items.cooked_fished, 'C', Items.cooked_chicken, 'S', Items.mushroom_stew, 'R', ringForCrafting});
    
    GameRegistry.addShapedRecipe(new ItemStack(ringOfInvincibility), new Object[] {"DED", "ERE", "DED",
    'D', Blocks.diamond_block, 'E', Blocks.emerald_block, 'R', ringForCrafting});
    
    
    
    // keybinding
    FMLCommonHandler.instance().bus().register(new KeyHandlerWiZARD());
    ClientRegistry.registerKeyBinding(WiZARDMain.equipItems);
    
    
    
    // registerin my tile entity ringEnchanter
    GameRegistry.registerTileEntity(TileEntityRingEnchanter.class, "ringEnchanter");
    GameRegistry.registerTileEntity(TileEntityEquipItems.class, "equipItems");
    NetworkRegistry.INSTANCE.registerGuiHandler(this, new WiZARDGuiHandler());
    
    
    
    // generating my ore into the world.
    GameRegistry.registerWorldGenerator(oreMagickaGen, 0);
    
    }
    
    @EventHandler
    public void postInit(FMLPostInitializationEvent event)
    {
    
    }
    
    }

    package net.lee.wizardmod;
    
    import cpw.mods.fml.common.network.IGuiHandler;
    import net.lee.wizardmod.container.ContainerEquipItems;
    import net.lee.wizardmod.container.ContainerRingEnchanter;
    import net.lee.wizardmod.entity.TileEntityEquipItems;
    import net.lee.wizardmod.entity.TileEntityRingEnchanter;
    import net.lee.wizardmod.gui.GuiEquipItems;
    import net.lee.wizardmod.gui.GuiRingEnchanter;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.world.World;
    
    public class WiZARDGuiHandler implements IGuiHandler
    {
    public static int guiID = 0;
    public static int ringEnchanter = guiID++, equipItems = guiID++;
    
    @Override
    public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
    {
    TileEntity entity = world.getTileEntity(x, y, z);
    
    if (ID == ringEnchanter)
    {
    return new ContainerRingEnchanter(player.inventory, (TileEntityRingEnchanter)entity);
    }
    if (ID == equipItems)
    {
    return new ContainerEquipItems(player.inventory, (TileEntityEquipItems)entity);
    }
    
    return null;
    }
    
    @Override
    public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
    {
    TileEntity entity = world.getTileEntity(x, y, z);
    
    if(ID == ringEnchanter)
    {
    return new GuiRingEnchanter(player.inventory, (TileEntityRingEnchanter)entity);
    }
    if (ID == equipItems)
    {
    return new GuiEquipItems(player.inventory, (TileEntityEquipItems)entity);
    }
    
    return null;
    }
    
    }

    package net.lee.wizardmod.helper;
    
    import java.util.EnumSet;
    
    import net.lee.wizardmod.WiZARDGuiHandler;
    import net.lee.wizardmod.WiZARDId;
    import net.lee.wizardmod.WiZARDMain;
    import net.lee.wizardmod.container.ContainerEquipItems;
    import net.lee.wizardmod.entity.TileEntityEquipItems;
    import net.lee.wizardmod.gui.GuiEquipItems;
    import net.lee.wizardmod.proxy.ClientProxy;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.entity.EntityClientPlayerMP;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.client.settings.KeyBinding;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.world.World;
    import net.minecraftforge.common.MinecraftForge;
    import org.lwjgl.input.Keyboard;
    
    import com.sun.security.ntlm.Client;
    
    import cpw.mods.fml.client.FMLClientHandler;
    import cpw.mods.fml.client.registry.ClientRegistry;
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.common.eventhandler.EventBus;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import cpw.mods.fml.server.FMLServerHandler;
    
    public class KeyHandlerWiZARD
    {
    
    @SubscribeEvent
    public void keyInputEvent(KeyInputEvent event)
    {
    if (WiZARDMain.equipItems.isPressed())
    {
    if(FMLClientHandler.instance().getClient().currentScreen == null)
    {
    EntityPlayer player = FMLClientHandler.instance().getClient().thePlayer;
    player.openGui(WiZARDMain.instance, WiZARDGuiHandler.equipItems, player.worldObj, (int)player.posX, (int)player.posY, (int)player.posZ);
    }
    }
    }
    }

    package net.lee.wizardmod.gui;
    
    import org.lwjgl.opengl.GL11;
    
    import cpw.mods.fml.client.FMLClientHandler;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    import net.lee.wizardmod.WiZARDId;
    import net.lee.wizardmod.WiZARDMain;
    import net.lee.wizardmod.container.ContainerEquipItems;
    import net.lee.wizardmod.entity.TileEntityEquipItems;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.client.gui.inventory.GuiContainer;
    import net.minecraft.client.renderer.InventoryEffectRenderer;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.inventory.Container;
    import net.minecraft.util.ResourceLocation;
    
    @SideOnly(Side.CLIENT)
    public class GuiEquipItems extends GuiContainer
    {
    TileEntityEquipItems equipItemsInventory;
    public final ResourceLocation guiTexture = new ResourceLocation(WiZARDId.PREFIX + "textures/gui/equipItems_gui.png");
    
    public GuiEquipItems(InventoryPlayer inventory, TileEntityEquipItems equipItems)
    {
    super(new ContainerEquipItems(inventory, equipItems));
    this.allowUserInput = true;
    }
    
    @Override
    protected void drawGuiContainerForegroundLayer(int par1, int par2)
    {
    this.fontRendererObj.drawString("WiZARD EQUiPMENT", 49, 5, 4210752);
    }
    
    @Override
    protected void drawGuiContainerBackgroundLayer(float f, int i, int j)
    {
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    this.xSize = 176;
    this.ySize = 166;
    Minecraft.getMinecraft().getTextureManager().bindTexture(guiTexture);
    drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
    }
    
    }

    ---- Minecraft Crash Report ----
    // I just don't know what went wrong :(
    
    Time: 5/10/14 4:47 PM
    Description: Rendering screen
    
    java.lang.NullPointerException: Rendering screen
    at net.minecraft.inventory.Slot.getStack(Slot.java:98)
    at net.minecraft.client.gui.inventory.GuiContainer.func_146977_a(GuiContainer.java:237)
    at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:132)
    at net.minecraft.client.renderer.InventoryEffectRenderer.drawScreen(InventoryEffectRenderer.java:44)
    at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1209)
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1064)
    at net.minecraft.client.Minecraft.run(Minecraft.java:951)
    at net.minecraft.client.main.Main.main(Main.java:112)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    
    
    A detailed walkthrough of the error, its code path and all known details is as follows:
    ---------------------------------------------------------------------------------------
    
    -- Head --
    Stacktrace:
    at net.minecraft.inventory.Slot.getStack(Slot.java:98)
    at net.minecraft.client.gui.inventory.GuiContainer.func_146977_a(GuiContainer.java:237)
    at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:132)
    at net.minecraft.client.renderer.InventoryEffectRenderer.drawScreen(InventoryEffectRenderer.java:44)
    
    -- Screen render details --
    Details:
    Screen name: net.lee.wizardmod.gui.GuiEquipItems
    Mouse location: Scaled: (240, 134). Absolute: (960, 540)
    Screen size: Scaled: (480, 270). Absolute: (1920, 1080). Scale factor of 4
    
    -- Affected level --
    Details:
    Level name: MpServer
    All players: 1 total; [EntityClientPlayerMP['Player821'/671, l='MpServer', x=-205.50, y=77.62, z=209.50]]
    Chunk stats: MultiplayerChunkCache: 75, 75
    Level seed: 0
    Level generator: ID 00 - default, ver 1. Features enabled: false
    Level generator options:
    Level spawn location: World: (-201,64,201), Chunk: (at 7,4,9 in -13,12; contains blocks -208,0,192 to -193,255,207), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511)
    Level time: 10684 game time, 10684 day time
    Level dimension: 0
    Level storage version: 0x00000 - Unknown?
    Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
    Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
    Forced entities: 73 total; [EntityBat['Bat'/546, l='MpServer', x=-222.51, y=52.54, z=266.51], EntityChicken['Chicken'/544, l='MpServer', x=-219.38, y=63.00, z=222.19], EntityBat['Bat'/545, l='MpServer', x=-213.32, y=51.00, z=265.48], EntityZombie['Zombie'/558, l='MpServer', x=-199.78, y=38.00, z=161.09], EntityChicken['Chicken'/559, l='MpServer', x=-203.50, y=66.00, z=221.50], EntityZombie['Zombie'/557, l='MpServer', x=-202.91, y=38.00, z=163.53], EntityClientPlayerMP['Player821'/671, l='MpServer', x=-205.50, y=77.62, z=209.50], EntityWitch['Witch'/563, l='MpServer', x=-205.56, y=30.00, z=259.72], EntityWitch['Witch'/562, l='MpServer', x=-203.49, y=29.00, z=260.14], EntityCreeper['Creeper'/561, l='MpServer', x=-195.53, y=29.00, z=269.03], EntityWitch['Witch'/560, l='MpServer', x=-207.78, y=31.00, z=250.63], EntitySkeleton['Skeleton'/575, l='MpServer', x=-176.59, y=31.00, z=278.13], EntityChicken['Chicken'/574, l='MpServer', x=-176.66, y=66.00, z=268.44], EntitySkeleton['Skeleton'/440, l='MpServer', x=-267.16, y=45.00, z=184.69], EntityBat['Bat'/517, l='MpServer', x=-228.69, y=50.33, z=157.10], EntitySkeleton['Skeleton'/441, l='MpServer', x=-262.66, y=45.00, z=186.16], EntityZombie['Zombie'/442, l='MpServer', x=-257.34, y=42.00, z=187.97], EntityChicken['Chicken'/518, l='MpServer', x=-227.53, y=64.00, z=239.47], EntityCreeper['Creeper'/443, l='MpServer', x=-269.28, y=43.00, z=184.69], EntityChicken['Chicken'/519, l='MpServer', x=-227.53, y=62.27, z=244.88], EntityCreeper['Creeper'/444, l='MpServer', x=-267.38, y=43.00, z=182.88], EntityCreeper['Creeper'/445, l='MpServer', x=-265.47, y=43.92, z=181.69], EntityZombie['Zombie'/446, l='MpServer', x=-256.59, y=44.00, z=183.09], EntityBat['Bat'/515, l='MpServer', x=-234.49, y=50.00, z=147.89], EntityChicken['Chicken'/447, l='MpServer', x=-265.66, y=67.00, z=176.53], EntityCreeper['Creeper'/435, l='MpServer', x=-256.00, y=22.00, z=144.56], EntityBat['Bat'/437, l='MpServer', x=-260.75, y=49.00, z=155.91], EntitySkeleton['Skeleton'/438, l='MpServer', x=-260.06, y=44.00, z=181.31], EntitySkeleton['Skeleton'/439, l='MpServer', x=-264.47, y=45.00, z=178.91], EntityZombie['Zombie'/541, l='MpServer', x=-209.31, y=39.00, z=173.44], EntityEnderman['Enderman'/540, l='MpServer', x=-209.75, y=38.00, z=172.47], EntityCreeper['Creeper'/543, l='MpServer', x=-210.34, y=37.00, z=171.50], EntityCreeper['Creeper'/542, l='MpServer', x=-212.00, y=36.00, z=169.50], EntitySkeleton['Skeleton'/539, l='MpServer', x=-214.50, y=11.13, z=174.50], EntitySquid['Squid'/612, l='MpServer', x=-144.25, y=56.25, z=223.06], EntityChicken['Chicken'/452, l='MpServer', x=-256.63, y=65.00, z=247.66], EntityChicken['Chicken'/451, l='MpServer', x=-259.03, y=65.00, z=247.47], EntitySkeleton['Skeleton'/450, l='MpServer', x=-271.50, y=26.00, z=210.50], EntityBat['Bat'/449, l='MpServer', x=-272.12, y=24.63, z=200.28], EntityChicken['Chicken'/448, l='MpServer', x=-266.47, y=68.00, z=191.63], EntitySkeleton['Skeleton'/576, l='MpServer', x=-176.53, y=31.00, z=276.94], EntityZombie['Zombie'/577, l='MpServer', x=-178.00, y=31.00, z=276.44], EntityBat['Bat'/578, l='MpServer', x=-176.25, y=32.10, z=278.75], EntityBat['Bat'/579, l='MpServer', x=-181.31, y=52.66, z=283.65], EntityBat['Bat'/580, l='MpServer', x=-179.55, y=52.40, z=287.04], EntityBat['Bat'/581, l='MpServer', x=-177.25, y=52.00, z=282.70], EntityBat['Bat'/582, l='MpServer', x=-179.52, y=52.00, z=284.81], EntitySquid['Squid'/588, l='MpServer', x=-161.61, y=55.34, z=206.77], EntitySquid['Squid'/589, l='MpServer', x=-160.59, y=55.27, z=208.15], EntitySquid['Squid'/590, l='MpServer', x=-166.38, y=55.09, z=208.16], EntityZombie['Zombie'/591, l='MpServer', x=-166.31, y=36.00, z=254.31], EntitySkeleton['Skeleton'/593, l='MpServer', x=-163.56, y=46.00, z=262.00], EntityZombie['Zombie'/592, l='MpServer', x=-166.91, y=36.00, z=255.31], EntitySpider['Spider'/595, l='MpServer', x=-169.41, y=36.00, z=259.34], EntitySkeleton['Skeleton'/594, l='MpServer', x=-162.50, y=40.00, z=271.97], EntityChicken['Chicken'/597, l='MpServer', x=-167.41, y=66.00, z=266.53], EntityChicken['Chicken'/489, l='MpServer', x=-245.41, y=62.27, z=257.44], EntityChicken['Chicken'/596, l='MpServer', x=-171.53, y=70.00, z=271.53], EntityChicken['Chicken'/488, l='MpServer', x=-245.56, y=75.00, z=222.56], EntityBat['Bat'/599, l='MpServer', x=-168.44, y=47.09, z=284.85], EntitySkeleton['Skeleton'/598, l='MpServer', x=-162.50, y=40.00, z=272.91], EntityZombie['Zombie'/485, l='MpServer', x=-240.50, y=42.00, z=180.50], EntityChicken['Chicken'/484, l='MpServer', x=-245.02, y=64.00, z=155.56], EntitySquid['Squid'/603, l='MpServer', x=-159.56, y=55.31, z=201.22], EntityZombie['Zombie'/487, l='MpServer', x=-242.06, y=42.00, z=178.38], EntitySquid['Squid'/602, l='MpServer', x=-154.50, y=55.00, z=200.63], EntityZombie['Zombie'/486, l='MpServer', x=-241.66, y=42.00, z=177.34], EntitySquid['Squid'/605, l='MpServer', x=-158.66, y=56.94, z=213.17], EntitySquid['Squid'/604, l='MpServer', x=-159.78, y=55.00, z=202.69], EntityZombie['Zombie'/483, l='MpServer', x=-252.31, y=23.00, z=147.31], EntityChicken['Chicken'/607, l='MpServer', x=-152.53, y=69.00, z=251.56], EntityZombie['Zombie'/482, l='MpServer', x=-252.50, y=23.00, z=150.50], EntitySquid['Squid'/606, l='MpServer', x=-148.50, y=56.00, z=227.78]]
    Retry entities: 0 total; []
    Server brand: fml,forge
    Server type: Integrated singleplayer server
    Stacktrace:
    at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:418)
    at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2557)
    at net.minecraft.client.Minecraft.run(Minecraft.java:972)
    at net.minecraft.client.main.Main.main(Main.java:112)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    
    -- System Details --
    Details:
    Minecraft Version: 1.7.2
    Operating System: Windows 7 (amd64) version 6.1
    Java Version: 1.7.0_03, Oracle Corporation
    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    Memory: 791818160 bytes (755 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
    JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
    AABB Pool Size: 5411 (303016 bytes; 0 MB) allocated, 948 (53088 bytes; 0 MB) used
    IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
    FML: MCP v9.01-pre FML v7.2.116.1024 Minecraft Forge 10.12.0.1024 4 mods loaded, 4 mods active
    mcp{8.09} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available->Available->Available->Available->Available
    FML{7.2.116.1024} [Forge Mod Loader] (forgeSrc-1.7.2-10.12.0.1024.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available->Available->Available->Available->Available
    Forge{10.12.0.1024} [Minecraft Forge] (forgeSrc-1.7.2-10.12.0.1024.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available->Available->Available->Available->Available
    lee{alpha 1.0.0} [WiZARD MoD] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available->Available->Available->Available->Available
    Launched Version: 1.6
    LWJGL: 2.9.0
    OpenGL: GeForce GT 530/PCI/SSE2 GL version 4.1.0, NVIDIA Corporation
    Is Modded: Definitely; Client brand changed to 'fml,forge'
    Type: Client (map_client.txt)
    Resource Packs: []
    Current Language: English (US)
    Profiler Position: N/A (disabled)
    Vec3 Pool Size: 2154 (120624 bytes; 0 MB) allocated, 962 (53872 bytes; 0 MB) used
    Anisotropic Filtering: Off (1)

    If there is any other file that anyone needs to see, just please let me now. Thank you very much in advance. This is just making me rage. I have looked at many tutorials and thought that I got it, but still get the crash every time I press the X key.
    Posted in: Modification Development
  • 0

    posted a message on Minecraft Modding Error Thread! Post ALL your errors and questions here!
    I have been looking for examples, but only find configuration files for forge, however, I code with ModLoader. I know that the easiest way would be to make a Boolean, It's just I'm not sure where to start since I haven't made one before. As said, I am using ModLoader, if that makes any difference for coding a configuration file, and what I am trying to accomplish is being able to change the item ID's for more compatibility and maybe enable and disable my items/mod.

    Help would be greatly appreciated, so please, if you could give me an example file using ModLoader I would love your face forever and ever. :WSWORD:


    Also here is a link to a forum post I made: http://www.minecraftforum.net/topic/1932248-162-unsolved-help-w-coding-configuration-file-modloader/
    Posted in: Modification Development
  • 0

    posted a message on [1.6.2 Unsolved] Help w/ Coding Configuration File *ModLoader*
    Quote from NetworkFateMC

    I don't code, so I can't help you with this :)
    But bumped so others can.


    Thank you very much man!
    Posted in: Modification Development
  • 0

    posted a message on [1.6.2 Unsolved] Help w/ Coding Configuration File *ModLoader*
    I have been looking for examples, but only find configuration files for forge, however, I code with ModLoader. I know that the easiest way would be to make a Boolean, It's just I'm not sure where to start since I haven't made one before. As said, I am using ModLoader, if that makes any difference for coding a configuration file, and what I am trying to accomplish is being able to change the item ID's for more compatibility and maybe enable and disable my items/mod.

    Help would be greatly appreciated, so please, if you could give me an example file using ModLoader I would love your face forever and ever. :WSWORD:
    Posted in: Modification Development
  • 1

    posted a message on [1.6.2 ModLoader] Loading item textures and rendering
    I found the problem:
    You need to add the following to the end of the line. And add it to the main jar.
    .func_111206_d("nameoftexture");

    public static final Item ingot = new ItemNotchIngot(4358).setUnlocalizedName("ingot_notch").func_111206_d("ingot_notch");



    Quote from iampsych

    I guess the reason it's not working is because you should put your texture into your 1.6.2.jar ('minecraft.jar') , so if you're writing: /owntext/arrowown.png then it's meaning that its in the minecraft.jar , in the owntext directory
    Henrik


    I am having the same issues and I added the textures to the main .jar file, but I still get the following error. I am also using Modloader and have messed with putting the textures in the src folder, and other folders, but I seem to still get the same errors.

    2013-07-28 22:05:15 [CLIENT] [SEVERE] Using missing texture, unable to load: minecraft:textures/items/MISSING_ICON_ITEM_4614_ingot_notch.png
    2013-07-28 22:05:15 [CLIENT] [SEVERE] Using missing texture, unable to load: minecraft:textures/items/MISSING_ICON_ITEM_4613_sword_notch.png
    2013-07-28 22:05:15 [CLIENT] [SEVERE] Using missing texture, unable to load: minecraft:textures/items/MISSING_ICON_ITEM_4612_rod_notch.png
    Posted in: Modification Development
  • 0

    posted a message on [1.6.2]*HELP* MCP Fatal Runtime Error [FIXED]
    *FIXED* The following is the error and I am just pulling my hair out trying to figure this out. I am sure someone has done something to fix it and would like some help! I use eclipse and I noticed it was having some trouble so I recompiled it and then tried starting the client and received the following error.

    Error:
    == MCP 8.04 (data: 8.04, client: 1.6.2, server: 1.6.2) ==
    [14:35:05] Error occurred during initialization of VM
    [14:35:05] Could not reserve enough space for object heap
    '"C:\Program Files\Java\jdk1.7.0_25\bin\java" -Xincgc -Xms1024M -Xmx1024M -cp "..\bin\minecraft;..\sr...' failed : 1
    FATAL ERROR
    Traceback (most recent call last):
    File "runtime\startclient.py", line 42, in startclient
    File "C:\pylo\Mcreator\mcp\runtime\commands.py", line 1362, in startclient
    self.runmc(forkcmd)
    File "C:\pylo\Mcreator\mcp\runtime\commands.py", line 1402, in runmc
    raise CalledProcessError(process.returncode, forkcmd, output)
    CalledProcessError: Command '"C:\Program Files\Java\jdk1.7.0_25\bin\java" -Xincgc -Xms1024M -Xmx1024M -cp "..\bin\minecraft;..\src\minecraft;..\jars\versions\1.6.2\1.6.2.jar;..\lib;..\lib\*;..\jars\libraries\net\java\jinput\jinput\2.0.5\jinput-2.0.5.jar;..\jars\libraries\org\lwjgl\lwjgl\lwjgl-platform\2.9.0\lwjgl-platform-2.9.0-natives-windows.jar;..\jars\libraries\org\apache\commons\commons-lang3\3.1\commons-lang3-3.1.jar;..\jars\libraries\com\paulscode\libraryjavasound\20101123\libraryjavasound-20101123.jar;..\jars\libraries\net\sf\jopt-simple\jopt-simple\4.5\jopt-simple-4.5.jar;..\jars\libraries\com\google\guava\guava\14.0\guava-14.0.jar;..\jars\libraries\lzma\lzma\0.0.1\lzma-0.0.1.jar;..\jars\libraries\org\ow2\asm\asm-all\4.1\asm-all-4.1.jar;..\jars\libraries\com\paulscode\codecjorbis\20101023\codecjorbis-20101023.jar;..\jars\libraries\org\bouncycastle\bcprov-jdk15on\1.47\bcprov-jdk15on-1.47.jar;..\jars\libraries\com\paulscode\soundsystem\20120107\soundsystem-20120107.jar;..\jars\libraries\com\paulscode\librarylwjglopenal\20100824\librarylwjglopenal-20100824.jar;..\jars\libraries\org\scala-lang\scala-library\2.10.2\scala-library-2.10.2.jar;..\jars\libraries\org\lwjgl\lwjgl\lwjgl_util\2.9.0\lwjgl_util-2.9.0.jar;..\jars\libraries\org\scala-lang\scala-compiler\2.10.2\scala-compiler-2.10.2.jar;..\jars\libraries\net\java\jutils\jutils\1.0.0\jutils-1.0.0.jar;..\jars\libraries\org\lwjgl\lwjgl\lwjgl\2.9.0\lwjgl-2.9.0.jar;..\jars\libraries\commons-io\commons-io\2.4\commons-io-2.4.jar;..\jars\libraries\net\sourceforge\argo\argo\2.25\argo-2.25.jar;..\jars\libraries\com\google\code\gson\gson\2.2.2\gson-2.2.2.jar;..\jars\libraries\com\paulscode\codecwav\20101023\codecwav-20101023.jar;..\jars\libraries\net\java\jinput\jinput-platform\2.0.5\jinput-platform-2.0.5-natives-windows.jar;..\jars\libraries\net\minecraft\launchwrapper\1.3\launchwrapper-1.3.jar" -Djava.library.path=..\jars\versions\1.6.2\1.6.2-natives net.minecraft.launchwrapper.Launch --tweakClass cpw.mods.fml.common.launcher.FMLTweaker --version FML_DEV ' returned non-zero exit status 1

    Forgot to mention I am modding with ModLoader and not forge.
    Posted in: Modification Development
  • 0

    posted a message on Trouble With Coding Custom Furnace - Please Help!
    I seem to have everything right, however, when I open the furnace's GUI, I can't move the items within my inventory. It seems to reset when i pick it up or something. I suspect it's something within the slot class, but cannot fix it. I would love some help on this, please and thank you. (Using Modloader to code).
    :steve_tearful:


    package net.minecraft.src;
    import java.util.Random;
    public class mod_Test extends BaseMod
    {
    public static final Block testingBlock = (new BlockTest(180, false)).setHardness(7.0F).setBlockName("testingBlock");
    public static int testingBlockSide = ModLoader.addOverride("/terrain.png", "/test_textures/testSide.png");
    public static int testingBlockFront = ModLoader.addOverride("/terrain.png", "/test_textures/testFront.png");
    public static int testingBlockTop = ModLoader.addOverride("/terrain.png", "/test_textures/testTop.png");
    public static int testintBlockBottom = ModLoader.addOverride("/terrain.png", "/test_textures/testBottom.png");
    
    public mod_Test()
    {
    ModLoader.addName(testingBlock, "Reading This = Working Name :)");
    ModLoader.registerBlock(testingBlock);
    ModLoader.registerTileEntity(net.minecraft.src.TileEntityTest.class, "Test");
    
    ModLoader.addRecipe(new ItemStack(mod_Test.testingBlock, 1), new Object[] {
    "*", Character.valueOf('*'), Block.dirt
    });
    }
    public String getVersion()
    {
    return "3.14159265";
    }
    public void load()
    {
    }
    }




    package net.minecraft.src;
    import java.util.Random;
    
    public class BlockTest extends BlockContainer
    {
    /**
    * Is the random generator used by furnace to drop the inventory contents in random directions.
    */
    private Random testRand = 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 keepTestInventory = false;
    
    protected BlockTest(int par1, boolean par2)
    {
    super(par1, Material.iron);
    this.isActive = par2;
    this.blockIndexInTexture = 45;
    }
    
    /**
    * Returns the ID of the items to drop on destruction.
    */
    public int idDropped(int par1, Random par2Random, int par3)
    {
    return mod_Test.testingBlock.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 var5 = par1World.getBlockId(par2, par3, par4 - 1);
    int var6 = par1World.getBlockId(par2, par3, par4 + 1);
    int var7 = par1World.getBlockId(par2 - 1, par3, par4);
    int var8 = par1World.getBlockId(par2 + 1, par3, par4);
    byte var9 = 3;
    
    if (Block.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var6])
    {
    var9 = 3;
    }
    
    if (Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var5])
    {
    var9 = 2;
    }
    
    if (Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var8])
    {
    var9 = 5;
    }
    
    if (Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var7])
    {
    var9 = 4;
    }
    
    par1World.setBlockMetadataWithNotify(par2, par3, par4, var9);
    }
    }
    
    /**
    * Retrieves the block texture to use based on the display side. Args: iBlockAccess, x, y, z, side
    */
    public int getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)
    {
    if (par5 == 1)
    {
    return this.blockIndexInTexture + 17;
    }
    else if (par5 == 0)
    {
    return this.blockIndexInTexture + 17;
    }
    else
    {
    int var6 = par1IBlockAccess.getBlockMetadata(par2, par3, par4);
    return par5 != var6 ? this.blockIndexInTexture : (this.isActive ? this.blockIndexInTexture + 16 : this.blockIndexInTexture - 1);
    }
    }
    
    /**
    * A randomly called display update to be able to add particles or other items for display
    */
    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
    if (this.isActive)
    {
    int var6 = par1World.getBlockMetadata(par2, par3, par4);
    float var7 = (float)par2 + 0.5F;
    float var8 = (float)par3 + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F;
    float var9 = (float)par4 + 0.5F;
    float var10 = 0.52F;
    float var11 = par5Random.nextFloat() * 0.6F - 0.3F;
    
    if (var6 == 4)
    {
    par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
    par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
    }
    else if (var6 == 5)
    {
    par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
    par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
    }
    else if (var6 == 2)
    {
    par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D);
    par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D);
    }
    else if (var6 == 3)
    {
    par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D);
    par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D);
    }
    }
    }
    
    /**
    * Returns the block texture based on the side being looked at. Args: side
    */
    public int getBlockTextureFromSide(int par1)
    {
    return par1 == 1 ? this.blockIndexInTexture + 17 : (par1 == 0 ? this.blockIndexInTexture + 17 : (par1 == 3 ? this.blockIndexInTexture - 1 : this.blockIndexInTexture));
    }
    
    /**
    * Called upon block activation (right click on the block.)
    */
    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
    {
    if (par1World.isRemote)
    {
    return true;
    }
    else
    {
    TileEntityTest var10 = (TileEntityTest)par1World.getBlockTileEntity(par2, par3, par4);
    
    if (var10 != null)
    {
    ModLoader.openGUI(ModLoader.getMinecraftInstance().thePlayer, new GuiTest(ModLoader.getMinecraftInstance().thePlayer.inventory, var10));
    }
    
    return true;
    }
    }
    
    /**
    * Update which block ID the furnace is using depending on whether or not it is burning
    */
    public static void updateTestBlockState(boolean par0, World par1World, int par2, int par3, int par4)
    {
    int var5 = par1World.getBlockMetadata(par2, par3, par4);
    TileEntity var6 = par1World.getBlockTileEntity(par2, par3, par4);
    keepTestInventory = true;
    
    if (par0)
    {
    par1World.setBlockWithNotify(par2, par3, par4, mod_Test.testingBlock.blockID);
    }
    else
    {
    par1World.setBlockWithNotify(par2, par3, par4, mod_Test.testingBlock.blockID);
    }
    
    keepTestInventory = false;
    par1World.setBlockMetadataWithNotify(par2, par3, par4, var5);
    
    if (var6 != null)
    {
    var6.validate();
    par1World.setBlockTileEntity(par2, par3, par4, var6);
    }
    }
    
    /**
    * Returns a new instance of a block's tile entity class. Called on placing the block.
    */
    public TileEntity createNewTileEntity(World par1World)
    {
    return new TileEntityTest();
    }
    
    /**
    * Called when the block is placed in the world.
    */
    public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving)
    {
    int var6 = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
    
    if (var6 == 0)
    {
    par1World.setBlockMetadataWithNotify(par2, par3, par4, 2);
    }
    
    if (var6 == 1)
    {
    par1World.setBlockMetadataWithNotify(par2, par3, par4, 5);
    }
    
    if (var6 == 2)
    {
    par1World.setBlockMetadataWithNotify(par2, par3, par4, 3);
    }
    
    if (var6 == 3)
    {
    par1World.setBlockMetadataWithNotify(par2, par3, par4, 4);
    }
    }
    
    /**
    * 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 (!keepTestInventory)
    {
    TileEntityTest var7 = (TileEntityTest)par1World.getBlockTileEntity(par2, par3, par4);
    
    if (var7 != null)
    {
    for (int var8 = 0; var8 < var7.getSizeInventory(); ++var8)
    {
    ItemStack var9 = var7.getStackInSlot(var8);
    
    if (var9 != null)
    {
    float var10 = this.testRand.nextFloat() * 0.8F + 0.1F;
    float var11 = this.testRand.nextFloat() * 0.8F + 0.1F;
    float var12 = this.testRand.nextFloat() * 0.8F + 0.1F;
    
    while (var9.stackSize > 0)
    {
    int var13 = this.testRand.nextInt(21) + 10;
    
    if (var13 > var9.stackSize)
    {
    var13 = var9.stackSize;
    }
    
    var9.stackSize -= var13;
    EntityItem var14 = new EntityItem(par1World, (double)((float)par2 + var10), (double)((float)par3 + var11), (double)((float)par4 + var12), new ItemStack(var9.itemID, var13, var9.getItemDamage()));
    
    if (var9.hasTagCompound())
    {
    var14.getEntityItem().setTagCompound((NBTTagCompound)var9.getTagCompound().copy());
    }
    
    float var15 = 0.05F;
    var14.motionX = (double)((float)this.testRand.nextGaussian() * var15);
    var14.motionY = (double)((float)this.testRand.nextGaussian() * var15 + 0.2F);
    var14.motionZ = (double)((float)this.testRand.nextGaussian() * var15);
    par1World.spawnEntityInWorld(var14);
    }
    }
    }
    }
    }
    
    super.breakBlock(par1World, par2, par3, par4, par5, par6);
    }
    }


    package net.minecraft.src;
    
    public class ContainerTest extends Container
    {
    private TileEntityTest test;
    private int lastCookTime = 0;
    private int lastBurnTime = 0;
    private int lastItemBurnTime = 0;
    
    public ContainerTest(InventoryPlayer par1InventoryPlayer, TileEntityTest par2TileEntityTest)
    {
    this.test = par2TileEntityTest;
    this.addSlotToContainer(new Slot(par2TileEntityTest, 0, 56, 17));
    this.addSlotToContainer(new Slot(par2TileEntityTest, 1, 56, 53));
    this.addSlotToContainer(new SlotFurnace(par1InventoryPlayer.player, par2TileEntityTest, 2, 116, 35));
    int var3;
    
    for (var3 = 0; var3 < 3; ++var3)
    {
    for (int var4 = 0; var4 < 9; ++var4)
    {
    this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18));
    }
    }
    
    for (var3 = 0; var3 < 9; ++var3)
    {
    this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142));
    }
    }
    
    public void addCraftingToCrafters(ICrafting par1ICrafting)
    {
    super.addCraftingToCrafters(par1ICrafting);
    par1ICrafting.sendProgressBarUpdate(this, 0, this.test.testCookTime);
    par1ICrafting.sendProgressBarUpdate(this, 1, this.test.testBurnTime);
    par1ICrafting.sendProgressBarUpdate(this, 2, this.test.currentItemBurnTime);
    }
    
    /**
    * Looks for changes made in the container, sends them to every listener.
    */
    public void detectAndSendChanges()
    {
    super.detectAndSendChanges();
    
    for (int var1 = 0; var1 < this.crafters.size(); ++var1)
    {
    ICrafting var2 = (ICrafting)this.crafters.get(var1);
    
    if (this.lastCookTime != this.test.testCookTime)
    {
    var2.sendProgressBarUpdate(this, 0, this.test.testCookTime);
    }
    
    if (this.lastBurnTime != this.test.testBurnTime)
    {
    var2.sendProgressBarUpdate(this, 1, this.test.testBurnTime);
    }
    
    if (this.lastItemBurnTime != this.test.currentItemBurnTime)
    {
    var2.sendProgressBarUpdate(this, 2, this.test.currentItemBurnTime);
    }
    }
    
    this.lastCookTime = this.test.testCookTime;
    this.lastBurnTime = this.test.testBurnTime;
    this.lastItemBurnTime = this.test.currentItemBurnTime;
    }
    
    public void updateProgressBar(int par1, int par2)
    {
    if (par1 == 0)
    {
    this.test.testCookTime = par2;
    }
    
    if (par1 == 1)
    {
    this.test.testBurnTime = par2;
    }
    
    if (par1 == 2)
    {
    this.test.currentItemBurnTime = par2;
    }
    }
    
    public boolean canInteractWith(EntityPlayer par1EntityPlayer)
    {
    return this.test.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 var3 = null;
    Slot var4 = (Slot)this.inventorySlots.get(par2);
    
    if (var4 != null && var4.getHasStack())
    {
    ItemStack var5 = var4.getStack();
    var3 = var5.copy();
    
    if (par2 == 2)
    {
    if (!this.mergeItemStack(var5, 3, 39, true))
    {
    return null;
    }
    
    var4.onSlotChange(var5, var3);
    }
    else if (par2 != 1 && par2 != 0)
    {
    if (TestRecipes.smelting().getSmeltingResult(var5.getItem().itemID) != null)
    {
    if (!this.mergeItemStack(var5, 0, 1, false))
    {
    return null;
    }
    }
    else if (TileEntityTest.isItemFuel(var5))
    {
    if (!this.mergeItemStack(var5, 1, 2, false))
    {
    return null;
    }
    }
    else if (par2 >= 3 && par2 < 30)
    {
    if (!this.mergeItemStack(var5, 30, 39, false))
    {
    return null;
    }
    }
    else if (par2 >= 30 && par2 < 39 && !this.mergeItemStack(var5, 3, 30, false))
    {
    return null;
    }
    }
    else if (!this.mergeItemStack(var5, 3, 39, false))
    {
    return null;
    }
    
    if (var5.stackSize == 0)
    {
    var4.putStack((ItemStack)null);
    }
    else
    {
    var4.onSlotChanged();
    }
    
    if (var5.stackSize == var3.stackSize)
    {
    return null;
    }
    
    var4.onPickupFromSlot(par1EntityPlayer, var5);
    }
    
    return var3;
    }
    }


    package net.minecraft.src;
    import org.lwjgl.opengl.GL11;
    
    public class GuiTest extends GuiContainer
    {
    private TileEntityTest testInventory;
    
    public GuiTest(InventoryPlayer par1InventoryPlayer, TileEntityTest par2TileEntityTest)
    {
    super(new ContainerTest(par1InventoryPlayer, par2TileEntityTest));
    this.testInventory = par2TileEntityTest;
    }
    
    /**
    * Draw the foreground layer for the GuiContainer (everything in front of the items)
    */
    protected void drawGuiContainerForegroundLayer(int par1, int par2)
    {
    this.fontRenderer.drawString(StatCollector.translateToLocal("Testing"), 60, 6, 4210752);
    this.fontRenderer.drawString(StatCollector.translateToLocal("Testing 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)
    {
    int var4 = this.mc.renderEngine.getTexture("/test_textures/test_furnacegui.png");
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    this.mc.renderEngine.bindTexture(var4);
    int var5 = (this.width - this.xSize) / 2;
    int var6 = (this.height - this.ySize) / 2;
    this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize);
    int var7;
    
    if (this.testInventory.isBurning())
    {
    var7 = this.testInventory.getBurnTimeRemainingScaled(12);
    this.drawTexturedModalRect(var5 + 56, var6 + 36 + 12 - var7, 176, 12 - var7, 14, var7 + 2);
    }
    
    var7 = this.testInventory.getCookProgressScaled(24);
    this.drawTexturedModalRect(var5 + 79, var6 + 34, 176, 14, var7 + 1, 16);
    }
    }


    package net.minecraft.src;
    
    public class SlotTest extends Slot
    {
    /** The player that is using the GUI where this slot resides. */
    private EntityPlayer thePlayer;
    private int field_75228_b;
    
    public SlotTest(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 var2 = this.field_75228_b;
    float var3 = TestRecipes.smelting().getExperience(par1ItemStack.itemID);
    int var4;
    
    if (var3 == 0.0F)
    {
    var2 = 0;
    }
    else if (var3 < 1.0F)
    {
    var4 = MathHelper.floor_float((float)var2 * var3);
    
    if (var4 < MathHelper.ceiling_float_int((float)var2 * var3) && (float)Math.random() < (float)var2 * var3 - (float)var4)
    {
    ++var4;
    }
    
    var2 = var4;
    }
    
    while (var2 > 0)
    {
    var4 = EntityXPOrb.getXPSplit(var2);
    var2 -= var4;
    this.thePlayer.worldObj.spawnEntityInWorld(new EntityXPOrb(this.thePlayer.worldObj, this.thePlayer.posX, this.thePlayer.posY + 0.5D, this.thePlayer.posZ + 0.5D, var4));
    }
    }
    
    this.field_75228_b = 0;
    }
    
    }


    package net.minecraft.src;
    
    public class TileEntityTest extends TileEntity implements IInventory
    {
    /**
    * The ItemStacks that hold the items currently being used in the furnace
    */
    private ItemStack[] testItemStacks = new ItemStack[3];
    
    /** The number of ticks that the furnace will keep burning */
    public int testBurnTime = 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 testCookTime = 0;
    
    /**
    * Returns the number of slots in the inventory.
    */
    public int getSizeInventory()
    {
    return this.testItemStacks.length;
    }
    
    /**
    * Returns the stack in slot i
    */
    public ItemStack getStackInSlot(int par1)
    {
    return this.testItemStacks[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.testItemStacks[par1] != null)
    {
    ItemStack var3;
    
    if (this.testItemStacks[par1].stackSize <= par2)
    {
    var3 = this.testItemStacks[par1];
    this.testItemStacks[par1] = null;
    return var3;
    }
    else
    {
    var3 = this.testItemStacks[par1].splitStack(par2);
    
    if (this.testItemStacks[par1].stackSize == 0)
    {
    this.testItemStacks[par1] = null;
    }
    
    return var3;
    }
    }
    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.testItemStacks[par1] != null)
    {
    ItemStack var2 = this.testItemStacks[par1];
    this.testItemStacks[par1] = null;
    return var2;
    }
    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.testItemStacks[par1] = par2ItemStack;
    
    if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit())
    {
    par2ItemStack.stackSize = this.getInventoryStackLimit();
    }
    }
    
    /**
    * Returns the name of the inventory.
    */
    public String getInvName()
    {
    return "container.test";
    }
    
    /**
    * Reads a tile entity from NBT.
    */
    public void readFromNBT(NBTTagCompound par1NBTTagCompound)
    {
    super.readFromNBT(par1NBTTagCompound);
    NBTTagList var2 = par1NBTTagCompound.getTagList("Items");
    this.testItemStacks = new ItemStack[this.getSizeInventory()];
    
    for (int var3 = 0; var3 < var2.tagCount(); ++var3)
    {
    NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3);
    byte var5 = var4.getByte("Slot");
    
    if (var5 >= 0 && var5 < this.testItemStacks.length)
    {
    this.testItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4);
    }
    }
    
    this.testBurnTime = par1NBTTagCompound.getShort("BurnTime");
    this.testCookTime = par1NBTTagCompound.getShort("CookTime");
    this.currentItemBurnTime = getItemBurnTime(this.testItemStacks[1]);
    }
    
    /**
    * Writes a tile entity to NBT.
    */
    public void writeToNBT(NBTTagCompound par1NBTTagCompound)
    {
    super.writeToNBT(par1NBTTagCompound);
    par1NBTTagCompound.setShort("BurnTime", (short)this.testBurnTime);
    par1NBTTagCompound.setShort("CookTime", (short)this.testCookTime);
    NBTTagList var2 = new NBTTagList();
    
    for (int var3 = 0; var3 < this.testItemStacks.length; ++var3)
    {
    if (this.testItemStacks[var3] != null)
    {
    NBTTagCompound var4 = new NBTTagCompound();
    var4.setByte("Slot", (byte)var3);
    this.testItemStacks[var3].writeToNBT(var4);
    var2.appendTag(var4);
    }
    }
    
    par1NBTTagCompound.setTag("Items", var2);
    }
    
    /**
    * 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;
    }
    
    /**
    * 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.testCookTime * par1 / 200;
    }
    
    /**
    * 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.testBurnTime * par1 / this.currentItemBurnTime;
    }
    
    /**
    * Returns true if the furnace is currently burning
    */
    public boolean isBurning()
    {
    return this.testBurnTime > 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 var1 = this.testBurnTime > 0;
    boolean var2 = false;
    
    if (this.testBurnTime > 0)
    {
    --this.testBurnTime;
    }
    
    if (!this.worldObj.isRemote)
    {
    if (this.testBurnTime == 0 && this.canSmelt())
    {
    this.currentItemBurnTime = this.testBurnTime = getItemBurnTime(this.testItemStacks[1]);
    
    if (this.testBurnTime > 0)
    {
    var2 = true;
    
    if (this.testItemStacks[1] != null)
    {
    --this.testItemStacks[1].stackSize;
    
    if (this.testItemStacks[1].stackSize == 0)
    {
    Item var3 = this.testItemStacks[1].getItem().getContainerItem();
    this.testItemStacks[1] = var3 != null ? new ItemStack(var3) : null;
    }
    }
    }
    }
    
    if (this.isBurning() && this.canSmelt())
    {
    ++this.testCookTime;
    
    if (this.testCookTime == 200)
    {
    this.testCookTime = 0;
    this.smeltItem();
    var2 = true;
    }
    }
    else
    {
    this.testCookTime = 0;
    }
    
    if (var1 != this.testBurnTime > 0)
    {
    var2 = true;
    BlockFurnace.updateFurnaceBlockState(this.testBurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
    }
    }
    
    if (var2)
    {
    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.testItemStacks[0] == null)
    {
    return false;
    }
    else
    {
    ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.testItemStacks[0].getItem().itemID);
    return var1 == null ? false : (this.testItemStacks[2] == null ? true : (!this.testItemStacks[2].isItemEqual(var1) ? false : (this.testItemStacks[2].stackSize < this.getInventoryStackLimit() && this.testItemStacks[2].stackSize < this.testItemStacks[2].getMaxStackSize() ? true : this.testItemStacks[2].stackSize < var1.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 var1 = TestRecipes.smelting().getSmeltingResult(this.testItemStacks[0].getItem().itemID);
    
    if (this.testItemStacks[2] == null)
    {
    this.testItemStacks[2] = var1.copy();
    }
    else if (this.testItemStacks[2].itemID == var1.itemID)
    {
    ++this.testItemStacks[2].stackSize;
    }
    
    --this.testItemStacks[0].stackSize;
    
    if (this.testItemStacks[0].stackSize <= 0)
    {
    Item var2 = this.testItemStacks[0].getItem().getContainerItem();
    this.testItemStacks[0] = var2 != null ? new ItemStack(var2) : null;
    }
    }
    }
    
    // Fuels *NEED TO DELETE OLD FUELS - COAL, BLAZE ROD, WOOD, ETC.*
    public static int getItemBurnTime(ItemStack par0ItemStack)
    {
    if (par0ItemStack == null)
    {
    return 0;
    }
    else
    {
    int var1 = par0ItemStack.getItem().itemID;
    Item var2 = par0ItemStack.getItem();
    
    if (var1 < 256 && Block.blocksList[var1] != null)
    {
    Block var3 = Block.blocksList[var1];
    }
    
    return var2 instanceof ItemTool && ((ItemTool)var2).getToolMaterialName().equals("WOOD") ? 200 : (var2 instanceof ItemSword && ((ItemSword)var2).getToolMaterialName().equals("WOOD") ? 200 : (var2 instanceof ItemHoe && ((ItemHoe)var2).func_77842_f().equals("WOOD") ? 200 : (var1 == Item.stick.itemID ? 100 : (var1 == Item.coal.itemID ? 1600 : (var1 == Item.bucketLava.itemID ? 20000 : (var1 == Block.sapling.blockID ? 100 : (var1 == Item.blazeRod.itemID ? 2400 : ModLoader.addAllFuel(par0ItemStack.itemID, par0ItemStack.getItemDamage()))))))));
    }
    }
    
    /**
    * 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() {}
    }


    package net.minecraft.src;
    import java.util.HashMap;
    import java.util.Map;
    
    public class TestRecipes
    {
    private static final TestRecipes smeltingBase = new TestRecipes();
    private Map smeltingList;
    private Map experienceList = new HashMap();
    
    public static final TestRecipes smelting()
    {
    return smeltingBase;
    }
    
    private TestRecipes()
    {
    smeltingList = new HashMap();
    addSmelting(Block.dirt.blockID, new ItemStack(Item.diamond));
    }
    
    public void addSmelting(int i, ItemStack itemstack)
    {
    smeltingList.put(Integer.valueOf(i), itemstack);
    }
    
    public ItemStack getSmeltingResult(int i)
    {
    return (ItemStack)smeltingList.get(Integer.valueOf(i));
    }
    
    public Map getSmeltingList()
    {
    return smeltingList;
    }
    
    public float getExperience(int par1)
    {
    return this.experienceList.containsKey(Integer.valueOf(par1)) ? ((Float)this.experienceList.get(Integer.valueOf(par1))).floatValue() : 0.0F;
    }
    
    }
    Posted in: Modification Development
  • 0

    posted a message on Trouble w/Custom Simple Furnace [1.4.7] *Please Help*
    I seem to have everything right, however, when I open the furnace's GUI, I can't move the items within my inventory. It seems to reset when i pick it up or something. I suspect it's something within the slot class, but cannot fix it. I would love some help on this, please and thank you. (Using Modloader to code).
    :steve_tearful:


    package net.minecraft.src;
    import java.util.Random;
    public class mod_Test extends BaseMod
    {
    public static final Block testingBlock = (new BlockTest(180, false)).setHardness(7.0F).setBlockName("testingBlock");
    public static int testingBlockSide = ModLoader.addOverride("/terrain.png", "/test_textures/testSide.png");
    public static int testingBlockFront = ModLoader.addOverride("/terrain.png", "/test_textures/testFront.png");
    public static int testingBlockTop = ModLoader.addOverride("/terrain.png", "/test_textures/testTop.png");
    public static int testintBlockBottom = ModLoader.addOverride("/terrain.png", "/test_textures/testBottom.png");
    
    public mod_Test()
    {
    ModLoader.addName(testingBlock, "Reading This = Working Name :)");
    ModLoader.registerBlock(testingBlock);
    ModLoader.registerTileEntity(net.minecraft.src.TileEntityTest.class, "Test");
    
    ModLoader.addRecipe(new ItemStack(mod_Test.testingBlock, 1), new Object[] {
    "*", Character.valueOf('*'), Block.dirt
    });
    }
    public String getVersion()
    {
    return "3.14159265";
    }
    public void load()
    {
    }
    }




    package net.minecraft.src;
    import java.util.Random;
    
    public class BlockTest extends BlockContainer
    {
    /**
    * Is the random generator used by furnace to drop the inventory contents in random directions.
    */
    private Random testRand = 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 keepTestInventory = false;
    
    protected BlockTest(int par1, boolean par2)
    {
    super(par1, Material.iron);
    this.isActive = par2;
    this.blockIndexInTexture = 45;
    }
    
    /**
    * Returns the ID of the items to drop on destruction.
    */
    public int idDropped(int par1, Random par2Random, int par3)
    {
    return mod_Test.testingBlock.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 var5 = par1World.getBlockId(par2, par3, par4 - 1);
    int var6 = par1World.getBlockId(par2, par3, par4 + 1);
    int var7 = par1World.getBlockId(par2 - 1, par3, par4);
    int var8 = par1World.getBlockId(par2 + 1, par3, par4);
    byte var9 = 3;
    
    if (Block.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var6])
    {
    var9 = 3;
    }
    
    if (Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var5])
    {
    var9 = 2;
    }
    
    if (Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var8])
    {
    var9 = 5;
    }
    
    if (Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var7])
    {
    var9 = 4;
    }
    
    par1World.setBlockMetadataWithNotify(par2, par3, par4, var9);
    }
    }
    
    /**
    * Retrieves the block texture to use based on the display side. Args: iBlockAccess, x, y, z, side
    */
    public int getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)
    {
    if (par5 == 1)
    {
    return this.blockIndexInTexture + 17;
    }
    else if (par5 == 0)
    {
    return this.blockIndexInTexture + 17;
    }
    else
    {
    int var6 = par1IBlockAccess.getBlockMetadata(par2, par3, par4);
    return par5 != var6 ? this.blockIndexInTexture : (this.isActive ? this.blockIndexInTexture + 16 : this.blockIndexInTexture - 1);
    }
    }
    
    /**
    * A randomly called display update to be able to add particles or other items for display
    */
    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
    if (this.isActive)
    {
    int var6 = par1World.getBlockMetadata(par2, par3, par4);
    float var7 = (float)par2 + 0.5F;
    float var8 = (float)par3 + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F;
    float var9 = (float)par4 + 0.5F;
    float var10 = 0.52F;
    float var11 = par5Random.nextFloat() * 0.6F - 0.3F;
    
    if (var6 == 4)
    {
    par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
    par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
    }
    else if (var6 == 5)
    {
    par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
    par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D);
    }
    else if (var6 == 2)
    {
    par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D);
    par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D);
    }
    else if (var6 == 3)
    {
    par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D);
    par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D);
    }
    }
    }
    
    /**
    * Returns the block texture based on the side being looked at. Args: side
    */
    public int getBlockTextureFromSide(int par1)
    {
    return par1 == 1 ? this.blockIndexInTexture + 17 : (par1 == 0 ? this.blockIndexInTexture + 17 : (par1 == 3 ? this.blockIndexInTexture - 1 : this.blockIndexInTexture));
    }
    
    /**
    * Called upon block activation (right click on the block.)
    */
    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
    {
    if (par1World.isRemote)
    {
    return true;
    }
    else
    {
    TileEntityTest var10 = (TileEntityTest)par1World.getBlockTileEntity(par2, par3, par4);
    
    if (var10 != null)
    {
    ModLoader.openGUI(ModLoader.getMinecraftInstance().thePlayer, new GuiTest(ModLoader.getMinecraftInstance().thePlayer.inventory, var10));
    }
    
    return true;
    }
    }
    
    /**
    * Update which block ID the furnace is using depending on whether or not it is burning
    */
    public static void updateTestBlockState(boolean par0, World par1World, int par2, int par3, int par4)
    {
    int var5 = par1World.getBlockMetadata(par2, par3, par4);
    TileEntity var6 = par1World.getBlockTileEntity(par2, par3, par4);
    keepTestInventory = true;
    
    if (par0)
    {
    par1World.setBlockWithNotify(par2, par3, par4, mod_Test.testingBlock.blockID);
    }
    else
    {
    par1World.setBlockWithNotify(par2, par3, par4, mod_Test.testingBlock.blockID);
    }
    
    keepTestInventory = false;
    par1World.setBlockMetadataWithNotify(par2, par3, par4, var5);
    
    if (var6 != null)
    {
    var6.validate();
    par1World.setBlockTileEntity(par2, par3, par4, var6);
    }
    }
    
    /**
    * Returns a new instance of a block's tile entity class. Called on placing the block.
    */
    public TileEntity createNewTileEntity(World par1World)
    {
    return new TileEntityTest();
    }
    
    /**
    * Called when the block is placed in the world.
    */
    public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving)
    {
    int var6 = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
    
    if (var6 == 0)
    {
    par1World.setBlockMetadataWithNotify(par2, par3, par4, 2);
    }
    
    if (var6 == 1)
    {
    par1World.setBlockMetadataWithNotify(par2, par3, par4, 5);
    }
    
    if (var6 == 2)
    {
    par1World.setBlockMetadataWithNotify(par2, par3, par4, 3);
    }
    
    if (var6 == 3)
    {
    par1World.setBlockMetadataWithNotify(par2, par3, par4, 4);
    }
    }
    
    /**
    * 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 (!keepTestInventory)
    {
    TileEntityTest var7 = (TileEntityTest)par1World.getBlockTileEntity(par2, par3, par4);
    
    if (var7 != null)
    {
    for (int var8 = 0; var8 < var7.getSizeInventory(); ++var8)
    {
    ItemStack var9 = var7.getStackInSlot(var8);
    
    if (var9 != null)
    {
    float var10 = this.testRand.nextFloat() * 0.8F + 0.1F;
    float var11 = this.testRand.nextFloat() * 0.8F + 0.1F;
    float var12 = this.testRand.nextFloat() * 0.8F + 0.1F;
    
    while (var9.stackSize > 0)
    {
    int var13 = this.testRand.nextInt(21) + 10;
    
    if (var13 > var9.stackSize)
    {
    var13 = var9.stackSize;
    }
    
    var9.stackSize -= var13;
    EntityItem var14 = new EntityItem(par1World, (double)((float)par2 + var10), (double)((float)par3 + var11), (double)((float)par4 + var12), new ItemStack(var9.itemID, var13, var9.getItemDamage()));
    
    if (var9.hasTagCompound())
    {
    var14.getEntityItem().setTagCompound((NBTTagCompound)var9.getTagCompound().copy());
    }
    
    float var15 = 0.05F;
    var14.motionX = (double)((float)this.testRand.nextGaussian() * var15);
    var14.motionY = (double)((float)this.testRand.nextGaussian() * var15 + 0.2F);
    var14.motionZ = (double)((float)this.testRand.nextGaussian() * var15);
    par1World.spawnEntityInWorld(var14);
    }
    }
    }
    }
    }
    
    super.breakBlock(par1World, par2, par3, par4, par5, par6);
    }
    }


    package net.minecraft.src;
    
    public class ContainerTest extends Container
    {
    private TileEntityTest test;
    private int lastCookTime = 0;
    private int lastBurnTime = 0;
    private int lastItemBurnTime = 0;
    
    public ContainerTest(InventoryPlayer par1InventoryPlayer, TileEntityTest par2TileEntityTest)
    {
    this.test = par2TileEntityTest;
    this.addSlotToContainer(new Slot(par2TileEntityTest, 0, 56, 17));
    this.addSlotToContainer(new Slot(par2TileEntityTest, 1, 56, 53));
    this.addSlotToContainer(new SlotFurnace(par1InventoryPlayer.player, par2TileEntityTest, 2, 116, 35));
    int var3;
    
    for (var3 = 0; var3 < 3; ++var3)
    {
    for (int var4 = 0; var4 < 9; ++var4)
    {
    this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18));
    }
    }
    
    for (var3 = 0; var3 < 9; ++var3)
    {
    this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142));
    }
    }
    
    public void addCraftingToCrafters(ICrafting par1ICrafting)
    {
    super.addCraftingToCrafters(par1ICrafting);
    par1ICrafting.sendProgressBarUpdate(this, 0, this.test.testCookTime);
    par1ICrafting.sendProgressBarUpdate(this, 1, this.test.testBurnTime);
    par1ICrafting.sendProgressBarUpdate(this, 2, this.test.currentItemBurnTime);
    }
    
    /**
    * Looks for changes made in the container, sends them to every listener.
    */
    public void detectAndSendChanges()
    {
    super.detectAndSendChanges();
    
    for (int var1 = 0; var1 < this.crafters.size(); ++var1)
    {
    ICrafting var2 = (ICrafting)this.crafters.get(var1);
    
    if (this.lastCookTime != this.test.testCookTime)
    {
    var2.sendProgressBarUpdate(this, 0, this.test.testCookTime);
    }
    
    if (this.lastBurnTime != this.test.testBurnTime)
    {
    var2.sendProgressBarUpdate(this, 1, this.test.testBurnTime);
    }
    
    if (this.lastItemBurnTime != this.test.currentItemBurnTime)
    {
    var2.sendProgressBarUpdate(this, 2, this.test.currentItemBurnTime);
    }
    }
    
    this.lastCookTime = this.test.testCookTime;
    this.lastBurnTime = this.test.testBurnTime;
    this.lastItemBurnTime = this.test.currentItemBurnTime;
    }
    
    public void updateProgressBar(int par1, int par2)
    {
    if (par1 == 0)
    {
    this.test.testCookTime = par2;
    }
    
    if (par1 == 1)
    {
    this.test.testBurnTime = par2;
    }
    
    if (par1 == 2)
    {
    this.test.currentItemBurnTime = par2;
    }
    }
    
    public boolean canInteractWith(EntityPlayer par1EntityPlayer)
    {
    return this.test.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 var3 = null;
    Slot var4 = (Slot)this.inventorySlots.get(par2);
    
    if (var4 != null && var4.getHasStack())
    {
    ItemStack var5 = var4.getStack();
    var3 = var5.copy();
    
    if (par2 == 2)
    {
    if (!this.mergeItemStack(var5, 3, 39, true))
    {
    return null;
    }
    
    var4.onSlotChange(var5, var3);
    }
    else if (par2 != 1 && par2 != 0)
    {
    if (TestRecipes.smelting().getSmeltingResult(var5.getItem().itemID) != null)
    {
    if (!this.mergeItemStack(var5, 0, 1, false))
    {
    return null;
    }
    }
    else if (TileEntityTest.isItemFuel(var5))
    {
    if (!this.mergeItemStack(var5, 1, 2, false))
    {
    return null;
    }
    }
    else if (par2 >= 3 && par2 < 30)
    {
    if (!this.mergeItemStack(var5, 30, 39, false))
    {
    return null;
    }
    }
    else if (par2 >= 30 && par2 < 39 && !this.mergeItemStack(var5, 3, 30, false))
    {
    return null;
    }
    }
    else if (!this.mergeItemStack(var5, 3, 39, false))
    {
    return null;
    }
    
    if (var5.stackSize == 0)
    {
    var4.putStack((ItemStack)null);
    }
    else
    {
    var4.onSlotChanged();
    }
    
    if (var5.stackSize == var3.stackSize)
    {
    return null;
    }
    
    var4.onPickupFromSlot(par1EntityPlayer, var5);
    }
    
    return var3;
    }
    }


    package net.minecraft.src;
    import org.lwjgl.opengl.GL11;
    
    public class GuiTest extends GuiContainer
    {
    private TileEntityTest testInventory;
    
    public GuiTest(InventoryPlayer par1InventoryPlayer, TileEntityTest par2TileEntityTest)
    {
    super(new ContainerTest(par1InventoryPlayer, par2TileEntityTest));
    this.testInventory = par2TileEntityTest;
    }
    
    /**
    * Draw the foreground layer for the GuiContainer (everything in front of the items)
    */
    protected void drawGuiContainerForegroundLayer(int par1, int par2)
    {
    this.fontRenderer.drawString(StatCollector.translateToLocal("Testing"), 60, 6, 4210752);
    this.fontRenderer.drawString(StatCollector.translateToLocal("Testing 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)
    {
    int var4 = this.mc.renderEngine.getTexture("/test_textures/test_furnacegui.png");
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    this.mc.renderEngine.bindTexture(var4);
    int var5 = (this.width - this.xSize) / 2;
    int var6 = (this.height - this.ySize) / 2;
    this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize);
    int var7;
    
    if (this.testInventory.isBurning())
    {
    var7 = this.testInventory.getBurnTimeRemainingScaled(12);
    this.drawTexturedModalRect(var5 + 56, var6 + 36 + 12 - var7, 176, 12 - var7, 14, var7 + 2);
    }
    
    var7 = this.testInventory.getCookProgressScaled(24);
    this.drawTexturedModalRect(var5 + 79, var6 + 34, 176, 14, var7 + 1, 16);
    }
    }


    package net.minecraft.src;
    
    public class SlotTest extends Slot
    {
    /** The player that is using the GUI where this slot resides. */
    private EntityPlayer thePlayer;
    private int field_75228_b;
    
    public SlotTest(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 var2 = this.field_75228_b;
    float var3 = TestRecipes.smelting().getExperience(par1ItemStack.itemID);
    int var4;
    
    if (var3 == 0.0F)
    {
    var2 = 0;
    }
    else if (var3 < 1.0F)
    {
    var4 = MathHelper.floor_float((float)var2 * var3);
    
    if (var4 < MathHelper.ceiling_float_int((float)var2 * var3) && (float)Math.random() < (float)var2 * var3 - (float)var4)
    {
    ++var4;
    }
    
    var2 = var4;
    }
    
    while (var2 > 0)
    {
    var4 = EntityXPOrb.getXPSplit(var2);
    var2 -= var4;
    this.thePlayer.worldObj.spawnEntityInWorld(new EntityXPOrb(this.thePlayer.worldObj, this.thePlayer.posX, this.thePlayer.posY + 0.5D, this.thePlayer.posZ + 0.5D, var4));
    }
    }
    
    this.field_75228_b = 0;
    }
    
    }


    package net.minecraft.src;
    
    public class TileEntityTest extends TileEntity implements IInventory
    {
    /**
    * The ItemStacks that hold the items currently being used in the furnace
    */
    private ItemStack[] testItemStacks = new ItemStack[3];
    
    /** The number of ticks that the furnace will keep burning */
    public int testBurnTime = 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 testCookTime = 0;
    
    /**
    * Returns the number of slots in the inventory.
    */
    public int getSizeInventory()
    {
    return this.testItemStacks.length;
    }
    
    /**
    * Returns the stack in slot i
    */
    public ItemStack getStackInSlot(int par1)
    {
    return this.testItemStacks[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.testItemStacks[par1] != null)
    {
    ItemStack var3;
    
    if (this.testItemStacks[par1].stackSize <= par2)
    {
    var3 = this.testItemStacks[par1];
    this.testItemStacks[par1] = null;
    return var3;
    }
    else
    {
    var3 = this.testItemStacks[par1].splitStack(par2);
    
    if (this.testItemStacks[par1].stackSize == 0)
    {
    this.testItemStacks[par1] = null;
    }
    
    return var3;
    }
    }
    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.testItemStacks[par1] != null)
    {
    ItemStack var2 = this.testItemStacks[par1];
    this.testItemStacks[par1] = null;
    return var2;
    }
    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.testItemStacks[par1] = par2ItemStack;
    
    if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit())
    {
    par2ItemStack.stackSize = this.getInventoryStackLimit();
    }
    }
    
    /**
    * Returns the name of the inventory.
    */
    public String getInvName()
    {
    return "container.test";
    }
    
    /**
    * Reads a tile entity from NBT.
    */
    public void readFromNBT(NBTTagCompound par1NBTTagCompound)
    {
    super.readFromNBT(par1NBTTagCompound);
    NBTTagList var2 = par1NBTTagCompound.getTagList("Items");
    this.testItemStacks = new ItemStack[this.getSizeInventory()];
    
    for (int var3 = 0; var3 < var2.tagCount(); ++var3)
    {
    NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3);
    byte var5 = var4.getByte("Slot");
    
    if (var5 >= 0 && var5 < this.testItemStacks.length)
    {
    this.testItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4);
    }
    }
    
    this.testBurnTime = par1NBTTagCompound.getShort("BurnTime");
    this.testCookTime = par1NBTTagCompound.getShort("CookTime");
    this.currentItemBurnTime = getItemBurnTime(this.testItemStacks[1]);
    }
    
    /**
    * Writes a tile entity to NBT.
    */
    public void writeToNBT(NBTTagCompound par1NBTTagCompound)
    {
    super.writeToNBT(par1NBTTagCompound);
    par1NBTTagCompound.setShort("BurnTime", (short)this.testBurnTime);
    par1NBTTagCompound.setShort("CookTime", (short)this.testCookTime);
    NBTTagList var2 = new NBTTagList();
    
    for (int var3 = 0; var3 < this.testItemStacks.length; ++var3)
    {
    if (this.testItemStacks[var3] != null)
    {
    NBTTagCompound var4 = new NBTTagCompound();
    var4.setByte("Slot", (byte)var3);
    this.testItemStacks[var3].writeToNBT(var4);
    var2.appendTag(var4);
    }
    }
    
    par1NBTTagCompound.setTag("Items", var2);
    }
    
    /**
    * 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;
    }
    
    /**
    * 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.testCookTime * par1 / 200;
    }
    
    /**
    * 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.testBurnTime * par1 / this.currentItemBurnTime;
    }
    
    /**
    * Returns true if the furnace is currently burning
    */
    public boolean isBurning()
    {
    return this.testBurnTime > 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 var1 = this.testBurnTime > 0;
    boolean var2 = false;
    
    if (this.testBurnTime > 0)
    {
    --this.testBurnTime;
    }
    
    if (!this.worldObj.isRemote)
    {
    if (this.testBurnTime == 0 && this.canSmelt())
    {
    this.currentItemBurnTime = this.testBurnTime = getItemBurnTime(this.testItemStacks[1]);
    
    if (this.testBurnTime > 0)
    {
    var2 = true;
    
    if (this.testItemStacks[1] != null)
    {
    --this.testItemStacks[1].stackSize;
    
    if (this.testItemStacks[1].stackSize == 0)
    {
    Item var3 = this.testItemStacks[1].getItem().getContainerItem();
    this.testItemStacks[1] = var3 != null ? new ItemStack(var3) : null;
    }
    }
    }
    }
    
    if (this.isBurning() && this.canSmelt())
    {
    ++this.testCookTime;
    
    if (this.testCookTime == 200)
    {
    this.testCookTime = 0;
    this.smeltItem();
    var2 = true;
    }
    }
    else
    {
    this.testCookTime = 0;
    }
    
    if (var1 != this.testBurnTime > 0)
    {
    var2 = true;
    BlockFurnace.updateFurnaceBlockState(this.testBurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
    }
    }
    
    if (var2)
    {
    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.testItemStacks[0] == null)
    {
    return false;
    }
    else
    {
    ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.testItemStacks[0].getItem().itemID);
    return var1 == null ? false : (this.testItemStacks[2] == null ? true : (!this.testItemStacks[2].isItemEqual(var1) ? false : (this.testItemStacks[2].stackSize < this.getInventoryStackLimit() && this.testItemStacks[2].stackSize < this.testItemStacks[2].getMaxStackSize() ? true : this.testItemStacks[2].stackSize < var1.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 var1 = TestRecipes.smelting().getSmeltingResult(this.testItemStacks[0].getItem().itemID);
    
    if (this.testItemStacks[2] == null)
    {
    this.testItemStacks[2] = var1.copy();
    }
    else if (this.testItemStacks[2].itemID == var1.itemID)
    {
    ++this.testItemStacks[2].stackSize;
    }
    
    --this.testItemStacks[0].stackSize;
    
    if (this.testItemStacks[0].stackSize <= 0)
    {
    Item var2 = this.testItemStacks[0].getItem().getContainerItem();
    this.testItemStacks[0] = var2 != null ? new ItemStack(var2) : null;
    }
    }
    }
    
    // Fuels *NEED TO DELETE OLD FUELS - COAL, BLAZE ROD, WOOD, ETC.*
    public static int getItemBurnTime(ItemStack par0ItemStack)
    {
    if (par0ItemStack == null)
    {
    return 0;
    }
    else
    {
    int var1 = par0ItemStack.getItem().itemID;
    Item var2 = par0ItemStack.getItem();
    
    if (var1 < 256 && Block.blocksList[var1] != null)
    {
    Block var3 = Block.blocksList[var1];
    }
    
    return var2 instanceof ItemTool && ((ItemTool)var2).getToolMaterialName().equals("WOOD") ? 200 : (var2 instanceof ItemSword && ((ItemSword)var2).getToolMaterialName().equals("WOOD") ? 200 : (var2 instanceof ItemHoe && ((ItemHoe)var2).func_77842_f().equals("WOOD") ? 200 : (var1 == Item.stick.itemID ? 100 : (var1 == Item.coal.itemID ? 1600 : (var1 == Item.bucketLava.itemID ? 20000 : (var1 == Block.sapling.blockID ? 100 : (var1 == Item.blazeRod.itemID ? 2400 : ModLoader.addAllFuel(par0ItemStack.itemID, par0ItemStack.getItemDamage()))))))));
    }
    }
    
    /**
    * 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() {}
    }


    package net.minecraft.src;
    import java.util.HashMap;
    import java.util.Map;
    
    public class TestRecipes
    {
    private static final TestRecipes smeltingBase = new TestRecipes();
    private Map smeltingList;
    private Map experienceList = new HashMap();
    
    public static final TestRecipes smelting()
    {
    return smeltingBase;
    }
    
    private TestRecipes()
    {
    smeltingList = new HashMap();
    addSmelting(Block.dirt.blockID, new ItemStack(Item.diamond));
    }
    
    public void addSmelting(int i, ItemStack itemstack)
    {
    smeltingList.put(Integer.valueOf(i), itemstack);
    }
    
    public ItemStack getSmeltingResult(int i)
    {
    return (ItemStack)smeltingList.get(Integer.valueOf(i));
    }
    
    public Map getSmeltingList()
    {
    return smeltingList;
    }
    
    public float getExperience(int par1)
    {
    return this.experienceList.containsKey(Integer.valueOf(par1)) ? ((Float)this.experienceList.get(Integer.valueOf(par1))).floatValue() : 0.0F;
    }
    
    }
    Posted in: Modification Development
  • 0

    posted a message on Popgalops Beginner-Advanced Modloader Modding Tutorials (Taking requests)
    Do you think you could do a tutorial on how to make a custom furnace? Thank you. I have tried and tried my self and can't seem to get it just right. Always end up with errors.
    Posted in: Mapping and Modding Tutorials
  • 0

    posted a message on Error Report help [MCP Modding]
    Quote from Erinador

    Where you have setHardness and such behind it add:
    .setBlockName("compactCoal")



    I'm guessing that this does not work anymore? I am trying to use the block that i just created to create another block, but it seems that using mod_Compactcoal.compactcoalBlock.blockID, does not work...
    "***","***","***", Character.valueOf('*'), mod_Compactcoal.compactcoalBlock.blockID
    Posted in: Modification Development
  • 0

    posted a message on Error Report help [MCP Modding]
    Quote from Erinador

    Where you have setHardness and such behind it add:
    .setBlockName("compactCoal")



    Awh man you are my hero! :-P Thanks!
    Posted in: Modification Development
  • To post a comment, please .