Posted July 28, 201312 yr everybody knows how furnaces change what there front is when they are cooking. mine is not doing that and i am not sure why. i will edit it gui and make it unique latter but first i want this to work. the code is on my github: https://github.com/bh202548/Magitricity My github is https://github.com/bh202548/
July 29, 201312 yr The way that the furnace uses is changing the blockID Block.furnaceIdle.blockID; Block.furnaceActive.blockID; Yeah this is the way the basic furnace it does. I help the baconMod creator a little bit out. And there i did found a way how to fix the problem. Here: BlockBaconMaker: package minecraftwero.baconMod.common.blocks; import java.util.Random; import minecraftwero.baconMod.Bacon; import minecraftwero.baconMod.common.lib.BaconGuiIDs; import minecraftwero.baconMod.common.tile.BaconMaker; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Icon; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class BlockBaconMaker extends BlockContainer { private String[] texture; private Icon[] icons = new Icon[6]; public BlockBaconMaker(int par1, String name, String...textures) { super(par1, Material.rock); texture = textures; this.setCreativeTab(Bacon.baconMod); } @Override @SideOnly(Side.CLIENT) public void registerIcons(IconRegister par1) { for(int i = 0; i<texture.length;i++) { icons[i] = par1.registerIcon(texture[i]); } } @Override @SideOnly(Side.CLIENT) public Icon getIcon(int par1, int par2) { if(par1 == ForgeDirection.NORTH.getOpposite().ordinal())return icons[2]; else if(par1 == ForgeDirection.WEST.ordinal())return icons[3]; else if(par1 == ForgeDirection.UP.ordinal())return icons[1]; else return icons[4]; } @SideOnly(Side.CLIENT) public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random) { BaconMaker tile = (BaconMaker) par1World.getBlockTileEntity(par2, par3, par4); if(tile != null && tile.fuel > 0) { int l = tile.getFacing(); float f = (float)par2 + 0.5F; float f1 = (float)par3 + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F; float f2 = (float)par4 + 0.5F; float f3 = 0.52F; float f4 = par5Random.nextFloat() * 0.6F - 0.3F; if (l == 4) { par1World.spawnParticle("smoke", (double)(f - f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D); par1World.spawnParticle("flame", (double)(f - f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D); } else if (l == 5) { par1World.spawnParticle("smoke", (double)(f + f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D); par1World.spawnParticle("flame", (double)(f + f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D); } else if (l == 2) { par1World.spawnParticle("smoke", (double)(f + f4), (double)f1, (double)(f2 - f3), 0.0D, 0.0D, 0.0D); par1World.spawnParticle("flame", (double)(f + f4), (double)f1, (double)(f2 - f3), 0.0D, 0.0D, 0.0D); } else if (l == 3) { par1World.spawnParticle("smoke", (double)(f + f4), (double)f1, (double)(f2 + f3), 0.0D, 0.0D, 0.0D); par1World.spawnParticle("flame", (double)(f + f4), (double)f1, (double)(f2 + f3), 0.0D, 0.0D, 0.0D); } } } @Override public TileEntity createNewTileEntity(World world) { return new BaconMaker(); } @Override @SideOnly(Side.CLIENT) public Icon getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) { int meta = par1IBlockAccess.getBlockMetadata(par2, par3, par4); BaconMaker tile = (BaconMaker) par1IBlockAccess.getBlockTileEntity(par2, par3, par4); if(tile != null) { if(tile.facing == par5) { if(tile.fuel > 0) { return icons[5]; } else { return icons[2]; } } else if(par5 == 0)return icons[0]; else if(par5 == 1)return icons[1]; else if(ForgeDirection.getOrientation(tile.facing).getOpposite().ordinal() == ForgeDirection.SOUTH.ordinal())return icons[3]; else return icons[4]; } else { return null; } } @Override public void breakBlock(World par1, int par2, int par3, int par4, int par5, int par6) { super.breakBlock(par1, par2, par3, par4, par5, par6); } //Start @Override public int quantityDropped(Random par1Random) { return 1; } @Override public int idDropped(int par1, Random par2Random, int par3) { return this.blockID; } @Override public int damageDropped(int par1) { return 0; } //End public boolean onBlockActivated(World par1, int par2, int par3, int par4, EntityPlayer par5, int par6, float par7, float par8, float par9) { if(par5.isSneaking()) { return false; } if(!par1.isRemote) { BaconMaker tile = (BaconMaker) par1.getBlockTileEntity(par2, par3, par4); if(tile != null) { par5.openGui(Bacon.instance, BaconGuiIDs.baconMaker, par1, par2, par3, par4); return true; } } return true; } @Override public void onBlockPlacedBy(World par1, int par2, int par3, int par4, EntityLivingBase par5, ItemStack par6) { TileEntity tile = par1.getBlockTileEntity(par2, par3, par4); int facing = MathHelper.floor_double(par5.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; int rotation = 0; if (facing == 0) { rotation = ForgeDirection.NORTH.ordinal(); } else if (facing == 1) { rotation = ForgeDirection.EAST.ordinal(); } else if (facing == 2) { rotation = ForgeDirection.SOUTH.ordinal(); } else if (facing == 3) { rotation = ForgeDirection.WEST.ordinal(); } else { rotation = ForgeDirection.NORTH.ordinal(); } if(tile != null && tile instanceof BaconMaker) { BaconMaker bot = (BaconMaker) tile; bot.setFacing(rotation); } } public void updateTick(World world, int i, int j, int k, Random random) { super.updateTick(world, i, j, k, random); notifyNeighbors(world, i, j, k); world.scheduleBlockUpdate(i, j, k, blockID, tickRate()); } public void onBlockDestroyedByPlayer(World world, int i, int j, int k, int l) { notifyNeighbors(world, i, j, k); } public void notifyNeighbors(World world, int i, int j, int k) { world.notifyBlocksOfNeighborChange(i, j, k, blockID); world.notifyBlocksOfNeighborChange(i, j - 1, k, blockID); world.notifyBlocksOfNeighborChange(i, j + 1, k, blockID); world.notifyBlocksOfNeighborChange(i - 1, j, k, blockID); world.notifyBlocksOfNeighborChange(i + 1, j, k, blockID); world.notifyBlocksOfNeighborChange(i, j, k - 1, blockID); world.notifyBlocksOfNeighborChange(i, j, k + 1, blockID); } public void onBlockAdded(World world, int i, int j, int k) { world.scheduleBlockUpdate(i, j, k, blockID, tickRate()); } public int tickRate() { return 1; } @Override public int getLightValue(IBlockAccess world, int x, int y, int z) { BaconMaker tile = (BaconMaker) world.getBlockTileEntity(x, y, z); if(tile != null) { if(tile.fuel > 0)return 8; else return 0; } else { return 0; } } } TileEntityBaconMaker: package minecraftwero.baconMod.common.tile; import minecraftwero.baconMod.common.core.handlers.BaconMakerRecipes; import minecraftwero.baconMod.common.items.ItemBlade; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.world.World; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class BaconMaker extends TileEntityBacon implements IInventory, ISidedInventory { ItemStack[] baconInventory = new ItemStack[4]; public int fuel = 0; public int progress = 0; public int workingTime = 0; public boolean update = false; @SideOnly(Side.CLIENT) public int getProgressBar(int i) { return progress * i / 300; } @SideOnly(Side.CLIENT) public int getFuel(int i) { return fuel * i / 1000; } public void updateBlock() { int var1 = this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord); this.worldObj.markBlockForRenderUpdate(this.xCoord, this.yCoord, this.zCoord); markBlockDirty(this.worldObj, this.xCoord, this.yCoord, this.zCoord); } public void markBlockDirty(World var0, int var1, int var2, int var3) { if (var0.blockExists(var1, var2, var3)) { var0.getChunkFromBlockCoords(var1, var3).setChunkModified(); } } public int getSizeInventory() { return this.baconInventory.length; } public ItemStack getStackInSlot(int par1) { return this.baconInventory[par1]; } public ItemStack decrStackSize(int par1, int par2) { if (this.baconInventory[par1] != null) { ItemStack itemstack; if (this.baconInventory[par1].stackSize <= par2) { itemstack = this.baconInventory[par1]; this.baconInventory[par1] = null; return itemstack; } else { itemstack = this.baconInventory[par1].splitStack(par2); if (this.baconInventory[par1].stackSize == 0) { this.baconInventory[par1] = null; } return itemstack; } } else { return null; } } public ItemStack getStackInSlotOnClosing(int par1) { if (this.baconInventory[par1] != null) { ItemStack itemstack = this.baconInventory[par1]; this.baconInventory[par1] = null; return itemstack; } else { return null; } } public void setInventorySlotContents(int par1, ItemStack par2ItemStack) { this.baconInventory[par1] = par2ItemStack; if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) { par2ItemStack.stackSize = this.getInventoryStackLimit(); } } public String getInvName() { return null; } public void readFromNBT(NBTTagCompound par1NBTTagCompound) { super.readFromNBT(par1NBTTagCompound); NBTTagList nbttaglist = par1NBTTagCompound.getTagList("Items"); fuel = par1NBTTagCompound.getInteger("fuels"); progress = par1NBTTagCompound.getInteger("progresss"); workingTime = par1NBTTagCompound.getInteger("workingTimes"); this.baconInventory = new ItemStack[this.getSizeInventory()]; for (int i = 0; i < nbttaglist.tagCount(); ++i) { NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttaglist.tagAt(i); byte b0 = nbttagcompound1.getByte("Slot"); if (b0 >= 0 && b0 < this.baconInventory.length) { this.baconInventory[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1); } } } public void writeToNBT(NBTTagCompound par1NBTTagCompound) { super.writeToNBT(par1NBTTagCompound); par1NBTTagCompound.setInteger("fuels", fuel); par1NBTTagCompound.setInteger("progresss", progress); par1NBTTagCompound.setInteger("workingTimes", workingTime); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i < this.baconInventory.length; ++i) { if (this.baconInventory[i] != null) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); nbttagcompound1.setByte("Slot", (byte)i); this.baconInventory[i].writeToNBT(nbttagcompound1); nbttaglist.appendTag(nbttagcompound1); } } par1NBTTagCompound.setTag("Items", nbttaglist); } public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return true; } @Override public void openChest() { } @Override public void closeChest() { } @Override public boolean isInvNameLocalized() { return false; } @Override public void updateEntity() { super.updateEntity(); if(fuel < 10 && canCook() && baconInventory[2] != null && baconInventory[2].getItem() instanceof ItemBlade) { addFuel(); update = true; } cook(); damage(); if(fuel > 0) { fuel--; } if(update) { update = false; this.onInventoryChanged(); updateBlock(); updateLight(); } } void updateLight() { this.worldObj.updateAllLightTypes(this.xCoord, this.yCoord, this.zCoord); } public void damage() { if(workingTime >= 600 && baconInventory[2] != null && baconInventory[2].getItem() instanceof ItemBlade) { workingTime = 0; ItemBlade ib = (ItemBlade) baconInventory[2].getItem(); ib.damageBlade(baconInventory[2]); if(baconInventory[2].getItemDamage() >= baconInventory[2].getMaxDamage()) { baconInventory[2] = null; } } } public void cook() { if(fuel > 0) { if(canCook()) { if(baconInventory[2] != null && baconInventory[2].getItem() instanceof ItemBlade) { ItemBlade ib = (ItemBlade) baconInventory[2].getItem(); progress++; workingTime++; if(progress >= 300) { progress = 0; ItemStack output = BaconMakerRecipes.getRecipes().getRecipeOuput(baconInventory[1]); if (this.baconInventory[3] == null) { this.baconInventory[3] = output.copy(); update = true; } else if (this.baconInventory[3].isItemEqual(output)) { baconInventory[3].stackSize += output.stackSize; update = true; } --this.baconInventory[1].stackSize; if (this.baconInventory[1].stackSize <= 0) { this.baconInventory[1] = null; update = true; } } } } else { progress = 0; } } } public boolean canCook() { if (this.baconInventory[1] == null) { return false; } else { ItemStack itemstack = BaconMakerRecipes.getRecipes().getRecipeOuput(baconInventory[1]); if (itemstack == null) return false; if (this.baconInventory[3] == null) return true; if (!this.baconInventory[3].isItemEqual(itemstack)) return false; int result = baconInventory[3].stackSize + itemstack.stackSize; return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize()); } } public void addFuel() { if(hasFuel(baconInventory[0])) { int fuelbetween = this.getFuel(baconInventory[0]); if(fuelbetween > 0) { fuel += fuelbetween; baconInventory[0].stackSize--; update = true; if(baconInventory[0].stackSize <= 0) { baconInventory[0] = baconInventory[0].getItem().getContainerItemStack(baconInventory[0]); update = true; } } } } public boolean hasFuel(ItemStack par1) { return getFuel(par1) > 0; } public int getFuel(ItemStack par1) { if(par1 != null) { int itemid = par1.getItem().itemID; if(itemid == Item.coal.itemID) { return 1600; } } return 0; } /** * Returns an array containing the indices of the slots that can be accessed by automation on the given side of this * block. */ public int[] getAccessibleSlotsFromSide(int par1) { if(par1 == 0) { return new int[]{0}; } else if(par1 == 1) { return new int[]{1}; } else { return new int[]{3}; } } /** * Returns true if automation can insert the given item in the given slot from the given side. Args: Slot, item, * side */ public boolean canInsertItem(int par1, ItemStack par2ItemStack, int par3) { return this.isItemValidForSlot(par1, par2ItemStack); } /** * Returns true if automation can extract the given item in the given slot from the given side. Args: Slot, item, * side */ public boolean canExtractItem(int par1, ItemStack par2ItemStack, int par3) { return par3 != 1 || par1 != 2 || par2ItemStack.itemID == Item.bucketEmpty.itemID; } @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { if(i == 0)return this.hasFuel(itemstack); else if(i == 3)return false; else if(i == 1)return true; else return false; } } The updateBlock function updates the function. The updateLight function updates the light^^. i hope it helps^^
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.