Hbm-s-Nuclear-Tech-GIT/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java
70000hp 5de273b5ba five million billion impls
hopefully all fluid impls done outside of the rbmk stuff
Also implemented copy pasting of molten metals, copying from anything that holds molten metal, and pasting into outlets for filters
2024-08-24 14:19:54 -04:00

130 lines
3.1 KiB
Java

package com.hbm.tileentity.machine;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.tileentity.IFluidCopiable;
import com.hbm.tileentity.TileEntityMachineBase;
import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.fluid.IFluidStandardTransceiver;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IFluidCopiable {
public long power = 0;
public FluidTank[] tanks;
public TileEntityDeuteriumExtractor() {
super(0);
tanks = new FluidTank[2];
tanks[0] = new FluidTank(Fluids.WATER, 1000);
tanks[1] = new FluidTank(Fluids.HEAVYWATER, 100);
}
@Override
public String getName() {
return "container.deuterium";
}
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
this.updateConnections();
if(hasPower() && hasEnoughWater() && tanks[1].getMaxFill() > tanks[1].getFill()) {
int convert = Math.min(tanks[1].getMaxFill(), tanks[0].getFill()) / 50;
convert = Math.min(convert, tanks[1].getMaxFill() - tanks[1].getFill());
tanks[0].setFill(tanks[0].getFill() - convert * 50); //dividing first, then multiplying, will remove any rounding issues
tanks[1].setFill(tanks[1].getFill() + convert);
power -= this.getMaxPower() / 20;
}
this.subscribeToAllAround(tanks[0].getTankType(), this);
this.sendFluidToAll(tanks[1], this);
NBTTagCompound data = new NBTTagCompound();
data.setLong("power", power);
tanks[0].writeToNBT(data, "water");
tanks[1].writeToNBT(data, "heavyWater");
this.networkPack(data, 50);
}
}
protected void updateConnections() {
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir);
}
public void networkUnpack(NBTTagCompound data) {
super.networkUnpack(data);
this.power = data.getLong("power");
tanks[0].readFromNBT(data, "water");
tanks[1].readFromNBT(data, "heavyWater");
}
public boolean hasPower() {
return power >= this.getMaxPower() / 20;
}
public boolean hasEnoughWater() {
return tanks[0].getFill() >= 100;
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.power = nbt.getLong("power");
tanks[0].readFromNBT(nbt, "water");
tanks[1].readFromNBT(nbt, "heavyWater");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setLong("power", power);
tanks[0].writeToNBT(nbt, "water");
tanks[1].writeToNBT(nbt, "heavyWater");
}
@Override
public void setPower(long i) {
power = i;
}
@Override
public long getPower() {
return power;
}
@Override
public long getMaxPower() {
return 10_000;
}
@Override
public FluidTank[] getSendingTanks() {
return new FluidTank[] { tanks[1] };
}
@Override
public FluidTank[] getReceivingTanks() {
return new FluidTank[] { tanks[0] };
}
@Override
public FluidTank[] getAllTanks() {
return tanks;
}
@Override
public FluidTank getTankToPaste() {
return null;
}
}