Jump to content

Recommended Posts

Posted

Hello again,

i've been working on my furnace now for a quite long time and it wont open the GUI, when i rightclick it. It will just place another Furnace. I've been watching tutorials and stuff. But i cant figure out, why it dont work.

I appreciate every help.

 

Edit: Forgot the Furnace class. Now added

 

Furnace

package com.zzyxz.betterFurnace;

import java.util.Random;

import com.example.friedegg.ExampleMod;

import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BetterFurnace extends BlockContainer {


    /**
     * 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 final Random field_149933_a = new Random();
    private final boolean field_149932_b;
    private static boolean keepInventory;
    @SideOnly(Side.CLIENT)
    private IIcon field_149935_N;
    @SideOnly(Side.CLIENT)
    private IIcon field_149936_O;
  

    public BetterFurnace(boolean p_i45407_1_)
    {
        super(Material.rock);
        this.field_149932_b = p_i45407_1_;
    }
    

    public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_)
    {
        return Item.getItemFromBlock(ExampleMod.betterFurnaceIdle);
    }

    /**
     * Called whenever the block is added into the world. Args: world, x, y, z
     */
    public void onBlockAdded(World p_149726_1_, int p_149726_2_, int p_149726_3_, int p_149726_4_)
    {
        super.onBlockAdded(p_149726_1_, p_149726_2_, p_149726_3_, p_149726_4_);
        this.func_149930_e(p_149726_1_, p_149726_2_, p_149726_3_, p_149726_4_);
    }

    private void func_149930_e(World p_149930_1_, int p_149930_2_, int p_149930_3_, int p_149930_4_)
    {
        if (!p_149930_1_.isRemote)
        {
            Block block = p_149930_1_.getBlock(p_149930_2_, p_149930_3_, p_149930_4_ - 1);
            Block block1 = p_149930_1_.getBlock(p_149930_2_, p_149930_3_, p_149930_4_ + 1);
            Block block2 = p_149930_1_.getBlock(p_149930_2_ - 1, p_149930_3_, p_149930_4_);
            Block block3 = p_149930_1_.getBlock(p_149930_2_ + 1, p_149930_3_, p_149930_4_);
            byte b0 = 3;

            if (block.func_149730_j() && !block1.func_149730_j())
            {
                b0 = 3;
            }

            if (block1.func_149730_j() && !block.func_149730_j())
            {
                b0 = 2;
            }

            if (block2.func_149730_j() && !block3.func_149730_j())
            {
                b0 = 5;
            }

            if (block3.func_149730_j() && !block2.func_149730_j())
            {
                b0 = 4;
            }

            p_149930_1_.setBlockMetadataWithNotify(p_149930_2_, p_149930_3_, p_149930_4_, b0, 2);
        }
    }

    /**
     * Gets the block's texture. Args: side, meta
     */
    @SideOnly(Side.CLIENT)
    public IIcon getIcon(int p_149691_1_, int p_149691_2_)
    {
        return p_149691_1_ == 1 ? this.field_149935_N : (p_149691_1_ == 0 ? this.field_149935_N : (p_149691_1_ != p_149691_2_ ? this.blockIcon : this.field_149936_O));
    }

    @SideOnly(Side.CLIENT)
    public void registerBlockIcons(IIconRegister p_149651_1_)
    {
        this.blockIcon = p_149651_1_.registerIcon("furnace_side");
        this.field_149936_O = p_149651_1_.registerIcon(this.field_149932_b ? "furnace_front_on" : "furnace_front_off");
        this.field_149935_N = p_149651_1_.registerIcon("furnace_top");
    }

    /**
     * Called upon block activation (right click on the block.)
     */
    
    public boolean onBlockActivated(World world, int x, int y,int z, EntityPlayer player, int side, float hitX, float hitY, int hitZ)
    {
    	if (world.isRemote)
        {
        	return true;
        } else if(!player.isSneaking())
        {
        	TileEntity entity = world.getTileEntity(x, y, z);
        			if(entity!=null)
        			{
        				player.openGui(ExampleMod.instance, 0, world, x, y,z);
        			}
        			return true;
        }else
        {
        	return false;
        }
    }

    /**
     * Update which block the furnace is using depending on whether or not it is burning
     */
    public static void updateFurnaceBlockState(boolean b, World worldobj, int xCoord, int yCoord, int zCoord)
    {
        int l = worldobj.getBlockMetadata(xCoord, yCoord, zCoord);
        TileEntity tileentity = worldobj.getTileEntity(xCoord, yCoord, zCoord);
        keepInventory = true;

        if (b)
        {
        	worldobj.setBlock(xCoord, yCoord, zCoord, ExampleMod.betterFurnaceActive);
        }
        else
        {
        	worldobj.setBlock(xCoord, yCoord, zCoord, ExampleMod.betterFurnaceIdle);
        }

        keepInventory = false;
        worldobj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, l, 2);

        if (tileentity != null)
        {
            tileentity.validate();
            worldobj.setTileEntity(xCoord, yCoord, zCoord, tileentity);
        }
    }

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

    /**
     * Called when the block is placed in the world.
     */
    public void onBlockPlacedBy(World p_149689_1_, int p_149689_2_, int p_149689_3_, int p_149689_4_, EntityLivingBase p_149689_5_, ItemStack p_149689_6_)
    {
        int l = MathHelper.floor_double((double)(p_149689_5_.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;

        if (l == 0)
        {
            p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 2, 2);
        }

        if (l == 1)
        {
            p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 5, 2);
        }

        if (l == 2)
        {
            p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 3, 2);
        }

        if (l == 3)
        {
            p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 4, 2);
        }

        if (p_149689_6_.hasDisplayName())
        {
            ((TileEntityBetterFurnace)p_149689_1_.getTileEntity(p_149689_2_, p_149689_3_, p_149689_4_)).setGuiDisplayName(p_149689_6_.getDisplayName());
        }
    }

    
    public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_)
    {
        if (!keepInventory)
        {
            TileEntityBetterFurnace tileentityfurnace = (TileEntityBetterFurnace)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_);

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

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

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

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

                            itemstack.stackSize -= j1;
                            EntityItem entityitem = new EntityItem(p_149749_1_, (double)((float)p_149749_2_ + f), (double)((float)p_149749_3_ + f1), (double)((float)p_149749_4_ + f2), new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));

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

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

                p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_);
            }
        }

        super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_);
    }
   
    /**
     * A randomly called display update to be able to add particles or other items for display
     */
    @SideOnly(Side.CLIENT)
    public void randomDisplayTick(World p_149734_1_, int p_149734_2_, int p_149734_3_, int p_149734_4_, Random p_149734_5_)
    {
        if (this.field_149932_b)
        {
            int l = p_149734_1_.getBlockMetadata(p_149734_2_, p_149734_3_, p_149734_4_);
            float f = (float)p_149734_2_ + 0.5F;
            float f1 = (float)p_149734_3_ + 0.0F + p_149734_5_.nextFloat() * 6.0F / 16.0F;
            float f2 = (float)p_149734_4_ + 0.5F;
            float f3 = 0.52F;
            float f4 = p_149734_5_.nextFloat() * 0.6F - 0.3F;

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

    

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

    /**
     * If hasComparatorInputOverride returns true, the return value from this is used instead of the redstone signal
     * strength when this block inputs to a comparator.
     */
   
    public int getComparatorInputOverride(World world, int xCoord, int yCoord, int p_149736_4_, int zCoord)
    {
        return Container.calcRedstoneFromInventory((IInventory)world.getTileEntity(xCoord, yCoord, zCoord));
    }

    /**
     * Gets an item for the block being called on. Args: world, x, y, z
     */
    @SideOnly(Side.CLIENT)
    public Item getItem(World world, int xCoord, int yCoord, int zCoord)
    {
        return Item.getItemFromBlock(ExampleMod.betterFurnaceIdle);
    }

}

 

MainClass

package com.example.friedegg;



import com.zzyxz.betterFurnace.BetterFurnace;
import com.zzyxz.betterFurnace.BetterFurnaceGuiHandler;
import com.zzyxz.betterFurnace.TileEntityBetterFurnace;

import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
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.event.FMLInitializationEvent;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;

@Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION)
public class ExampleMod
{
    public static final String MODID = "friedegg";
    public static final String VERSION = "1.0";

