Jump to content

Recommended Posts

Posted

Heres my error:

 

 

2012-12-27 21:08:19 [iNFO] [sTDERR] Caused by: java.lang.ClassCastException: kore.korecraft.mod.TileEntityEssenceExtractor cannot be cast to net.minecraft.tileentity.TileEntityFurnace

2012-12-27 21:08:19 [iNFO] [sTDERR] at net.minecraft.block.BlockFurnace.onBlockActivated(BlockFurnace.java:175)

2012-12-27 21:08:19 [iNFO] [sTDERR] at net.minecraft.item.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:411)

2012-12-27 21:08:19 [iNFO] [sTDERR] at net.minecraft.network.NetServerHandler.handlePlace(NetServerHandler.java:578)

2012-12-27 21:08:19 [iNFO] [sTDERR] at net.minecraft.network.packet.Packet15Place.processPacket(Packet15Place.java:79)

2012-12-27 21:08:19 [iNFO] [sTDERR] at net.minecraft.network.MemoryConnection.processReadPackets(MemoryConnection.java:80)

2012-12-27 21:08:19 [iNFO] [sTDERR] at net.minecraft.network.NetServerHandler.networkTick(NetServerHandler.java:136)

2012-12-27 21:08:19 [iNFO] [sTDERR] at net.minecraft.network.NetworkListenThread.networkTick(NetworkListenThread.java:57)

2012-12-27 21:08:19 [iNFO] [sTDERR] ... 6 more

 

 

Heres my code:

 

Main Class:

 

 

GameRegistry.registerBlock(essenceExtractor, ItemBlock.class, "Essence Extractor");

GameRegistry.registerTileEntity(TileEntityEssenceExtractor.class, "tileEntityEssenceExtractor");

 

 

Gui:

 

 

package kore.korecraft.mod;

 

import net.minecraft.client.gui.inventory.GuiContainer;

import net.minecraft.entity.player.InventoryPlayer;

import net.minecraft.util.StatCollector;

import org.lwjgl.opengl.GL11;

 

public class GuiEssenceExtractor extends GuiContainer {

 

private TileEntityEssenceExtractor extractorInv;

 

        public GuiEssenceExtractor (InventoryPlayer inventoryPlayer, TileEntityEssenceExtractor tileEntity) {

                super(new ContainerEssenceExtractor(inventoryPlayer, tileEntity));

                this.extractorInv = tileEntity;

        }

 

        @Override

        protected void drawGuiContainerForegroundLayer(int param1, int param2) {

                //draw text and stuff here

                //the parameters for drawString are: string, x, y, color

                fontRenderer.drawString("Essence Extractor", 8, 6, 4210752);

                //draws "Inventory" or your regional equivalent

                fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752);

        }

 

        @Override

        protected void drawGuiContainerBackgroundLayer(float par1, int par2,

                        int par3) {

                //draw your Gui here, only thing you need to change is the path

                int texture = mc.renderEngine.getTexture("/Korecraft/GUI/EssenceExtractor.png");

                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);

                this.mc.renderEngine.bindTexture(texture);

                int x = (width - xSize) / 2;

                int y = (height - ySize) / 2;

                this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize);

               

                int var7;

                if (this.extractorInv.isBurning())

                {

                    var7 = this.extractorInv.getBurnTimeRemainingScaled(12);

                    this.drawTexturedModalRect(x + 31, y + 36 + 12 - var7, 176, 12 - var7, 14, var7 + 2);

                }

 

                var7 = this.extractorInv.getCookProgressScaled(24);

                this.drawTexturedModalRect(x + 54, y + 34, 176, 14, var7 + 1, 16);

        }

       

       

 

}

 

 

Container:

 

 

package kore.korecraft.mod;

 

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.entity.player.InventoryPlayer;

import net.minecraft.inventory.Container;

import net.minecraft.inventory.ICrafting;

import net.minecraft.inventory.Slot;

import net.minecraft.inventory.SlotFurnace;

import net.minecraft.item.ItemStack;

import cpw.mods.fml.relauncher.Side;

import cpw.mods.fml.relauncher.SideOnly;

 

public class ContainerEssenceExtractor extends Container {

 

        protected TileEntityEssenceExtractor tileEntity;

        private int lastCookTime = 0;

        private int lastBurnTime = 0;

