Hey everybody!
Last week or so I posted a topic here that showed my coed and my error, well no I fixed that and everything is working, but how do I add the recipes? Here's my code:
TileEntity:
package net.minecraft.src.CocoCraft.Misc;
import java.util.List;
import net.minecraft.src.*;
public class TileEntityAlloynizer extends TileEntity
implements IInventory
{
private ItemStack furnaceItemStacks[];
public int furnaceBurnTime;
public int currentItemBurnTime;
public int furnaceCookTime;
public TileEntityAlloynizer()
{
furnaceItemStacks = new ItemStack[7];
furnaceBurnTime = 0;
currentItemBurnTime = 0;
furnaceCookTime = 0;
}
public int getSizeInventory()
{
return furnaceItemStacks.length;
}
public ItemStack decrStackSize(int i, int j)
{
if (furnaceItemStacks[i] != null)
{
if (furnaceItemStacks[i].stackSize <= j)
{
ItemStack itemstack = furnaceItemStacks[i];
furnaceItemStacks[i] = null;
return itemstack;
}
ItemStack itemstack1 = furnaceItemStacks[i].splitStack(j);
if (furnaceItemStacks[i].stackSize == 0)
{
furnaceItemStacks[i] = null;
}
return itemstack1;
}
else
{
return null;
}
}
public void setInventorySlotContents(int i, ItemStack itemstack)
{
furnaceItemStacks[i] = itemstack;
if (itemstack != null && itemstack.stackSize > getInventoryStackLimit())
{
itemstack.stackSize = getInventoryStackLimit();
}
}
public String getInvName()
{
return "Alloynizer";
}
public void readFromNBT(NBTTagCompound nbttagcompound)
{
super.readFromNBT(nbttagcompound);
NBTTagList nbttaglist = nbttagcompound.getTagList("Items");
furnaceItemStacks = new ItemStack[getSizeInventory()];
for (int i = 0; i < nbttaglist.tagCount(); i++)
{
NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttaglist.tagAt(i);
byte byte0 = nbttagcompound1.getByte("Slot");
if (byte0 >= 0 && byte0 < furnaceItemStacks.length)
{
furnaceItemStacks[byte0] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
}
}
furnaceBurnTime = nbttagcompound.getShort("BurnTime");
furnaceCookTime = nbttagcompound.getShort("CookTime");
currentItemBurnTime = getItemBurnTime(furnaceItemStacks[1]);
}
public void writeToNBT(NBTTagCompound nbttagcompound)
{
super.writeToNBT(nbttagcompound);
nbttagcompound.setShort("BurnTime", (short)furnaceBurnTime);
nbttagcompound.setShort("CookTime", (short)furnaceCookTime);
NBTTagList nbttaglist = new NBTTagList();
for (int i = 0; i < furnaceItemStacks.length; i++)
{
if (furnaceItemStacks[i] != null)
{
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound1.setByte("Slot", (byte)i);
furnaceItemStacks[i].writeToNBT(nbttagcompound1);
nbttaglist.appendTag(nbttagcompound1);
}
}
nbttagcompound.setTag("Items", nbttaglist);
}
public int getInventoryStackLimit()
{
return 64;
}
public int getCookProgressScaled(int i)
{
return (furnaceCookTime * i) / 200;
}
public int getBurnTimeRemainingScaled(int i)
{
if (currentItemBurnTime == 0)
{
currentItemBurnTime = 200;
}
return (furnaceBurnTime * i) / currentItemBurnTime;
}
public boolean isBurning()
{
return furnaceBurnTime > 0;
}
public void updateEntity()
{
boolean flag = furnaceBurnTime > 0;
boolean flag1 = false;
if (furnaceBurnTime > 0)
{
furnaceBurnTime-= 2;
}
if (!worldObj.isRemote)
{
if (furnaceBurnTime == 0 && canSmelt())
{
currentItemBurnTime = furnaceBurnTime = getItemBurnTime(furnaceItemStacks[7]);
if (furnaceBurnTime > 0)
{
flag1 = true;
if (furnaceItemStacks[1] != null)
{
if (furnaceItemStacks[1].getItem().func_46056_k())
{
furnaceItemStacks[1] = new ItemStack(furnaceItemStacks[1].getItem().setFull3D());
}
else
{
furnaceItemStacks[1].stackSize--;
}
if (furnaceItemStacks[1].stackSize == 0)
{
furnaceItemStacks[1] = null;
}
}
}
}
if (isBurning() && canSmelt())
{
furnaceCookTime+= 2;
if (furnaceCookTime == 200)
{
furnaceCookTime = 0;
smeltItem();
flag1 = true;
}
}
else
{
furnaceCookTime = 0;
}
}
if (flag1)
{
onInventoryChanged();
}
}
private boolean canSmelt()
{
ItemStack result = getRecipe(furnaceItemStacks[0], furnaceItemStacks[1], furnaceItemStacks[2], furnaceItemStacks[3], furnaceItemStacks[4]);
if(result == null) return false;
if(furnaceItemStacks[2] == null) return true;
if(furnaceItemStacks[2] != null && furnaceItemStacks[2].itemID == result.itemID&& furnaceItemStacks[2].stackSize < (furnaceItemStacks[2].getMaxStackSize() - (result.stackSize-1))) return true;
return false;
}
public void smeltItem()
{
if (!canSmelt())
{
return;
}
ItemStack itemstack = getRecipe(furnaceItemStacks[0], furnaceItemStacks[1], furnaceItemStacks[2], furnaceItemStacks[3], furnaceItemStacks[4]);
if (furnaceItemStacks[2] == null)
{
furnaceItemStacks[2] = itemstack.copy();
}
else if (furnaceItemStacks[2].itemID == itemstack.itemID)
{
furnaceItemStacks[2].stackSize+= itemstack.stackSize;
}
if(furnaceItemStacks[0] != null){
furnaceItemStacks[0].stackSize--;
if (furnaceItemStacks[0].stackSize <= 0)
{
furnaceItemStacks[0] = null;
}
}
if(furnaceItemStacks[3] != null){
furnaceItemStacks[3].stackSize--;
if (furnaceItemStacks[3].stackSize <= 0)
{
furnaceItemStacks[3] = null;
}
}
}
private int getItemBurnTime(ItemStack itemstack)
{
if (itemstack == null)
{
return 0;
}
int i = itemstack.getItem().shiftedIndex;
if (i == mod_CocoCraft.MagicDust.shiftedIndex)
{
return 800;
}
else
{
return 0;
}
}
public boolean isUseableByPlayer(EntityPlayer entityplayer)
{
if (worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) != this)
{
return false;
}
return entityplayer.getDistanceSq((double)xCoord + 0.5D, (double)yCoord + 0.5D, (double)zCoord + 0.5D) <= 64D;
}
public void openChest()
{
}
public void closeChest()
{
}
@Override
public ItemStack getStackInSlotOnClosing(int var1) {
return null;
}
private ItemStack getRecipe(ItemStack itemStack, ItemStack itemStack0, ItemStack itemStack1, ItemStack itemStack2, ItemStack itemStack3) {
int i1;
int i2;
int i3;
int i4;
int i5;
if(itemStack == null) i1 = 0; else i1 = itemStack.itemID;
if(itemStack0 == null) i2 = 0; else i2 = itemStack0.itemID;
if(itemStack1 == null) i3 = 0; else i3 = itemStack1.itemID;
if(itemStack2 == null) i4 = 0; else i4 = itemStack2.itemID;
if(itemStack3 == null) i5 = 0; else i5 = itemStack3.itemID;
if(i1 == Block.blockDiamond.blockID && i2 == Block.blockGold.blockID) return new ItemStack(Block.blockDiamond, 2);
if(i2 == Block.blockDiamond.blockID && i1 == Block.blockGold.blockID) return new ItemStack(Block.blockDiamond, 2);
if(i1 == Item.diamond.shiftedIndex && i2 == mod_CocoCraft.CocoIngot.shiftedIndex && i3 == mod_CocoCraft.MithrilIngot.shiftedIndex && i4 == Item.coal.shiftedIndex && i5 == Item.coal.shiftedIndex) return new ItemStack(mod_CocoCraft.Alloy, 2);
return null;
}
public ItemStack getStackInSlot(int var1)
{
return this.furnaceItemStacks[var1];
}
}
Block:
package net.minecraft.src.CocoCraft.Blocks;
import net.minecraft.src.CocoCraft.Misc.*;
import net.minecraft.src.*;
import java.util.ArrayList;
import java.util.Random;
public class BlockAlloynizer extends BlockContainer
{
private Random rand = new Random();
private final boolean isActive;
private static boolean keepFurnaceInventory = false;
public BlockAlloynizer(int id, boolean flag)
{
super(id, Material.rock);
isActive = flag;
}
public boolean isOpaqueCube() {
return false;
}
public void addCreativeItems(ArrayList itemList) {
itemList.add(new ItemStack(this));
}
public boolean renderAsNormalBlock() {
return true;
}
/**
* Called whenever the block is added into the world. Args: world, x, y, z
*/
public void onBlockAdded(World world, int x, int y, int z)
{
super.onBlockAdded(world, x, y, z);
this.setDefaultDirection(world, x, y, z);
}
/**
* set a blocks direction
*/
private void setDefaultDirection(World world, int x, int y, int z)
{
if (!world.isRemote)
{
int var5 = world.getBlockId(x, y, z - 1);
int var6 = world.getBlockId(x, y, z + 1);
int var7 = world.getBlockId(x - 1, y, z);
int var8 = world.getBlockId(x + 1, y, z);
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;
}
world.setBlockMetadataWithNotify(x, y, z, var9);
}
}
public int getBlockTexture(IBlockAccess iblockaccess, int i, int j, int k, int l)
{
if(l == 1)
{
return mod_CocoCraft.DuplicatorSide;
}
if(l == 0)
{
return mod_CocoCraft.DuplicatorSide;
}
int i1 = iblockaccess.getBlockMetadata(i, j, k);
if(l != i1)
{
return mod_CocoCraft.DuplicatorSide;
}
else
{
return mod_CocoCraft.DuplicatorFront;
}
}
public int getBlockTextureFromSide(int side)
{
if (side == 3)
{
return mod_CocoCraft.DuplicatorFront;
}
else
{
return mod_CocoCraft.DuplicatorSide;
}
}
/**
* Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the
* block.
*/
public boolean blockActivated(World world, int x, int y, int z, EntityPlayer player)
{
if (world.isRemote)
{
return true;
}
else
{
TileEntityAlloynizer tile = (TileEntityAlloynizer)world.getBlockTileEntity(x, y, z);
if (tile != null)
{
GuiAlloynizer GUI = new GuiAlloynizer(player.inventory, tile);
ModLoader.openGUI(player, GUI);
}
return true;
}
}
/**
/**
* Returns the TileEntity used by this block.
*/
public TileEntity getBlockEntity()
{
return new TileEntityAlloynizer();
}
/**
* Called when the block is placed in the world.
*/
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving entity)
{
int var6 = MathHelper.floor_double((double)(entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
if (var6 == 0)
{
world.setBlockMetadataWithNotify(x, y, z, 2);
}
if (var6 == 1)
{
world.setBlockMetadataWithNotify(x, y, z, 5);
}
if (var6 == 2)
{
world.setBlockMetadataWithNotify(x, y, z, 3);
}
if (var6 == 3)
{
world.setBlockMetadataWithNotify(x, y, z, 4);
}
}
/**
* Called whenever the block is removed.
*/
public void onBlockRemoval(World world, int x, int y, int z)
{
if (!keepFurnaceInventory)
{
TileEntityAlloynizer tile = (TileEntityAlloynizer)world.getBlockTileEntity(x, y, z);
if (tile != null)
{
for (int var6 = 0; var6 < tile.getSizeInventory(); ++var6)
{
ItemStack var7 = tile.getStackInSlot(var6);
if (var7 != null)
{
float var8 = this.rand.nextFloat() * 0.8F + 0.1F;
float var9 = this.rand.nextFloat() * 0.8F + 0.1F;
float var10 = this.rand.nextFloat() * 0.8F + 0.1F;
while (var7.stackSize > 0)
{
int var11 = this.rand.nextInt(21) + 10;
if (var11 > var7.stackSize)
{
var11 = var7.stackSize;
}
var7.stackSize -= var11;
EntityItem var12 = new EntityItem(world, (double)((float)x + var8), (double)((float)y + var9), (double)((float)z + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage()));
if (var7.hasTagCompound())
{
var12.item.setTagCompound((NBTTagCompound)var7.getTagCompound().copy());
}
float var13 = 0.05F;
var12.motionX = (double)((float)this.rand.nextGaussian() * var13);
var12.motionY = (double)((float)this.rand.nextGaussian() * var13 + 0.2F);
var12.motionZ = (double)((float)this.rand.nextGaussian() * var13);
world.spawnEntityInWorld(var12);
}
}
}
}
}
super.onBlockRemoval(world, x, y, z);
}
}
Container:
package net.minecraft.src.CocoCraft.Misc;
import net.minecraft.src.CocoCraft.*;
import net.minecraft.src.CocoCraft.Misc.TileEntityAlloynizer;
import net.minecraft.src.*;
import java.util.Random;
public class ContainerAlloynizer extends Container
{
private TileEntityAlloynizer furnace;
private int lastCookTime;
private int lastBurnTime;
private int lastItemBurnTime;
public ContainerAlloynizer(InventoryPlayer inventoryplayer, TileEntityAlloynizer tile)
{
lastCookTime = 0;
lastBurnTime = 0;
lastItemBurnTime = 0;
furnace = tile;
//Fuel
//input 6
this.addSlot(new Slot(tile, 1, 44, 62));
//Inputs
//input 1
this.addSlot(new Slot(tile, 0, 11, 17));
//input 2
this.addSlot(new Slot(tile, 3, 33, 17));
//input 3
this.addSlot(new Slot(tile, 4, 56, 17));
//input 4
this.addSlot(new Slot(tile, 5, 22, 36));
//input 5
this.addSlot(new Slot(tile, 6, 44, 36));
this.addSlot(new SlotFurnace(inventoryplayer.player, tile, 2, 116, 35));
for (int i = 0; i < 3; i++)
{
for (int k = 0; k < 9; k++)
{
addSlot(new Slot(inventoryplayer, k + i * 9 + 9, 8 + k * 18, 84 + i * 18));
}
}
for (int j = 0; j < 9; j++)
{
addSlot(new Slot(inventoryplayer, j, 8 + j * 18, 142));
}
}
public void updateCraftingResults()
{
super.updateCraftingResults();
for (int i = 0; i < crafters.size(); i++)
{
ICrafting icrafting = (ICrafting)crafters.get(i);
if (lastCookTime != furnace.furnaceCookTime)
{
icrafting.updateCraftingInventoryInfo(this, 0, furnace.furnaceCookTime);
}
if (lastBurnTime != furnace.furnaceBurnTime)
{
icrafting.updateCraftingInventoryInfo(this, 1, furnace.furnaceBurnTime);
}
if (lastItemBurnTime != furnace.currentItemBurnTime)
{
icrafting.updateCraftingInventoryInfo(this, 2, furnace.currentItemBurnTime);
}
}
lastCookTime = furnace.furnaceCookTime;
lastBurnTime = furnace.furnaceBurnTime;
lastItemBurnTime = furnace.currentItemBurnTime;
}
public void updateProgressBar(int i, int j)
{
if (i == 0)
{
furnace.furnaceCookTime = j;
}
if (i == 1)
{
furnace.furnaceBurnTime = j;
}
if (i == 2)
{
furnace.currentItemBurnTime = j;
}
}
public boolean canInteractWith(EntityPlayer entityplayer)
{
return furnace.isUseableByPlayer(entityplayer);
}
public ItemStack transferStackInSlot(int i)
{
ItemStack itemstack = null;
Slot slot = (Slot)inventorySlots.get(i);
if (slot != null && slot.getHasStack())
{
ItemStack itemstack1 = slot.getStack();
itemstack = itemstack1.copy();
if (i == 2)
{
if (!mergeItemStack(itemstack1, 3, 39, true))
{
return null;
}
}
else if (i >= 3 && i < 30)
{
if (!mergeItemStack(itemstack1, 30, 39, false))
{
return null;
}
}
else if (i >= 30 && i < 39)
{
if (!mergeItemStack(itemstack1, 3, 30, false))
{
return null;
}
}
else if (!mergeItemStack(itemstack1, 3, 39, false))
{
return null;
}
if (itemstack1.stackSize == 0)
{
slot.putStack(null);
}
else
{
slot.onSlotChanged();
}
if (itemstack1.stackSize != itemstack.stackSize)
{
slot.onPickupFromSlot(itemstack1);
}
else
{
return null;
}
}
return itemstack;
}
}
Gui and Slot class aren't needed for this. Also as you may see in my TileEntity class there is a methods thas seems to add a recipe, but does not work, it does, however, work in another tile entity class, but thas furnace only has 2 inputs, this one 5.
Help would really be appreciated.
YoWazzup