    @Instance(MODID)
    public static ExampleMod instance;
    
public static  Item friedEgg; 
private BetterFurnaceGuiHandler guihandler = new BetterFurnaceGuiHandler();
public static	Block betterFurnaceIdle = new BetterFurnace(false).setCreativeTab(CreativeTabs.tabMisc).setBlockName("betterFurnaceIdle").setHardness(3.5f);
public static	Block betterFurnaceActive = new BetterFurnace(true).setBlockName("betterFurnaceActive").setHardness(3.5f).setLightLevel(0.9f);  

public static final int guiIdBetterFurnace = 0; 
    
    
    @EventHandler
    public void preinit(FMLInitializationEvent event)
    {
    	friedEgg = new FriedEgg(4, 2.0f, false);
    	
    	
    	GameRegistry.registerItem(friedEgg, "friedEgg");	
    	GameRegistry.addSmelting(new ItemStack(Items.egg,1), new ItemStack(friedEgg,5), 0);
    	 

    	GameRegistry.registerBlock(betterFurnaceIdle, "betterFurnaceIdle");
    	GameRegistry.registerBlock(betterFurnaceActive, "betterFurnaceActive");

    	
    	
    	
    	
    	
    	/** TODO Hack to get our textures for items and blocks to show, remove when the bug is
         * fixed in an update.  If this is not done, then the player must manually refresh
         * the texture packs. */
      if (event.getSide() == Side.CLIENT)
        Minecraft.getMinecraft().refreshResources();
    }
    
    
    