        private int lastItemBurnTime = 0;

       

 

        public ContainerEssenceExtractor (InventoryPlayer inventoryPlayer, TileEntityEssenceExtractor te){

                tileEntity = te;

 

                //the Slot constructor takes the IInventory and the slot number in that it binds to

                //and the x-y coordinates it resides on-screen

                addSlotToContainer(new Slot(tileEntity, 0, 31, 17));

                addSlotToContainer(new Slot(tileEntity, 1, 31, 53));

                for (int i = 0; i < 3; i++) {

                        for (int j = 0; j < 3; j++) {

                        addSlotToContainer(new SlotFurnace(inventoryPlayer.player, (TileEntityEssenceExtractor)te, 2 + j + i * 3, 80 + j * 18, 17 + i * 18));

                        }

                }

               

 

                //commonly used vanilla code that adds the player's inventory

                bindPlayerInventory(inventoryPlayer);

        }

       

        public void addCraftingToCrafters(ICrafting par1ICrafting)

        {

            super.addCraftingToCrafters(par1ICrafting);

            par1ICrafting.sendProgressBarUpdate(this, 0, this.tileEntity.furnaceCookTime);

            par1ICrafting.sendProgressBarUpdate(this, 1, this.tileEntity.furnaceBurnTime);

            par1ICrafting.sendProgressBarUpdate(this, 2, this.tileEntity.currentItemBurnTime);

        }

       

        /**

        * Updates crafting matrix; called from onCraftMatrixChanged. Args: none

        */

        public void updateCraftingResults()

        {

            super.updateCraftingResults();

 

            for (int var1 = 0; var1 < this.crafters.size(); ++var1)

            {

                ICrafting var2 = (ICrafting)this.crafters.get(var1);

 

                if (this.lastCookTime != this.tileEntity.furnaceCookTime)

                {

                    var2.sendProgressBarUpdate(this, 0, this.tileEntity.furnaceCookTime);

                }

 

                if (this.lastBurnTime != this.tileEntity.furnaceBurnTime)

                {

                    var2.sendProgressBarUpdate(this, 1, this.tileEntity.furnaceBurnTime);

                }

            if (this.lastItemBurnTime != this.tileEntity.currentItemBurnTime)

            {

                var2.sendProgressBarUpdate(this, 2, this.tileEntity.currentItemBurnTime);

            }

            }

 

            this.lastCookTime = this.tileEntity.furnaceCookTime;

            this.lastBurnTime = this.tileEntity.furnaceBurnTime;

            this.lastItemBurnTime = this.tileEntity.currentItemBurnTime;

        }

       

        @SideOnly(Side.CLIENT)

        public void updateProgressBar(int par1, int par2)

        {

            if (par1 == 0)

            {

                this.tileEntity.furnaceCookTime = par2;

            }

 

            if (par1 == 1)

            {

                this.tileEntity.furnaceBurnTime = par2;

            }

 

            if (par1 == 2)

            {

                this.tileEntity.currentItemBurnTime = par2;

            }

        }

 

        @Override

        public boolean canInteractWith(EntityPlayer player) {

                return tileEntity.isUseableByPlayer(player);

        }

 

        protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) {

                for (int i = 0; i < 3; i++) {

                        for (int j = 0; j < 9; j++) {

                                addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9,

                                                8 + j * 18, 84 + i * 18));

                        }

                }

 

                for (int i = 0; i < 9; i++) {

                        addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142));

                }

        }

 

        @Override

        public ItemStack transferStackInSlot(EntityPlayer player, int slot) {

                ItemStack stack = null;

                Slot slotObject = (Slot) inventorySlots.get(slot);

 

                //null checks and checks if the item can be stacked (maxStackSize > 1)

                if (slotObject != null && slotObject.getHasStack()) {

                        ItemStack stackInSlot = slotObject.getStack();

                        stack = stackInSlot.copy();

 

                        //merges the item into player inventory since its in the tileEntity

                        if (slot < 9) {

                                if (!this.mergeItemStack(stackInSlot, 9, 45, true)) {

                                        return null;

                                }

                        }

                        //places it into the tileEntity is possible since its in the player inventory

                        else if (!this.mergeItemStack(stackInSlot, 0, 9, false)) {

                                return null;

                        }

 

                        if (stackInSlot.stackSize == 0) {

                                slotObject.putStack(null);

                        } else {

                                slotObject.onSlotChanged();

                        }

 

                        if (stackInSlot.stackSize == stack.stackSize) {

                                return null;

                        }

                        slotObject.onPickupFromSlot(player, stackInSlot);

                }

                return stack;

        }

}

 

 

