| package universalelectricity.prefab.tile; |
| |
| import java.util.EnumSet; |
| |
| import net.minecraft.nbt.NBTTagCompound; |
| import net.minecraftforge.common.ForgeDirection; |
| import universalelectricity.core.UniversalElectricity; |
| import universalelectricity.core.block.IElectricityStorage; |
| import universalelectricity.core.electricity.ElectricityNetworkHelper; |
| import universalelectricity.core.electricity.ElectricityPack; |
| |
| public abstract class TileEntityElectricityStorage extends TileEntityElectrical implements IElectricityStorage |
| { |
| /** |
| * The amount of joules stored within this machine. Use get and set functions instead of |
| * referencing to this variable. |
| */ |
| private double joules = 0; |
| |
| public double prevJoules = 0; |
| |
| @Override |
| public void updateEntity() |
| { |
| super.updateEntity(); |
| |
| this.prevJoules = joules; |
| |
| if (!this.worldObj.isRemote) |
| { |
| if (!this.isDisabled()) |
| { |
| ElectricityPack electricityPack = ElectricityNetworkHelper.consumeFromMultipleSides(this, this.getConsumingSides(), this.getRequest()); |
| this.onReceive(electricityPack); |
| } |
| else |
| { |
| ElectricityNetworkHelper.consumeFromMultipleSides(this, new ElectricityPack()); |
| } |
| } |
| |
| } |
| |
| protected EnumSet<ForgeDirection> getConsumingSides() |
| { |
| return ElectricityNetworkHelper.getDirections(this); |
| } |
| |
| /** |
| * Returns the amount of energy being requested this tick. Return an empty ElectricityPack if no |
| * electricity is desired. |
| */ |
| public ElectricityPack getRequest() |
| { |
| return new ElectricityPack((this.getMaxJoules() - this.getJoules()) / this.getVoltage(), this.getVoltage()); |
| } |
| |
| /** |
| * Called right after electricity is transmitted to the TileEntity. Override this if you wish to |
| * have another effect for a voltage overcharge. |
| * |
| * @param electricityPack |
| */ |
| public void onReceive(ElectricityPack electricityPack) |
| { |
| /** |
| * Creates an explosion if the voltage is too high. |
| */ |
| if (UniversalElectricity.isVoltageSensitive) |
| { |
| if (electricityPack.voltage > this.getVoltage()) |
| { |
| this.worldObj.createExplosion(null, this.xCoord, this.yCoord, this.zCoord, 1.5f, true); |
| return; |
| } |
| } |
| |
| this.setJoules(this.getJoules() + electricityPack.getWatts()); |
| } |
| |
| @Override |
| public void readFromNBT(NBTTagCompound par1NBTTagCompound) |
| { |
| super.readFromNBT(par1NBTTagCompound); |
| this.joules = par1NBTTagCompound.getDouble("joules"); |
| } |
| |
| /** |
| * Writes a tile entity to NBT. |
| */ |
| @Override |
| public void writeToNBT(NBTTagCompound par1NBTTagCompound) |
| { |
| super.writeToNBT(par1NBTTagCompound); |
| |
| par1NBTTagCompound.setDouble("joules", this.joules); |
| } |
| |
| @Override |
| public double getJoules() |
| { |
| return this.joules; |
| } |
| |
| @Override |
| public void setJoules(double joules) |
| { |
| this.joules = Math.max(Math.min(joules, this.getMaxJoules()), 0); |
| } |
| } |