    @EventHandler
    public void init(FMLInitializationEvent event)
    {
    	GameRegistry.registerTileEntity(TileEntityBetterFurnace.class, "BetterFurnace"); 
    	NetworkRegistry.INSTANCE.registerGuiHandler(this, guihandler); 
    }
}

 

GuiHandler

package com.zzyxz.betterFurnace;

import com.example.friedegg.ExampleMod;

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 BetterFurnaceGuiHandler implements IGuiHandler {


public Object getServerGuiElement(int ID, EntityPlayer player, World world,
		int x, int y, int z) {
	TileEntity entity = world.getTileEntity(x, y, z);

	if (entity != null) {
		switch (ID) {
		case ExampleMod.guiIdBetterFurnace:
			if (entity instanceof TileEntityBetterFurnace) {
				return new ContainerBetterFurnace(player.inventory,
						(TileEntityBetterFurnace) entity);
			}
		}
	}

	return null;

}

public Object getClientGuiElement(int ID, EntityPlayer player, World world,
		int x, int y, int z) {
	TileEntity entity = world.getTileEntity(x, y, z);

	if (entity != null) {
		switch (ID) {
		case ExampleMod.guiIdBetterFurnace:
			if (entity instanceof TileEntityBetterFurnace) {
				return new BetterFurnaceGui(player.inventory,
						(TileEntityBetterFurnace) entity);
			}
		}
	}

	return null;
}

}

 

Gui

package com.zzyxz.betterFurnace;

import org.lwjgl.opengl.GL11;

import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.util.ResourceLocation;

public class BetterFurnaceGui extends GuiContainer {


public TileEntityBetterFurnace entityBetterFurnace;

public static final ResourceLocation texture = new ResourceLocation("/textures/gui/container/furnace.png");

public BetterFurnaceGui(InventoryPlayer inventoryPlayer, TileEntityBetterFurnace entity) 
{
	super(new ContainerBetterFurnace(inventoryPlayer, entity));
	// TODO Auto-generated constructor stub
	this.entityBetterFurnace=entity;
	this.xSize = 176;
	this.ySize = 166;

}

public void drawGuiContainerForegroundLayer(float var1, int var2,
		int var3)
{
	String name = this.entityBetterFurnace.isInvNameLocalized() ? this.entityBetterFurnace.getInvName() : "betterFurnace";
	this.fontRendererObj.drawString(name, this.xSize/2 - this.fontRendererObj.getStringWidth(name)/2, 6, 4210752);
	this.fontRendererObj.drawString("betterFurnace", 8, this.ySize -96+2, 4210752);
}

@Override
public void drawGuiContainerBackgroundLayer(float var1, int var2,
		int var3) 
{
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        this.mc.getTextureManager().bindTexture(texture);
        int k = (this.width - this.xSize) / 2;
        int l = (this.height - this.ySize) / 2;
        this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
        int i1;

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

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

}

}

 

Container

package com.zzyxz.betterFurnace;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
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 net.minecraft.item.crafting.FurnaceRecipes;


public class ContainerBetterFurnace extends Container {

private TileEntityBetterFurnace betterFurnace;


/** Time left*/
public int lastBurnTime;
/** fuel value time*/
public int lastItemBurnTime;

public int lastCookTime;


public ContainerBetterFurnace(InventoryPlayer inventoryPlayer, TileEntityBetterFurnace entity)
{
	this.betterFurnace = entity;

	this.addSlotToContainer(new Slot(entity, 0, 56, 17));
	this.addSlotToContainer(new Slot(entity, 1, 56, 53));
	this.addSlotToContainer(new SlotFurnace(inventoryPlayer.player,entity,2 ,116,35));
	int i;

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

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

}