Block:

 

 

package kore.korecraft.mod;

 

import java.util.Random;

 

import net.minecraft.block.Block;

import net.minecraft.block.BlockContainer;

import net.minecraft.block.material.Material;

import net.minecraft.entity.EntityLiving;

import net.minecraft.entity.item.EntityItem;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.item.ItemStack;

import net.minecraft.nbt.NBTTagCompound;

import net.minecraft.tileentity.TileEntity;

import net.minecraft.util.MathHelper;

import net.minecraft.world.IBlockAccess;

import net.minecraft.world.World;

import cpw.mods.fml.relauncher.Side;

import cpw.mods.fml.relauncher.SideOnly;

 

public class BlockEssenceExtractor extends BlockContainer

{

    /**

    * Is the random generator used by furnace to drop the inventory contents in random directions.

    */

    private Random furnaceRand = new Random();

 

    /** True if this is an active furnace, false if idle */

    private final boolean isActive;

 

    /**

    * This flag is used to prevent the furnace inventory to be dropped upon block removal, is used internally when the

    * furnace block changes from idle to active and vice-versa.

    */

    private static boolean keepFurnaceInventory = false;

 

    protected BlockEssenceExtractor(int par1)

    {

        super(par1, Material.rock);

        this.isActive = true;

        this.blockIndexInTexture = 45;

    }

 

    /**

    * Returns the ID of the items to drop on destruction.

    */

    public int idDropped(int par1, Random par2Random, int par3)

