package ellpeck.actuallyadditions.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import ellpeck.actuallyadditions.blocks.InitBlocks; import ellpeck.actuallyadditions.blocks.metalists.TheMiscBlocks; import ellpeck.actuallyadditions.config.values.ConfigIntValues; import ellpeck.actuallyadditions.util.WorldUtil; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityLavaFactoryController extends TileEntityBase implements IEnergyReceiver{ public EnergyStorage storage = new EnergyStorage(3000000); public static int energyNeededToProduceLava = ConfigIntValues.LAVA_FACTORY_ENERGY_USED.getValue(); private final int maxWorkTime = ConfigIntValues.LAVA_FACTORY_TIME.getValue(); private int currentWorkTime; //The Positions the Case Blocks should be in for the Factory to work private static final int[][] CASE_POSITIONS = {{-1, 1, 0}, {1, 1, 0}, {0, 1, -1}, {0, 1, 1}}; @Override @SuppressWarnings("unchecked") public void updateEntity(){ if(!worldObj.isRemote){ if(this.storage.getEnergyStored() >= energyNeededToProduceLava && this.isMultiblock() == HAS_AIR){ this.currentWorkTime++; if(this.currentWorkTime >= this.maxWorkTime){ this.currentWorkTime = 0; worldObj.setBlock(xCoord, yCoord+1, zCoord, Blocks.lava); this.storage.extractEnergy(energyNeededToProduceLava, false); } } else this.currentWorkTime = 0; } } public int isMultiblock(){ if(WorldUtil.hasBlocksInPlacesGiven(CASE_POSITIONS, InitBlocks.blockMisc, TheMiscBlocks.LAVA_FACTORY_CASE.ordinal(), worldObj, xCoord, yCoord, zCoord)){ if(worldObj.getBlock(xCoord, yCoord+1, zCoord) == Blocks.lava || worldObj.getBlock(xCoord, yCoord+1, zCoord) == Blocks.flowing_lava){ return HAS_LAVA; } if(worldObj.getBlock(xCoord, yCoord+1, zCoord) == null || worldObj.isAirBlock(xCoord, yCoord+1, zCoord)){ return HAS_AIR; } } return NOT_MULTI; } public static final int NOT_MULTI = 0; public static final int HAS_LAVA = 1; public static final int HAS_AIR = 2; @Override public void writeToNBT(NBTTagCompound compound){ this.storage.writeToNBT(compound); compound.setInteger("WorkTime", this.currentWorkTime); super.writeToNBT(compound); } @Override public void readFromNBT(NBTTagCompound compound){ this.storage.readFromNBT(compound); this.currentWorkTime = compound.getInteger("WorkTime"); super.readFromNBT(compound); } @Override public int receiveEnergy(ForgeDirection from, int maxExtract, boolean simulate){ return from != ForgeDirection.UP ? this.storage.receiveEnergy(maxExtract, simulate) : 0; } @Override public int getEnergyStored(ForgeDirection from){ return from != ForgeDirection.UP ? this.storage.getEnergyStored() : 0; } @Override public int getMaxEnergyStored(ForgeDirection from){ return from != ForgeDirection.UP ? this.storage.getMaxEnergyStored() : 0; } @Override public boolean canConnectEnergy(ForgeDirection from){ return from != ForgeDirection.UP; } }