    public void addCraftingToCrafters(ICrafting par1ICrafting)
    {
        super.addCraftingToCrafters(par1ICrafting);
        par1ICrafting.sendProgressBarUpdate(this, 0, this.betterFurnace.cookTime);
        par1ICrafting.sendProgressBarUpdate(this, 1, this.betterFurnace.burnTime);
        par1ICrafting.sendProgressBarUpdate(this, 2, this.betterFurnace.currentItemBurnTime);
    }

    public void detectAndSendChanges()
    {
        super.detectAndSendChanges();

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

            if (this.lastCookTime != this.betterFurnace.cookTime)
            {
                icrafting.sendProgressBarUpdate(this, 0, this.betterFurnace.cookTime);
            }

            if (this.lastBurnTime != this.betterFurnace.burnTime)
            {
                icrafting.sendProgressBarUpdate(this, 1, this.betterFurnace.burnTime);
            }

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

        this.lastCookTime = this.betterFurnace.cookTime;
        this.lastBurnTime = this.betterFurnace.burnTime;
        this.lastItemBurnTime = this.betterFurnace.currentItemBurnTime;
    }

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

        if (par1 == 1)
        {
            this.betterFurnace.cookTime = par2;
        }

        if (par1 == 2)
        {
            this.betterFurnace.currentItemBurnTime = par2;
        }
    }
    
public boolean canInteractWith(EntityPlayer var1) {

	return this.betterFurnace.isUseableByPlayer(var1);
}

public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2)
    {
        ItemStack itemstack = null;
        Slot slot = (Slot)this.inventorySlots.get(par2);

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

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

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

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

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

            slot.onPickupFromSlot(par1EntityPlayer, itemstack1);
        }

        return itemstack;
    }
}

 

TileEntity

 

package com.zzyxz.betterFurnace;

import cpw.mods.fml.common.registry.GameRegistry;
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.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemHoe;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.item.ItemTool;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;