    {

        return Korecraft.essenceExtractor.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);

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * 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);

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * 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

        {

            TileEntityEssenceExtractor var10 = (TileEntityEssenceExtractor)par1World.getBlockTileEntity(par2, par3, par4);

 

            if (var10 != null)

            {

                par5EntityPlayer.openGui(Korecraft.instance, 1, par1World, par2, par3, par4);

            }

 

            return true;

        }

    }

 

    /**

    * Update which block ID the furnace is using depending on whether or not it is burning

    */

    public static void updateFurnaceBlockState(boolean par0, World par1World, int par2, int par3, int par4)

    {

        int var5 = par1World.getBlockMetadata(par2, par3, par4);

        TileEntity var6 = par1World.getBlockTileEntity(par2, par3, par4);

        keepFurnaceInventory = true;

 

        if (par0)

        {

            par1World.setBlockWithNotify(par2, par3, par4, Korecraft.essenceExtractor.blockID);

        }

        else

        {

            par1World.setBlockWithNotify(par2, par3, par4, Korecraft.essenceExtractor.blockID);

        }

 

        keepFurnaceInventory = 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 TileEntityEssenceExtractor();

    }

 

    /**

    * 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 (!keepFurnaceInventory)

        {

            TileEntityEssenceExtractor var7 = (TileEntityEssenceExtractor)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.furnaceRand.nextFloat() * 0.8F + 0.1F;

                        float var11 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;

                        float var12 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;

 

                        while (var9.stackSize > 0)

                        {

                            int var13 = this.furnaceRand.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.func_92014_d().setTagCompound((NBTTagCompound)var9.getTagCompound().copy());

                            }

 

                            float var15 = 0.05F;

                            var14.motionX = (double)((float)this.furnaceRand.nextGaussian() * var15);

                            var14.motionY = (double)((float)this.furnaceRand.nextGaussian() * var15 + 0.2F);

                            var14.motionZ = (double)((float)this.furnaceRand.nextGaussian() * var15);

                            par1World.spawnEntityInWorld(var14);

                        }

                    }

                }

            }

        }

 

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

    }

}

 

 

Tile Entity:

 

 

package kore.korecraft.mod;

 

import net.minecraft.block.Block;

import net.minecraft.block.material.Material;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.inventory.IInventory;

import net.minecraft.item.Item;

import net.minecraft.item.ItemBlock;

import net.minecraft.item.ItemHoe;

import net.minecraft.item.ItemStack;

import net.minecraft.item.ItemSword;

import net.minecraft.item.ItemTool;

import net.minecraft.item.crafting.FurnaceRecipes;

import net.minecraft.nbt.NBTTagCompound;

import net.minecraft.nbt.NBTTagList;

import net.minecraft.tileentity.TileEntity;

import net.minecraftforge.common.ForgeDirection;

import net.minecraftforge.common.ISidedInventory;

import cpw.mods.fml.common.registry.GameRegistry;

import cpw.mods.fml.relauncher.Side;

import cpw.mods.fml.relauncher.SideOnly;

 

public class TileEntityEssenceExtractor extends TileEntity implements IInventory, ISidedInventory

{

    /**

    * The ItemStacks that hold the items currently being used in the furnace

    */

    private ItemStack[] furnaceItemStacks = new ItemStack[11];

 

    /** The number of ticks that the furnace will keep burning */

    public int furnaceBurnTime = 0;

 

    /**

    * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for

    */

    public int currentItemBurnTime = 0;

 

    /** The number of ticks that the current item has been cooking for */

    public int furnaceCookTime = 0;

 

    /**

    * Returns the number of slots in the inventory.

    */

    public int getSizeInventory()

    {

        return this.furnaceItemStacks.length;

    }

 

    /**

    * Returns the stack in slot i

    */

    public ItemStack getStackInSlot(int par1)

    {

        return this.furnaceItemStacks[par1];

    }

 

    /**

    * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a

    * new stack.

    */

    public ItemStack decrStackSize(int par1, int par2)

    {

        if (this.furnaceItemStacks[par1] != null)

        {

            ItemStack var3;

 

            if (this.furnaceItemStacks[par1].stackSize <= par2)

            {

                var3 = this.furnaceItemStacks[par1];

                this.furnaceItemStacks[par1] = null;

                return var3;

            }

            else

            {

                var3 = this.furnaceItemStacks[par1].splitStack(par2);

 

                if (this.furnaceItemStacks[par1].stackSize == 0)

                {

                    this.furnaceItemStacks[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.furnaceItemStacks[par1] != null)

        {

            ItemStack var2 = this.furnaceItemStacks[par1];

            this.furnaceItemStacks[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.furnaceItemStacks[par1] = par2ItemStack;

 

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

        {

            par2ItemStack.stackSize = this.getInventoryStackLimit();

        }

    }

 

    /**

    * Returns the name of the inventory.

    */

    public String getInvName()

    {

        return "container.extractor";

    }

 

    /**

    * Reads a tile entity from NBT.

    */

    public void readFromNBT(NBTTagCompound par1NBTTagCompound)

    {

        super.readFromNBT(par1NBTTagCompound);

        NBTTagList var2 = par1NBTTagCompound.getTagList("Items");

        this.furnaceItemStacks = 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.furnaceItemStacks.length)

            {

                this.furnaceItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4);

            }

        }

 

        this.furnaceBurnTime = par1NBTTagCompound.getShort("BurnTime");

        this.furnaceCookTime = par1NBTTagCompound.getShort("CookTime");

        this.currentItemBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);

    }

 

    /**

    * Writes a tile entity to NBT.

    */

    public void writeToNBT(NBTTagCompound par1NBTTagCompound)

    {

        super.writeToNBT(par1NBTTagCompound);

        par1NBTTagCompound.setShort("BurnTime", (short)this.furnaceBurnTime);

        par1NBTTagCompound.setShort("CookTime", (short)this.furnaceCookTime);

        NBTTagList var2 = new NBTTagList();

 

        for (int var3 = 0; var3 < this.furnaceItemStacks.length; ++var3)

        {

            if (this.furnaceItemStacks[var3] != null)

            {

                NBTTagCompound var4 = new NBTTagCompound();

                var4.setByte("Slot", (byte)var3);

                this.furnaceItemStacks[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;

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * Returns an integer between 0 and the passed value representing how close the current item is to being completely

    * cooked

    */

    public int getCookProgressScaled(int par1)

    {

        return this.furnaceCookTime * par1 / 200;

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * Returns an integer between 0 and the passed value representing how much burn time is left on the current fuel

    * item, where 0 means that the item is exhausted and the passed value means that the item is fresh

    */

    public int getBurnTimeRemainingScaled(int par1)

    {

        if (this.currentItemBurnTime == 0)

        {

            this.currentItemBurnTime = 200;

        }

 

        return this.furnaceBurnTime * par1 / this.currentItemBurnTime;

    }

 

    /**

    * Returns true if the furnace is currently burning

    */

    public boolean isBurning()

    {

        return this.furnaceBurnTime > 0;

    }

 

    /**

    * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count

    * ticks and creates a new spawn inside its implementation.

    */

    public void updateEntity()

    {

        boolean var1 = this.furnaceBurnTime > 0;

        boolean var2 = false;

 

        if (this.furnaceBurnTime > 0)

        {

            --this.furnaceBurnTime;

        }

 

        if (!this.worldObj.isRemote)

        {

            if (this.furnaceBurnTime == 0 && this.canSmelt())

            {

                this.currentItemBurnTime = this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);

 

                if (this.furnaceBurnTime > 0)

                {

                    var2 = true;

 

                    if (this.furnaceItemStacks[1] != null)

                    {

                        --this.furnaceItemStacks[1].stackSize;

 

                        if (this.furnaceItemStacks[1].stackSize == 0)

                        {

                            this.furnaceItemStacks[1] = this.furnaceItemStacks[1].getItem().getContainerItemStack(furnaceItemStacks[1]);

                        }

                    }

                }

            }

 

            if (this.isBurning() && this.canSmelt())

            {

                ++this.furnaceCookTime;

 

                if (this.furnaceCookTime == 200)

                {

                    this.furnaceCookTime = 0;

                    this.smeltItem();

                    var2 = true;

                }

            }

            else

            {

                this.furnaceCookTime = 0;

            }

 

            if (var1 != this.furnaceBurnTime > 0)

            {

                var2 = true;

                BlockEssenceExtractor.updateFurnaceBlockState(this.furnaceBurnTime > 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.furnaceItemStacks[0] == null)

        {

            return false;

        }

        else

        {

            ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);

            if (var1 == null) return false;

            if (this.furnaceItemStacks[2] == null) return true;

            if (!this.furnaceItemStacks[2].isItemEqual(var1)) return false;

            int result = furnaceItemStacks[2].stackSize + var1.stackSize;

            return (result <= getInventoryStackLimit() && result <= 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 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);

 

            if (this.furnaceItemStacks[2] == null)

            {

                this.furnaceItemStacks[2] = var1.copy();

            }

            else if (this.furnaceItemStacks[2].isItemEqual(var1))

            {

                furnaceItemStacks[2].stackSize += var1.stackSize;

            }

 

            --this.furnaceItemStacks[0].stackSize;

 

            if (this.furnaceItemStacks[0].stackSize <= 0)

            {

                this.furnaceItemStacks[0] = null;

            }

        }

    }

 

    /**

    * Returns the number of ticks that the supplied fuel item will keep the furnace burning, or 0 if the item isn't

    * fuel

    */

    public static int getItemBurnTime(ItemStack par0ItemStack)

    {

        if (par0ItemStack == null)

        {

            return 0;

        }

        else

        {

            int var1 = par0ItemStack.getItem().shiftedIndex;

            Item var2 = par0ItemStack.getItem();

 

            if (par0ItemStack.getItem() instanceof ItemBlock && Block.blocksList[var1] != null)

            {

                Block var3 = Block.blocksList[var1];

 

                if (var3 == Block.woodSingleSlab)

                {

                    return 150;

                }

 

                if (var3.blockMaterial == Material.wood)

                {

                    return 300;

                }

            }

 

            if (var2 instanceof ItemTool && ((ItemTool) var2).getToolMaterialName().equals("WOOD")) return 200;

            if (var2 instanceof ItemSword && ((ItemSword) var2).func_77825_f().equals("WOOD")) return 200;

            if (var2 instanceof ItemHoe && ((ItemHoe) var2).func_77842_f().equals("WOOD")) return 200;

            if (var1 == Item.stick.shiftedIndex) return 100;

            if (var1 == Item.coal.shiftedIndex) return 1600;

            if (var1 == Item.bucketLava.shiftedIndex) return 20000;

            if (var1 == Block.sapling.blockID) return 100;

            if (var1 == Item.blazeRod.shiftedIndex) return 2400;

            return GameRegistry.getFuelValue(par0ItemStack);

        }

    }

 

    /**

    * Return true if item is a fuel source (getItemBurnTime() > 0).

    */

    public static boolean isItemFuel(ItemStack par0ItemStack)

    {

        return getItemBurnTime(par0ItemStack) > 0;

    }

 

    /**

    * Do not make give this method the name canInteractWith because it clashes with Container

    */

    public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)

    {

        return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;

    }

 

    public void openChest() {}

 

    public void closeChest() {}

 

    @Override

    public int getStartInventorySide(ForgeDirection side)

    {

        if (side == ForgeDirection.DOWN) return 1;

        if (side == ForgeDirection.UP) return 0;

        return 2;

    }

 

    @Override

    public int getSizeInventorySide(ForgeDirection side)

    {

        return 1;

    }

}

 

 

Gui Handler:

 

 

package kore.korecraft.mod;

 

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.tileentity.TileEntity;

import net.minecraft.world.World;

import cpw.mods.fml.common.network.IGuiHandler;

 

public class GuiHandler implements IGuiHandler {

        //returns an instance of the Container you made earlier

        @Override

        public Object getServerGuiElement(int id, EntityPlayer player, World world,

        int x, int y, int z) {

            TileEntity tileEntity = world.getBlockTileEntity(x, y, z);

            if(id == 0){

                return new ContainerKoriumMiniChest(player.inventory, (TileEntityKoriumMiniChest) tileEntity);

            }

            if(id == 1){

                return new ContainerEssenceExtractor(player.inventory, (TileEntityEssenceExtractor) tileEntity);

            }

            return null;

        }

 

        //returns an instance of the Gui you made earlier

        @Override

        public Object getClientGuiElement(int id, EntityPlayer player, World world,

        int x, int y, int z) {

        TileEntity tileEntity = world.getBlockTileEntity(x, y, z);

        if(id == 0){

                return new GuiKoriumMiniChest(player.inventory, (TileEntityKoriumMiniChest) tileEntity);

        }

        if(id == 1){

                return new GuiEssenceExtractor(player.inventory, (TileEntityEssenceExtractor) tileEntity);

        }

        return null;

        }

}

 

 

and don't say that I copied the furnace classes and that Im cheap because I know and I am new to creating this stuff and will eventually write my own when I am familiar with it.

The Korecraft Mod

Posted

based on this line: at net.minecraft.block.BlockFurnace.onBlockActivated(BlockFurnace.java:175)

you might want to check that you didn't edit BlockFurnace by accident.

 

It seems that inside the Furnace class it's trying to access the Essence Extractor, you probably don't want that.

 

 

Posted

Heres my BlockFurnace, I cant find anything wrong... maybe there isnt or maybe im blind :(

 

 

package net.minecraft.tileentity;

 

import cpw.mods.fml.common.registry.GameRegistry;

import cpw.mods.fml.relauncher.Side;

import cpw.mods.fml.relauncher.SideOnly;

import net.minecraft.block.Block;

import net.minecraft.block.BlockFurnace;

import net.minecraft.block.material.Material;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.inventory.IInventory;

import net.minecraft.item.Item;

import net.minecraft.item.ItemBlock;

import net.minecraft.item.ItemHoe;

import net.minecraft.item.ItemStack;

import net.minecraft.item.ItemSword;

import net.minecraft.item.ItemTool;

import net.minecraft.item.crafting.FurnaceRecipes;

import net.minecraft.nbt.NBTTagCompound;

import net.minecraft.nbt.NBTTagList;

 

import net.minecraftforge.common.ForgeDirection;

import net.minecraftforge.common.ISidedInventory;

 

public class TileEntityFurnace extends TileEntity implements IInventory, ISidedInventory

{

    /**

    * The ItemStacks that hold the items currently being used in the furnace

    */

    private ItemStack[] furnaceItemStacks = new ItemStack[3];

 

    /** The number of ticks that the furnace will keep burning */

    public int furnaceBurnTime = 0;

 

    /**

    * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for

    */

    public int currentItemBurnTime = 0;

 

    /** The number of ticks that the current item has been cooking for */

    public int furnaceCookTime = 0;

 

    /**

    * Returns the number of slots in the inventory.

    */

    public int getSizeInventory()

    {

        return this.furnaceItemStacks.length;

    }

 

    /**

    * Returns the stack in slot i

    */

    public ItemStack getStackInSlot(int par1)

    {

        return this.furnaceItemStacks[par1];

    }

 

    /**

    * Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a

    * new stack.

    */

    public ItemStack decrStackSize(int par1, int par2)

    {

        if (this.furnaceItemStacks[par1] != null)

        {

            ItemStack var3;

 

            if (this.furnaceItemStacks[par1].stackSize <= par2)

            {

                var3 = this.furnaceItemStacks[par1];

                this.furnaceItemStacks[par1] = null;

                return var3;

            }

            else

            {

                var3 = this.furnaceItemStacks[par1].splitStack(par2);

 

                if (this.furnaceItemStacks[par1].stackSize == 0)

                {

                    this.furnaceItemStacks[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.furnaceItemStacks[par1] != null)

        {

            ItemStack var2 = this.furnaceItemStacks[par1];

            this.furnaceItemStacks[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.furnaceItemStacks[par1] = par2ItemStack;

 

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

        {

            par2ItemStack.stackSize = this.getInventoryStackLimit();

        }

    }

 

    /**

    * Returns the name of the inventory.

    */

    public String getInvName()

    {

        return "container.furnace";

    }

 

    /**

    * Reads a tile entity from NBT.

    */

    public void readFromNBT(NBTTagCompound par1NBTTagCompound)

    {

        super.readFromNBT(par1NBTTagCompound);

        NBTTagList var2 = par1NBTTagCompound.getTagList("Items");

        this.furnaceItemStacks = 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.furnaceItemStacks.length)

            {

                this.furnaceItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4);

            }

        }

 

        this.furnaceBurnTime = par1NBTTagCompound.getShort("BurnTime");

        this.furnaceCookTime = par1NBTTagCompound.getShort("CookTime");

        this.currentItemBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);

    }

 

    /**

    * Writes a tile entity to NBT.

    */

    public void writeToNBT(NBTTagCompound par1NBTTagCompound)

    {

        super.writeToNBT(par1NBTTagCompound);

        par1NBTTagCompound.setShort("BurnTime", (short)this.furnaceBurnTime);

        par1NBTTagCompound.setShort("CookTime", (short)this.furnaceCookTime);

        NBTTagList var2 = new NBTTagList();

 

        for (int var3 = 0; var3 < this.furnaceItemStacks.length; ++var3)

        {

            if (this.furnaceItemStacks[var3] != null)

            {

                NBTTagCompound var4 = new NBTTagCompound();

                var4.setByte("Slot", (byte)var3);

                this.furnaceItemStacks[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;

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * Returns an integer between 0 and the passed value representing how close the current item is to being completely

    * cooked

    */

    public int getCookProgressScaled(int par1)

    {

        return this.furnaceCookTime * par1 / 200;

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * Returns an integer between 0 and the passed value representing how much burn time is left on the current fuel

    * item, where 0 means that the item is exhausted and the passed value means that the item is fresh

    */

    public int getBurnTimeRemainingScaled(int par1)

    {

        if (this.currentItemBurnTime == 0)

        {

            this.currentItemBurnTime = 200;

        }

 

        return this.furnaceBurnTime * par1 / this.currentItemBurnTime;

    }

 

    /**

    * Returns true if the furnace is currently burning

    */

    public boolean isBurning()

    {

        return this.furnaceBurnTime > 0;

    }

 

    /**

    * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count

    * ticks and creates a new spawn inside its implementation.

    */

    public void updateEntity()

    {

        boolean var1 = this.furnaceBurnTime > 0;

        boolean var2 = false;

 

        if (this.furnaceBurnTime > 0)

        {

            --this.furnaceBurnTime;

        }

 

        if (!this.worldObj.isRemote)

        {

            if (this.furnaceBurnTime == 0 && this.canSmelt())

            {

                this.currentItemBurnTime = this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);

 

                if (this.furnaceBurnTime > 0)

                {

                    var2 = true;

 

                    if (this.furnaceItemStacks[1] != null)

                    {

                        --this.furnaceItemStacks[1].stackSize;

 

                        if (this.furnaceItemStacks[1].stackSize == 0)

                        {

                            this.furnaceItemStacks[1] = this.furnaceItemStacks[1].getItem().getContainerItemStack(furnaceItemStacks[1]);

                        }

                    }

                }

            }

 

            if (this.isBurning() && this.canSmelt())

            {

                ++this.furnaceCookTime;

 

                if (this.furnaceCookTime == 200)

                {

                    this.furnaceCookTime = 0;

                    this.smeltItem();

                    var2 = true;

                }

            }

            else

            {

                this.furnaceCookTime = 0;

            }

 

            if (var1 != this.furnaceBurnTime > 0)

            {

                var2 = true;

                BlockFurnace.updateFurnaceBlockState(this.furnaceBurnTime > 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.furnaceItemStacks[0] == null)

        {

            return false;

        }

        else

        {

            ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);

            if (var1 == null) return false;

            if (this.furnaceItemStacks[2] == null) return true;

            if (!this.furnaceItemStacks[2].isItemEqual(var1)) return false;

            int result = furnaceItemStacks[2].stackSize + var1.stackSize;

            return (result <= getInventoryStackLimit() && result <= 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 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);

 

            if (this.furnaceItemStacks[2] == null)

            {

                this.furnaceItemStacks[2] = var1.copy();

            }

            else if (this.furnaceItemStacks[2].isItemEqual(var1))

            {

                furnaceItemStacks[2].stackSize += var1.stackSize;

            }

 

            --this.furnaceItemStacks[0].stackSize;

 

            if (this.furnaceItemStacks[0].stackSize <= 0)

            {

                this.furnaceItemStacks[0] = null;

            }

        }

    }

 

    /**

    * Returns the number of ticks that the supplied fuel item will keep the furnace burning, or 0 if the item isn't

    * fuel

    */

    public static int getItemBurnTime(ItemStack par0ItemStack)

    {

        if (par0ItemStack == null)

        {

            return 0;

        }

        else

        {

            int var1 = par0ItemStack.getItem().shiftedIndex;

            Item var2 = par0ItemStack.getItem();

 

            if (par0ItemStack.getItem() instanceof ItemBlock && Block.blocksList[var1] != null)

            {

                Block var3 = Block.blocksList[var1];

 

                if (var3 == Block.woodSingleSlab)

                {

                    return 150;

                }

 

                if (var3.blockMaterial == Material.wood)

                {

                    return 300;

                }

            }

 

            if (var2 instanceof ItemTool && ((ItemTool) var2).getToolMaterialName().equals("WOOD")) return 200;

            if (var2 instanceof ItemSword && ((ItemSword) var2).func_77825_f().equals("WOOD")) return 200;

            if (var2 instanceof ItemHoe && ((ItemHoe) var2).func_77842_f().equals("WOOD")) return 200;

            if (var1 == Item.stick.shiftedIndex) return 100;

            if (var1 == Item.coal.shiftedIndex) return 1600;

            if (var1 == Item.bucketLava.shiftedIndex) return 20000;

            if (var1 == Block.sapling.blockID) return 100;

            if (var1 == Item.blazeRod.shiftedIndex) return 2400;

            return GameRegistry.getFuelValue(par0ItemStack);

        }

    }

 

    /**

    * Return true if item is a fuel source (getItemBurnTime() > 0).

    */

    public static boolean isItemFuel(ItemStack par0ItemStack)

    {

        return getItemBurnTime(par0ItemStack) > 0;

    }

 

    /**

    * Do not make give this method the name canInteractWith because it clashes with Container

    */

    public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer)

    {

        return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;

    }

 

    public void openChest() {}

 

    public void closeChest() {}

 

    @Override

    public int getStartInventorySide(ForgeDirection side)

    {

        if (side == ForgeDirection.DOWN) return 1;

        if (side == ForgeDirection.UP) return 0;

        return 2;

    }

 

    @Override

    public int getSizeInventorySide(ForgeDirection side)

    {

        return 1;

    }

}

 

 

 

The Korecraft Mod

Posted

You need to make kore.korecraft.mod.TileEntityEssenceExtractor extend TileEntityFurnace

Protip: try and find answers yourself before asking on the forum.

It's pretty likely that there is an answer.

 

Was I helpful? Give me a thank you!

 

 

width=635 height=903http://bit.ly/HZ03zy[/img]

 

 

Tired of waiting for mods to port to bukkit?

use BukkitForge! (now with a working version of WorldEdit!)

Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

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