package minefantasy.mf2.block.tileentity; import java.util.List; import java.util.Random; import minefantasy.mf2.MineFantasyII; import minefantasy.mf2.api.refine.BlastFurnaceRecipes; import minefantasy.mf2.api.refine.ISmokeCarrier; import minefantasy.mf2.api.refine.SmokeMechanics; import minefantasy.mf2.block.list.BlockListMF; import minefantasy.mf2.block.refining.BlockChimney; import minefantasy.mf2.block.refining.BlockChimney; import minefantasy.mf2.block.refining.BlockForge; import minefantasy.mf2.block.tileentity.blastfurnace.TileEntityBlastFH; import minefantasy.mf2.item.list.ComponentListMF; import minefantasy.mf2.network.packet.ChimneyPacket; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.WorldServer; import net.minecraftforge.oredict.OreDictionary; public class TileEntityChimney extends TileEntity implements ISmokeCarrier { public Block maskBlock = Blocks.air; public int maskMeta = 0; private int isIndirect = -1; protected int smokeStorage; public int ticksExisted; public int ticksExistedTemp; private Random rand = new Random(); @Override public void updateEntity() { super.updateEntity(); ++ticksExisted; ++ticksExistedTemp; /*TODO Custom Tex if(ticksExistedTemp == 20) { MineFantasyII.debugMsg("Chimney Loaded R = " + worldObj.isRemote); sync(); } */ if(smokeStorage > 0) { SmokeMechanics.emitSmokeFromCarrier(worldObj, xCoord, yCoord, zCoord, this, 5); } if(!worldObj.isRemote && smokeStorage > getMaxSmokeStorage() && rand.nextInt(500) == 0) { worldObj.newExplosion(null, xCoord+0.5D, yCoord+0.5D, zCoord+0.5D, 2F, false, true); } } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setInteger("ticksExisted", ticksExisted); nbt.setInteger("StoredSmoke", smokeStorage); NBTTagList savedItems = new NBTTagList(); nbt.setInteger("BlockID", Block.getIdFromBlock(maskBlock)); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); ticksExisted = nbt.getInteger("ticksExisted"); smokeStorage = nbt.getInteger("StoredSmoke"); setBlock(nbt.getInteger("BlockID")); } public void setBlock(int id) { setBlock(id, 0); } public void setBlock(int id, int subId) { /*TODO Custom Tex maskMeta = subId; Block newblock = Block.getBlockById(id); if(newblock != null) { maskBlock = newblock; } if(worldObj != null && worldObj.isRemote) { worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord); } */ } @Override public int getSmokeValue() { return smokeStorage; } @Override public void setSmokeValue(int smoke) { smokeStorage = smoke; } @Override public int getMaxSmokeStorage() { if(this.blockType != null && blockType instanceof BlockChimney) { return ((BlockChimney)blockType).size; } return 5; } public void sync() { /*TODO Custom Tex MineFantasyII.debugMsg("Block For Chimney = " + maskBlock.getUnlocalizedName() + " R = " + worldObj.isRemote); if(!worldObj.isRemote) { MineFantasyII.debugMsg("Syncing Chimney " + xCoord + ", " + yCoord + ", " + zCoord); List<EntityPlayer> players = ((WorldServer)worldObj).playerEntities; for(int i = 0; i < players.size(); i++) { EntityPlayer player = players.get(i); ((WorldServer)worldObj).getEntityTracker().func_151248_b(player, new ChimneyPacket(this).generatePacket()); } } MineFantasyII.debugMsg("Syncing Render " + xCoord + ", " + yCoord + ", " + zCoord); worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord); */ } public BlockChimney getActiveBlock() { if(worldObj == null)return null; Block block = worldObj.getBlock(xCoord, yCoord, zCoord); if(block != null && block instanceof BlockChimney) { return (BlockChimney)block; } return null; } public boolean isIndirect() { BlockChimney block = getActiveBlock(); return block != null && block.isIndirect; } @Override public boolean canAbsorbIndirect() { if(isIndirect == -1) { isIndirect = isIndirect() ? 1 : 0; } return isIndirect == 1; } }