package blusunrize.immersiveengineering.common.blocks.metal; import blusunrize.immersiveengineering.api.IEEnums.SideConfig; import blusunrize.immersiveengineering.api.energy.immersiveflux.FluxStorage; import blusunrize.immersiveengineering.common.Config.IEConfig; import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IDirectionalTile; import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IHasDummyBlocks; import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; import blusunrize.immersiveengineering.common.util.EnergyHelper.IEForgeEnergyWrapper; import blusunrize.immersiveengineering.common.util.EnergyHelper.IIEInternalFluxHandler; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import javax.annotation.Nonnull; public class TileEntityBlastFurnacePreheater extends TileEntityIEBase implements IIEInternalFluxHandler, IDirectionalTile, IHasDummyBlocks { public boolean active; public int dummy = 0; public FluxStorage energyStorage = new FluxStorage(8000); public EnumFacing facing = EnumFacing.NORTH; public float angle = 0; public long lastRenderTick = -1; public int doSpeedup() { int consumed = IEConfig.Machines.preheater_consumption; if(this.energyStorage.extractEnergy(consumed, true)==consumed) { if (!active) { active = true; this.markContainingBlockForUpdate(null); } this.energyStorage.extractEnergy(consumed, false); return 1; } else if(active) { active = false; this.markContainingBlockForUpdate(null); } return 0; } @Override public boolean isDummy() { return dummy>0; } @Override public void placeDummies(BlockPos pos, IBlockState state, EnumFacing side, float hitX, float hitY, float hitZ) { for(int i=1; i<=2; i++) { worldObj.setBlockState(pos.add(0,i,0), state); ((TileEntityBlastFurnacePreheater)worldObj.getTileEntity(pos.add(0,i,0))).dummy = i; ((TileEntityBlastFurnacePreheater)worldObj.getTileEntity(pos.add(0,i,0))).facing = this.facing; } } @Override public void breakDummies(BlockPos pos, IBlockState state) { for(int i=0; i<=2; i++) if(worldObj.getTileEntity(getPos().add(0,-dummy,0).add(0,i,0)) instanceof TileEntityBlastFurnacePreheater) worldObj.setBlockToAir(getPos().add(0,-dummy,0).add(0,i,0)); } @Override public void readCustomNBT(NBTTagCompound nbt, boolean descPacket) { dummy = nbt.getInteger("dummy"); facing = EnumFacing.getFront(nbt.getInteger("facing")); energyStorage.readFromNBT(nbt); active = nbt.getBoolean("active"); if(descPacket) this.markContainingBlockForUpdate(null); } @Override public void writeCustomNBT(NBTTagCompound nbt, boolean descPacket) { nbt.setInteger("dummy", dummy); nbt.setInteger("facing", facing.ordinal()); nbt.setBoolean("active", active); energyStorage.writeToNBT(nbt); } @Nonnull @Override public FluxStorage getFluxStorage() { if(dummy>0) { TileEntity te = worldObj.getTileEntity(getPos().add(0,-dummy,0)); if(te instanceof TileEntityBlastFurnacePreheater) return ((TileEntityBlastFurnacePreheater)te).getFluxStorage(); } return energyStorage; } @Nonnull @Override public SideConfig getEnergySideConfig(EnumFacing facing) { return dummy==2&&facing==EnumFacing.UP?SideConfig.INPUT:SideConfig.NONE; } IEForgeEnergyWrapper wrapper = new IEForgeEnergyWrapper(this, EnumFacing.UP); @Override public IEForgeEnergyWrapper getCapabilityWrapper(EnumFacing facing) { if(dummy==2&&facing==EnumFacing.UP) return wrapper; return null; } @Override public EnumFacing getFacing() { return facing; } @Override public void setFacing(EnumFacing facing) { this.facing = facing; } @Override public int getFacingLimitation() { return 2; } @Override public boolean mirrorFacingOnPlacement(EntityLivingBase placer) { return false; } @Override public boolean canHammerRotate(EnumFacing side, float hitX, float hitY, float hitZ, EntityLivingBase entity) { return true; } @Override public boolean canRotate(EnumFacing axis) { return true; } @Override public void afterRotation(EnumFacing oldDir, EnumFacing newDir) { for(int i=0; i<=2; i++) { TileEntity te = worldObj.getTileEntity(getPos().add(0,-dummy+i,0)); if(te instanceof TileEntityBlastFurnacePreheater) { ((TileEntityBlastFurnacePreheater)te).setFacing(newDir); te.markDirty(); ((TileEntityBlastFurnacePreheater)te).markContainingBlockForUpdate(null); } } } }