public class TileEntityBetterFurnace extends TileEntity implements ISidedInventory {

private String localizedName;

private static final int[] slots_top = new int[]{0};
private static final int[] slots_bottom = new int[]{2,1};
private static final int[] slots_sides = new int[]{1};

private ItemStack[] slots = new ItemStack[3];
/** Furnace Speed*/
public int furnaceSpeed = 200;
/** Time left*/
public int burnTime;
/** fuel value time*/
public int currentItemBurnTime;

public int cookTime;


public int getSizeInventory()
{
	return this.slots.length;
}

public String getInvName() {
	return this.isInvNameLocalized() ? this.localizedName : "betterFurnace";
}


public void setGuiDisplayName(String Displayname)
{
	this.localizedName=Displayname;
}

public boolean isInvNameLocalized() {
	return this.localizedName !=null && this.localizedName.length()>0;
}

public ItemStack getStackInSlot(int var1) {
	return this.slots[var1];
}


public ItemStack decrStackSize(int var1, int var2) {
        if (this.slots[var1] != null)
        {
            ItemStack itemstack;

            if (this.slots[var1].stackSize <= var1)
            {
                itemstack = this.slots[var1];
                this.slots[var1] = null;
                return itemstack;
            }
            else
            {
                itemstack = this.slots[var1].splitStack(var1);

                if (this.slots[var1].stackSize == 0)
                {
                    this.slots[var1] = null;
                }

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


public ItemStack getStackInSlotOnClosing(int var1) {
        if (this.slots[var1] != null)
        {
            ItemStack itemstack = this.slots[var1];
            this.slots[var1] = null;
            return itemstack;
        }
        else
        {
            return null;
        }
}


public void setInventorySlotContents(int var1, ItemStack var2) {
        this.slots[var1] = var2;

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

}


public String getInventoryName() {
	return this.hasCustomInventoryName() ? this.localizedName : "betterFurnace";
}


public boolean hasCustomInventoryName() {
	// TODO Auto-generated method stub
	return false;
}


    public void readFromNBT(NBTTagCompound p_145839_1_)
    {
        super.readFromNBT(p_145839_1_);
        NBTTagList nbttaglist = p_145839_1_.getTagList("Items", 10);
        this.slots = new ItemStack[this.getSizeInventory()];

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

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

        this.burnTime = p_145839_1_.getShort("BurnTime");
        this.cookTime = p_145839_1_.getShort("CookTime");
        this.currentItemBurnTime = getItemBurnTime(this.slots[1]);

        if (p_145839_1_.hasKey("CustomName", )
        {
            this.localizedName = p_145839_1_.getString("CustomName");
        }
    }

    public void writeToNBT(NBTTagCompound p_145841_1_)
    {
        super.writeToNBT(p_145841_1_);
        p_145841_1_.setShort("BurnTime", (short)this.burnTime);
        p_145841_1_.setShort("CookTime", (short)this.cookTime);
        NBTTagList nbttaglist = new NBTTagList();

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

        p_145841_1_.setTag("Items", nbttaglist);

        if (this.hasCustomInventoryName())
        {
            p_145841_1_.setString("CustomName", this.localizedName);
        }
    }

public int getInventoryStackLimit() {
	return 64;
}


public boolean isUseableByPlayer(EntityPlayer var1) {
	return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;

}


public void openInventory() {
	// TODO Auto-generated method stub

}


public void closeInventory() {
	// TODO Auto-generated method stub

}

    public boolean isBurning()
    {
        return this.burnTime > 0;
    }

public void updateEntity()
{
        
	boolean flag = this.burnTime > 0;
        boolean flag1 = false;

	if (this.burnTime > 0)
        {
            --this.burnTime;
        }
        
        if (!this.worldObj.isRemote)
        {
        	  if (this.burnTime == 0 && this.canSmelt())
        	  {
        		  this.currentItemBurnTime = this.burnTime = getItemBurnTime(this.slots[1]);
        	  
        		  if (this.burnTime > 0)
        		  {
                   
        			  flag1 = true;
        			  
        			  if (this.slots[1] != null)
                      {
                          --this.slots[1].stackSize;

                          if (this.slots[1].stackSize == 0)
                          {
                              this.slots[1] = slots[1].getItem().getContainerItem(slots[1]);
                          }
                      }
        		  }
        	  
        	  }
        	  
        	  if (this.isBurning() && this.canSmelt())
              {
                  ++this.cookTime;

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

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

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

}


private void smeltItem() {
        if (this.canSmelt())
        {
            ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]);

            if (this.slots[2] == null)
            {
                this.slots[2] = itemstack.copy();
            }
            else if (this.slots[2].getItem() == itemstack.getItem())
            {
                this.slots[2].stackSize += itemstack.stackSize; // Forge BugFix: Results may have multiple items
            }

            --this.slots[0].stackSize;

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

private boolean canSmelt() {
        if (this.slots[0] == null)
        {
            return false;
        }
        else
        {
            ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]);
            if (itemstack == null) return false;
            if (this.slots[2] == null) return true;
            if (!this.slots[2].isItemEqual(itemstack)) return false;
            int result = slots[2].stackSize + itemstack.stackSize;
            return result <= getInventoryStackLimit() && result <= this.slots[2].getMaxStackSize(); //Forge BugFix: Make it respect stack sizes properly.
        }
}

public static int getItemBurnTime(ItemStack itemstack)
{
	if(itemstack == null)
	{
		return 0;
	} else{

            Item item = itemstack.getItem();

            if (item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.air)
            {
                Block block = Block.getBlockFromItem(item);

                if (block == Blocks.wooden_slab)
                {
                    return 150;
                }

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

                if (block == Blocks.coal_block)
                {
                    return 16000;
                }
            }

            if (item instanceof ItemTool && ((ItemTool)item).getToolMaterialName().equals("WOOD")) return 200;
            if (item instanceof ItemSword && ((ItemSword)item).getToolMaterialName().equals("WOOD")) return 200;
            if (item instanceof ItemHoe && ((ItemHoe)item).getToolMaterialName().equals("WOOD")) return 200;
            if (item == Items.stick) return 100;
            if (item == Items.coal) return 1600;
            if (item == Items.lava_bucket) return 20000;
            if (item == Item.getItemFromBlock(Blocks.sapling)) return 100;
            if (item == Items.blaze_rod) return 2400;
            return GameRegistry.getFuelValue(itemstack);		}
}

public static boolean isItemFuel(ItemStack itemstack)
{
	return getItemBurnTime(itemstack) > 0;
}

public boolean isItemValidForSlot(int var1, ItemStack var2) {

	return var1 == 2 ? false : (var1 == 1 ? isItemFuel(var2) : true);
}


public int[] getAccessibleSlotsFromSide(int var1) {

	return var1 == 0 ? slots_bottom : (var1 == 1 ? slots_top : slots_sides);
}


public boolean canInsertItem(int var1, ItemStack var2, int var3) {

	return this.isItemValidForSlot(var1, var2);
}


public boolean canExtractItem(int var1, ItemStack var2, int var3) {

	return var3 != 0 ||  var1 != 1 || var2.getItem() == Items.bucket;
}

public int getBurnTimeRemainingScaled(int i) {
        if (this.currentItemBurnTime == 0)
        {
            this.currentItemBurnTime = 200;
        }

        return this.burnTime * i / this.currentItemBurnTime;
}

public int getCookProgressScaled(int i) {
	return this.cookTime * i / 200;
}


   



}

 

 

*********************************

**  Always remember you are unique,  **

**  just like everyone else                   **     

**********************************

Was my post helpful? Say thanks and

press the thank you button, on my post!!

God, damn it!

Posted

player.openGui(ExampleMod.instance, 0, world, x, y,z);

 

dafuq is this, you are calling your mods instance and then doing nothing?

 

 

well.... i dont get what u mean. what do u mean exactly? what should be changed?

In every tutorial i found, they use this line, to open the gui. am i wrong? the second par is the modID, which is 0. i could also use ExampleMod.guiIdBetterFurnace, that would be the same.

 

*********************************

**  Always remember you are unique,  **

**  just like everyone else                   **     

**********************************

Was my post helpful? Say thanks and

press the thank you button, on my post!!

God, damn it!

Posted

onBlockActivated does not get called when i right click the block.

Tried it with a System.out.print

 

Works for onBlockAdded.

 

So what could be a reason, that my onBlockActivated never gets called? did i forget something?

 

EDIT:

AW MAW GAWD

 

I'm such an idiot, that is incredible, i wasnt overwriting.... they differ. thx to Mr @Override.... Now im sad..

 

/solved

*********************************

**  Always remember you are unique,  **

**  just like everyone else                   **     

**********************************

Was my post helpful? Say thanks and

press the thank you button, on my post!!

God, damn it!

Join the conversation

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

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

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

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

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • When I first heard about Bitcoin back in 2018, I was skeptical. The idea of a decentralized, digital currency seemed too good to be true. But I was intrigued as I learned more about the technology behind it and its potential. I started small, investing just a few hundred dollars, dipping my toes into the cryptocurrency waters. At first, it was exhilarating to watch the value of my investment grow exponentially. I felt like I was part of the future, an early adopter of this revolutionary new asset. But that euphoria was short-lived. One day, I logged into my digital wallet only to find it empty - my Bitcoin had vanished without a trace. It turned out that the online exchange I had trusted had been hacked, and my funds were stolen. I was devastated, both financially and emotionally. All the potential I had seen in Bitcoin was tainted by the harsh reality that with decentralization came a lack of regulation and oversight. My hard-earned money was gone, lost to the ether of the digital world. This experience taught me a painful lesson about the price of trust in the uncharted territory of cryptocurrency. While the technology holds incredible promise, the risks can be catastrophic if you don't approach it with extreme caution. My Bitcoin investment gamble had failed, and I was left to pick up the pieces, wiser but poorer for having placed my faith in the wrong hands. My sincere appreciation goes to MUYERN TRUST HACKER. You are my hero in recovering my lost funds. Send a direct m a i l ( muyerntrusted ( @ ) mail-me ( . )c o m ) or message on whats app : + 1 ( 4-4-0 ) ( 3 -3 -5 ) ( 0-2-0-5 )
    • You could try posting a log (if there is no log at all, it may be the launcher you are using, the FAQ may have info on how to enable the log) as described in the FAQ, however this will probably need to be reported to/remedied by the mod author.
    • So me and a couple of friends are playing with a shitpost mod pack and one of the mods in the pack is corail tombstone and for some reason there is a problem with it, where on death to fire the player will get kicked out of the server and the tombstone will not spawn basically deleting an entire inventory, it doesn't matter what type of fire it is, whether it's from vanilla fire/lava, or from modded fire like ice&fire/lycanites and it's common enough to where everyone on the server has experienced at least once or twice and it doesn't give any crash log. a solution to this would be much appreciated thank you!
    • It is 1.12.2 - I have no idea if there is a 1.12 pack
  • Topics

×
×
  • Create New...

Important Information

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