there are all furnace's that I used:
Block Furnace:
public class BlockQuartzFurnace extends BlockContainer
{
private Random quartzRand;
@SideOnly(Side.CLIENT)
private Icon QuartzIconTop;
private Icon QuartzIconBottom;
@SideOnly(Side.CLIENT)
private Icon QuartzIconFront;
private Icon QuartzIconSide;
private Icon QuartzIconFrontActive;
private boolean isActive = true;
private static boolean keepFurnaceInventory;
public BlockQuartzFurnace(int par1, boolean par2Boolean)
{
super(par1, Material.rock);
this.setCreativeTab(CreativeTabs.tabBlock);
quartzRand = new Random();
}
public void onBlockAdded(World par1World, int par2, int par3, int par4)
{
super.onBlockAdded(par1World, par2, par3, par4);
this.setDefaultDirection(par1World, par2, par3, par4);
par1World.markBlockForUpdate(par2, par3, par4);
}
private void setDefaultDirection(World par1World, int x, int y, int z)
{
TileEntity blockEntity = par1World.getBlockTileEntity(x, y, z);
if (par1World.isRemote)
{
return;
}
int i = par1World.getBlockId(x, y, z - 1);
int j = par1World.getBlockId(x, y, z + 1);
int k = par1World.getBlockId(x - 1, y, z);
int l = par1World.getBlockId(x + 1, y, z);
byte b0 = 3;
if (Block.opaqueCubeLookup[i] && !Block.opaqueCubeLookup[j])
{
b0 = 3;
}
if (Block.opaqueCubeLookup[j] && !Block.opaqueCubeLookup[i])
{
b0 = 2;
}
if (Block.opaqueCubeLookup[k] && !Block.opaqueCubeLookup[l])
{
b0 = 5;
}
if (Block.opaqueCubeLookup[l] && !Block.opaqueCubeLookup[k])
{
b0 = 4;
}
((TileEntityQuartzFurnace) blockEntity).setFrontDirection(b0);
}
@Override
public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EPlayer, int par6, float par7, float par8, float par9)
{
TileEntityQuartzFurnace tileentityrefiner = (TileEntityQuartzFurnace) par1World.getBlockTileEntity(par2, par3, par4);
if (tileentityrefiner != null)
{
par5EPlayer.openGui(mod_SecretMod.instance, 0, par1World, par2, par3, par4);
}
return true;
}
public Icon getBlockTexture(IBlockAccess access, int x, int y, int z, int side)
{
int front = 0;
TileEntity tile = ModLoader.getMinecraftInstance().getIntegratedServer().worldServers[0].getBlockTileEntity(x, y, z);
if (tile != null)
{
front = ((TileEntityQuartzFurnace) tile).getFrontDirection();
}
else
{
ModLoader.getMinecraftInstance().getIntegratedServer().worldServers[0].markBlockForUpdate(x, y, z);
}
switch (side)
{
case 0:
return QuartzIconBottom;
case 1:
return QuartzIconTop;
default:
if (side == front)
{
return ((TileEntityQuartzFurnace) tile).isActive() ? QuartzIconFrontActive : QuartzIconFront;
}
else
{
return QuartzIconSide;
}
}
}
public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6)
{
if (!keepFurnaceInventory)
{
TileEntityQuartzFurnace Refiner = (TileEntityQuartzFurnace) par1World.getBlockTileEntity(par2, par3, par4);
if (Refiner != null)
{
for (int i = 0; i < Refiner.getSizeInventory(); i++)
{
ItemStack IS = Refiner.getStackInSlot(i);
if (IS != null)
{
float j = this.quartzRand.nextFloat() * 0.8F + 0.1F;
float k = this.quartzRand.nextFloat() * 0.8F + 0.1F;
float l = this.quartzRand.nextFloat() * 0.8F + 0.1F;
while (IS.stackSize > 0)
{
int m = this.quartzRand.nextInt(21) + 10;
if (m > IS.stackSize)
{
m = IS.stackSize;
}
IS.stackSize -= m;
EntityItem n = new EntityItem(par1World, (double) ((float) par2 + j), (double) ((float) par3 + k), (double) ((float) par4 + l), new ItemStack(IS.itemID, m, IS.getItemDamage()));
if (IS.hasTagCompound())
{
n.getEntityItem().setTagCompound((NBTTagCompound) IS.getTagCompound().copy());
}
float o = 0.05F;
n.motionX = (double) ((float) this.quartzRand.nextGaussian() * o);
n.motionZ = (double) ((float) this.quartzRand.nextGaussian() * o);
n.motionY = (double) ((float) this.quartzRand.nextGaussian() * o);
par1World.spawnEntityInWorld(n);
}
}
}
}
}
super.breakBlock(par1World, par2, par3, par4, par5, par6);
}
@SideOnly(Side.CLIENT)
public Icon getIcon(int par1, int par2)
{
switch (par1)
{
case 0:
return QuartzIconBottom;
case 1:
return QuartzIconTop;
case 2:
return QuartzIconSide;
case 3:
return QuartzIconFront;
case 4:
return QuartzIconSide;
case 5:
return QuartzIconSide;
default:
return QuartzIconSide;
}
}
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister iconRegister)
{
Object planetgeeks;
this.QuartzIconSide = iconRegister.registerIcon("secretmod:quartzFurnace_side");
this.QuartzIconFront = iconRegister.registerIcon("secretmod:quartzFurnace_front_Idle");
this.QuartzIconFrontActive = iconRegister.registerIcon("secretmod:quartzFurnace_front_active");
this.QuartzIconBottom = iconRegister.registerIcon("secretmod:quartzFurnace_top");
this.QuartzIconTop = iconRegister.registerIcon("secretmod:quartzFurnace_top");
}
@Override
public TileEntity createNewTileEntity(World world)
{
return new TileEntityQuartzFurnace();
}
}
TileEntityFurnace:
public class TileEntityQuartzFurnace extends TileEntity implements IInventory
{
private ItemStack goldItemStacks[];
/** The number of ticks that the furnace will keep burning */
public int goldBurnTime;
private boolean isActive;
/**
* The number of ticks that a fresh copy of the currently-burning item would
* keep the furnace burning for
*/
public int goldItemBurnTime;
/** The number of ticks that the current item has been cooking for */
public int goldCookTime;
public int front;
public TileEntityQuartzFurnace()
{
goldItemStacks = new ItemStack[3];
goldBurnTime = 0;
goldItemBurnTime = 0;
goldCookTime = 0;
}
public void setFrontDirection(int f)
{
this.front = f;
}
public int getFrontDirection()
{
return this.front;
}
/**
* Returns the number of slots in the inventory.
*/
public int getSizeInventory()
{
return goldItemStacks.length;
}
/**
* Returns the stack in slot i
*/
public ItemStack getStackInSlot(int par1)
{
return goldItemStacks[par1];
}
/**
* Decrease the size of the stack in slot (first int arg) by the amount of
* the second int arg. Returns the new stack.
*/
public ItemStack decrStackSize(int par1, int par2)
{
if (goldItemStacks[par1] != null)
{
if (goldItemStacks[par1].stackSize <= par2)
{
ItemStack itemstack = goldItemStacks[par1];
goldItemStacks[par1] = null;
return itemstack;
}
ItemStack itemstack1 = goldItemStacks[par1].splitStack(par2);
if (goldItemStacks[par1].stackSize == 0)
{
goldItemStacks[par1] = null;
}
return itemstack1;
}
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 (goldItemStacks[par1] != null)
{
ItemStack itemstack = goldItemStacks[par1];
goldItemStacks[par1] = null;
return itemstack;
}
else
{
return null;
}
}
/**
* Sets the given item stack to the specified slot in the inventory (can be
* crafting or armor sections).
*/
public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
{
goldItemStacks[par1] = par2ItemStack;
if (par2ItemStack != null && par2ItemStack.stackSize > getInventoryStackLimit())
{
par2ItemStack.stackSize = getInventoryStackLimit();
}
}
/**
* Returns the name of the inventory.
*/
public String getInvName()
{
return "container.goldOven";
}
/**
* Reads a tile entity from NBT.
*/
public void readFromNBT(NBTTagCompound par1NBTTagCompound)
{
super.readFromNBT(par1NBTTagCompound);
NBTTagList nbttaglist = par1NBTTagCompound.getTagList("Items");
goldItemStacks = new ItemStack[getSizeInventory()];
for (int i = 0; i < nbttaglist.tagCount(); i++)
{
NBTTagCompound nbttagcompound = (NBTTagCompound) nbttaglist.tagAt(i);
byte byte0 = nbttagcompound.getByte("Slot");
if (byte0 >= 0 && byte0 < goldItemStacks.length)
{
goldItemStacks[byte0] = ItemStack.loadItemStackFromNBT(nbttagcompound);
}
}
front = par1NBTTagCompound.getInteger("FrontDirection");
goldBurnTime = par1NBTTagCompound.getShort("BurnTime");
goldCookTime = par1NBTTagCompound.getShort("CookTime");
goldItemBurnTime = getItemBurnTime(goldItemStacks[1]);
}
/**
* Writes a tile entity to NBT.
*/
public void writeToNBT(NBTTagCompound par1NBTTagCompound)
{
super.writeToNBT(par1NBTTagCompound);
par1NBTTagCompound.setInteger("FrontDirection", (int) front);
par1NBTTagCompound.setShort("BurnTime", (short) goldBurnTime);
par1NBTTagCompound.setShort("CookTime", (short) goldCookTime);
NBTTagList nbttaglist = new NBTTagList();
for (int i = 0; i < goldItemStacks.length; i++)
{
if (goldItemStacks[i] != null)
{
NBTTagCompound nbttagcompound = new NBTTagCompound();
nbttagcompound.setByte("Slot", (byte) i);
goldItemStacks[i].writeToNBT(nbttagcompound);
nbttaglist.appendTag(nbttagcompound);
}
}
par1NBTTagCompound.setTag("Items", nbttaglist);
}
/**
* Returns the maximum stack size for a inventory slot. Seems to always be
* 64, possibly will be extended. *Isn't this more of a set than a get?*
*/
public int getInventoryStackLimit()
{
return 64;
}
/**
* Returns an integer between 0 and the passed value representing how close
* the current item is to being completely cooked
*/
public int getCookProgressScaled(int par1)
{
return (goldCookTime * par1) / 200;
}
/**
* Returns an integer between 0 and the passed value representing how much
* burn time is left on the current fuel item, where 0 means that the item
* is exhausted and the passed value means that the item is fresh
*/
public int getBurnTimeRemainingScaled(int par1)
{
if (goldItemBurnTime == 0)
{
goldItemBurnTime = 200;
}
return (goldBurnTime * par1) / goldItemBurnTime;
}
/**
* Returns true if the furnace is currently burning
*/
public boolean isBurning()
{
return goldBurnTime > 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.goldBurnTime > 0;
boolean var2 = false;
if (this.goldBurnTime > 0)
{
--this.goldBurnTime;
}
if (!this.worldObj.isRemote)
{
if (this.goldBurnTime == 0 && this.canSmelt())
{
this.goldItemBurnTime = this.goldBurnTime = getItemBurnTime(this.goldItemStacks[1]);
if (this.goldBurnTime > 0)
{
var2 = true;
if (this.goldItemStacks[1] != null)
{
--this.goldItemStacks[1].stackSize;
if (this.goldItemStacks[1].stackSize == 0)
{
Item var3 = this.goldItemStacks[1].getItem().getContainerItem();
this.goldItemStacks[1] = var3 == null ? null : new ItemStack(var3);
}
}
}
}
if (this.isBurning() && this.canSmelt())
{
++this.goldCookTime;
if (this.goldCookTime == 200)
{
this.goldCookTime = 0;
this.smeltItem();
var2 = true;
}
}
else
{
this.goldCookTime = 0;
}
if (var1 != this.goldBurnTime > 0)
{
var2 = true;
this.validate();
}
}
boolean check = isActive;
isActive = isBurning();
if (isActive != check)
{
this.worldObj.markBlockForUpdate(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 (goldItemStacks[0] == null)
{
return false;
}
ItemStack itemstack = RecipesQuartzFurnace.smelting().getSmeltingResult(goldItemStacks[0].getItem().itemID);
if (itemstack == null)
{
return false;
}
if (goldItemStacks[2] == null)
{
return true;
}
if (!goldItemStacks[2].isItemEqual(itemstack))
{
return false;
}
if (goldItemStacks[2].stackSize < getInventoryStackLimit() && goldItemStacks[2].stackSize < goldItemStacks[2].getMaxStackSize())
{
return true;
}
return goldItemStacks[2].stackSize < itemstack.getMaxStackSize();
}
/**
* Turn one item from the furnace source stack into the appropriate smelted
* item in the furnace result stack
*/
public void smeltItem()
{
if (this.canSmelt())
{
ItemStack var1 = RecipesQuartzFurnace.smelting().getSmeltingResult(this.goldItemStacks[0].getItem().itemID);
if (this.goldItemStacks[2] == null)
{
this.goldItemStacks[2] = var1.copy();
}
else if (this.goldItemStacks[2].itemID == var1.itemID)
{
++this.goldItemStacks[2].stackSize;
}
--this.goldItemStacks[0].stackSize;
if (this.goldItemStacks[0].stackSize == 0)
{
Item var2 = this.goldItemStacks[0].getItem().getContainerItem();
this.goldItemStacks[0] = var2 == null ? null : new ItemStack(var2);
}
}
}
/**
* Return true if item is a fuel source (getItemBurnTime() > 0).
*/
public static boolean isItemFuel(ItemStack par0ItemStack)
{
return getItemBurnTime(par0ItemStack) > 0;
}
/**
* 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 par1ItemStack)
{
if (par1ItemStack == null)
{
return 0;
}
int i = par1ItemStack.getItem().itemID;
if (i < 256 && Block.blocksList[i].blockMaterial == Material.wood)
{
return 300;
}
if (i == Item.stick.itemID)
{
return 100;
}
if (i == Item.coal.itemID)
{
return 1600;
}
if (i == Item.bucketLava.itemID)
{
return 20000;
}
if (i == Block.sapling.blockID)
{
return 100;
}
if (i == Item.blazeRod.itemID)
{
return 2400;
}
else
{
return ModLoader.addAllFuel(par1ItemStack.itemID, par1ItemStack.getItemDamage());
}
}
/**
* 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()
{
}
public boolean isActive()
{
return this.isActive;
}
@Override
public boolean isInvNameLocalized()
{
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isItemValidForSlot(int i, ItemStack itemstack)
{
// TODO Auto-generated method stub
return true;
}
public void setGuiDisplayName(String displayName) {
// TODO Auto-generated method stub
}
}
Container:
public class ContainerQuartzFurnace extends Container
{
private TileEntityQuartzFurnace goldOven;
private int lastGoldOvenCookTime;
private int lastGoldOvenBurnTime;
private int lastGoldOvenItemBurnTime;
public ContainerQuartzFurnace(InventoryPlayer par1InventoryPlayer, TileEntityQuartzFurnace par2TileEntityGoldOven)
{
lastGoldOvenCookTime = 0;
lastGoldOvenBurnTime = 0;
lastGoldOvenItemBurnTime = 0;
goldOven = par2TileEntityGoldOven;
addSlotToContainer(new Slot(par2TileEntityGoldOven, 0, 56, 17));
addSlotToContainer(new Slot(par2TileEntityGoldOven, 1, 56, 53));
addSlotToContainer(new slotQuartzFurnace(par1InventoryPlayer.player, par2TileEntityGoldOven, 2, 116, 35));
for (int i = 0; i < 3; i++)
{
for (int k = 0; k < 9; k++)
{
addSlotToContainer(new Slot(par1InventoryPlayer, k + i * 9 + 9, 8 + k * 18, 84 + i * 18));
}
}
for (int j = 0; j < 9; j++)
{
addSlotToContainer(new Slot(par1InventoryPlayer, j, 8 + j * 18, 142));
}
}
/**
* Updates crafting matrix; called from onCraftMatrixChanged. Args: none
*/
public void detectAndSendChanges()
{
super.detectAndSendChanges();
Iterator var1 = this.crafters.iterator();
while (var1.hasNext())
{
ICrafting var2 = (ICrafting)var1.next();
if (this.lastGoldOvenCookTime != this.goldOven.goldCookTime)
{
var2.sendProgressBarUpdate(this, 0, this.goldOven.goldCookTime);
}
if (this.lastGoldOvenBurnTime != this.goldOven.goldBurnTime)
{
var2.sendProgressBarUpdate(this, 1, this.goldOven.goldBurnTime);
}
if (this.lastGoldOvenItemBurnTime != this.goldOven.goldItemBurnTime)
{
var2.sendProgressBarUpdate(this, 2, this.goldOven.goldItemBurnTime);
}
}
this.lastGoldOvenCookTime = this.goldOven.goldCookTime;
this.lastGoldOvenBurnTime = this.goldOven.goldBurnTime;
this.lastGoldOvenItemBurnTime = this.goldOven.goldItemBurnTime;
}
public void updateProgressBar(int par1, int par2)
{
if (par1 == 0)
{
goldOven.goldCookTime = par2;
}
if (par1 == 1)
{
goldOven.goldBurnTime = par2;
}
if (par1 == 2)
{
goldOven.goldItemBurnTime = par2;
}
}
public boolean canInteractWith(EntityPlayer par1EntityPlayer)
{
return goldOven.isUseableByPlayer(par1EntityPlayer);
}
/**
* Called to transfer a stack from one inventory to the other eg. when shift clicking.
*/
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slotnumber)
{
ItemStack itemstack = null;
Slot slot = (Slot)inventorySlots.get(slotnumber);
if (slot != null && slot.getHasStack())
{
ItemStack itemstack1 = slot.getStack();
itemstack = itemstack1.copy();
if (slotnumber == 2)
{
if (!mergeItemStack(itemstack1, 3, 39, true))
{
return null;
}
slot.onSlotChange(itemstack1, itemstack);
}
else if (slotnumber == 1 || slotnumber == 0)
{
if (!mergeItemStack(itemstack1, 3, 39, false))
{
return null;
}
}
else if (RecipesQuartzFurnace.smelting().getSmeltingResult(itemstack1.getItem().itemID) != null)
{
if (!mergeItemStack(itemstack1, 0, 1, false))
{
return null;
}
}
else if (TileEntityQuartzFurnace.isItemFuel(itemstack1))
{
if (!mergeItemStack(itemstack1, 1, 2, false))
{
return null;
}
}
else if (slotnumber >= 3 && slotnumber < 30)
{
if (!mergeItemStack(itemstack1, 30, 39, false))
{
return null;
}
}
else if (slotnumber >= 30 && slotnumber < 39 && !mergeItemStack(itemstack1, 3, 30, false))
{
return null;
}
if (itemstack1.stackSize == 0)
{
slot.putStack(null);
}
else
{
slot.onSlotChanged();
}
if (itemstack1.stackSize == itemstack.stackSize)
{
return null;
}
slot.onPickupFromSlot(player, itemstack);
}
return itemstack;
}
}
guihandler:
public class GuiHandler implements IGuiHandler {
@Override
public Object getServerGuiElement(int id, EntityPlayer player, World world,
int x, int y, int z) {
TileEntity tile_entity = world.getBlockTileEntity(x, y, z);
if (id == 0) {
return new ContainerQuartzFurnace(player.inventory,
(TileEntityQuartzFurnace) tile_entity);
}
return null;
}
@Override
public Object getClientGuiElement(int id, EntityPlayer player, World world,
int x, int y, int z) {
TileEntity tile_entity = world.getBlockTileEntity(x, y, z);
if (id == 0) {
return new GuiQuartzFurnace(player.inventory,
(TileEntityQuartzFurnace) tile_entity);
}
return null;
}
}
GuiFurnace:
@SideOnly(Side.CLIENT)
public class GuiQuartzFurnace extends GuiContainer
{
private static final ResourceLocation furnaceGuiTextures = new ResourceLocation("textures/gui/container/furnace.png");
private TileEntityQuartzFurnace furnaceInventory;
public GuiQuartzFurnace(InventoryPlayer par1InventoryPlayer, TileEntityQuartzFurnace par2TileEntityFurnace)
{
super(new ContainerQuartzFurnace(par1InventoryPlayer, par2TileEntityFurnace));
this.furnaceInventory = par2TileEntityFurnace;
}
/**
* Draw the foreground layer for the GuiContainer (everything in front of the items)
*/
protected void drawGuiContainerForegroundLayer(int par1, int par2)
{
String s = this.furnaceInventory.isInvNameLocalized() ? this.furnaceInventory.getInvName() : I18n.getString(this.furnaceInventory.getInvName());
this.fontRenderer.drawString(s, this.xSize / 2 - this.fontRenderer.getStringWidth(s) / 2, 6, 4210752);
this.fontRenderer.drawString(I18n.getString("Refiner"), 8, this.ySize - 96 + 2, 4210752);
}
/**
* Draw the background layer for the GuiContainer (everything behind the items)
*/
protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
{
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
this.mc.getTextureManager().bindTexture(furnaceGuiTextures);
int k = (this.width - this.xSize) / 2;
int l = (this.height - this.ySize) / 2;
this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
int i1;
if (this.furnaceInventory.isBurning())
{
i1 = this.furnaceInventory.getBurnTimeRemainingScaled(12);
this.drawTexturedModalRect(k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 2);
}
i1 = this.furnaceInventory.getCookProgressScaled(24);
this.drawTexturedModalRect(k + 79, l + 34, 176, 14, i1 + 1, 16);
}
}
RecipesFurnace:
public class RecipesQuartzFurnace
{
private static final RecipesQuartzFurnace goldOvenBase = new RecipesQuartzFurnace();
/** The list of smelting results. */
private Map goldOvenList = new HashMap();
private Map goldOvenExperience = new HashMap();
/**
* Used to call methods addSmelting and getSmeltingResult.
*/
public static final RecipesQuartzFurnace smelting()
{
return goldOvenBase;
}
private RecipesQuartzFurnace()
{
addSmelting(Block.dirt.blockID, new ItemStack(Block.cobblestone, 1, 0), 0.7F);
addSmelting(Item.porkCooked.itemID ,new ItemStack(Item.porkRaw, 1,0), 0.7F);
addSmelting(mod_SecretMod.EnderBlock.blockID, new ItemStack(mod_SecretMod.EnderOre,1),0.5F);
addSmelting(mod_SecretMod.UltimateOre.blockID, new ItemStack(mod_SecretMod.UltimateIngot,1),0.5F);
addSmelting(mod_SecretMod.GreenOre.blockID, new ItemStack(mod_SecretMod.GreenIngot,1),0.5F);
}
/**
* Adds a smelting recipe.
*/
public void addSmelting(int id, ItemStack itemStack, float experience)
{
goldOvenList.put(Integer.valueOf(id), itemStack);
this.goldOvenExperience.put(Integer.valueOf(itemStack.itemID), Float.valueOf(experience));
}
/**
* Returns the smelting result of an item.
*/
public ItemStack getSmeltingResult(int id)
{
return (ItemStack)goldOvenList.get(Integer.valueOf(id));
}
public Map getSmeltingList()
{
return goldOvenList;
}
public float getExperience(int par1)
{
return this.goldOvenExperience.containsKey(Integer.valueOf(par1)) ? ((Float)this.goldOvenExperience.get(Integer.valueOf(par1))).floatValue() : 0.0F;
}
}
SlotFurnace:
public class slotQuartzFurnace extends Slot
{
/** The player that is using the GUI where this slot resides. */
private EntityPlayer thePlayer;
private int field_75228_b;
public slotQuartzFurnace(EntityPlayer par1EntityPlayer, IInventory par2IInventory, int par3, int par4, int par5)
{
super(par2IInventory, par3, par4, par5);
this.thePlayer = par1EntityPlayer;
}
/**
* Check if the stack is a valid item for this slot. Always true beside for the armor slots.
*/
public boolean isItemValid(ItemStack par1ItemStack)
{
return false;
}
/**
* Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new
* stack.
*/
public ItemStack decrStackSize(int par1)
{
if (this.getHasStack())
{
this.field_75228_b += Math.min(par1, this.getStack().stackSize);
}
return super.decrStackSize(par1);
}
/**
* Called when the player picks up an item from an inventory slot
*/
public void func_82870_a(EntityPlayer par1EntityPlayer, ItemStack par2ItemStack)
{
this.onCrafting(par2ItemStack);
super.onPickupFromSlot(par1EntityPlayer, par2ItemStack);
}
/**
* the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an
* internal count then calls onCrafting(item).
*/
protected void onCrafting(ItemStack par1ItemStack, int par2)
{
this.field_75228_b += par2;
this.onCrafting(par1ItemStack);
}
/**
* the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood.
*/
protected void onCrafting(ItemStack par1ItemStack)
{
par1ItemStack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_75228_b);
if (!this.thePlayer.worldObj.isRemote)
{
int var2 = this.field_75228_b;
float var3 = RecipesQuartzFurnace.smelting().getExperience(par1ItemStack.itemID);
int var4;
if (var3 == 0.0F)
{
var2 = 0;
}
else if (var3 < 1.0F)
{
var4 = MathHelper.floor_float((float)var2 * var3);
if (var4 < MathHelper.ceiling_float_int((float)var2 * var3) && (float)Math.random() < (float)var2 * var3 - (float)var4)
{
++var4;
}
var2 = var4;
}
while (var2 > 0)
{
var4 = EntityXPOrb.getXPSplit(var2);
var2 -= var4;
this.thePlayer.worldObj.spawnEntityInWorld(new EntityXPOrb(this.thePlayer.worldObj, this.thePlayer.posX, this.thePlayer.posY + 0.5D, this.thePlayer.posZ + 0.5D, var4));
}
}
this.field_75228_b = 0;
}
}