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;
}
}