atomicscience/src/main/java/atomicscience/jiqi/TFunnel.java
2022-10-21 19:53:56 +02:00

103 lines
3.3 KiB
Java

package atomicscience.jiqi;
import atomicscience.AtomicScience;
import atomicscience.api.ISteamReceptor;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
import universalelectricity.core.block.IConductor;
import universalelectricity.prefab.tile.TileEntityAdvanced;
public class TFunnel
extends TileEntityAdvanced implements ISteamReceptor, IFluidHandler {
public IConductor connectedWire = null;
public final FluidTank gasTank;
public TFunnel() {
this.gasTank = new FluidTank(AtomicScience.FLUID_STEAM, 0, 20000);
// TODO: WTF
// this.gasTank.setTankPressure(10);
}
@Override
public void updateEntity() {
super.updateEntity();
if (super.ticks % 20L == 0L) {
TileEntity tileEntity = this.worldObj.getTileEntity(
this.xCoord, this.yCoord + 1, this.zCoord);
if (tileEntity != null && tileEntity instanceof ISteamReceptor) {
FluidStack drainStack = this.gasTank.drain(AtomicScience.STEAM_RATIO, true);
if (drainStack != null) {
int nengLiang = drainStack.amount;
((ISteamReceptor) tileEntity)
.onReceiveSteam(nengLiang - nengLiang / 4);
}
}
}
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
NBTTagCompound gasCompound = nbt.getCompoundTag("gas");
this.gasTank.setFluid(FluidStack.loadFluidStackFromNBT(gasCompound));
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
if (this.gasTank.getFluid() != null) {
NBTTagCompound compound = new NBTTagCompound();
this.gasTank.getFluid().writeToNBT(compound);
nbt.setTag("gas", compound);
}
}
@Override
public void onReceiveSteam(int amount) {
this.gasTank.fill(new FluidStack(AtomicScience.FLUID_STEAM,
amount * AtomicScience.STEAM_RATIO),
true);
}
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
return 0;
}
@Override
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) {
return this.gasTank.drain(maxDrain, doDrain);
}
@Override
public boolean canDrain(ForgeDirection arg0, Fluid arg1) {
return arg1 == AtomicScience.FLUID_STEAM &&
this.gasTank.getFluidAmount() > 0;
}
@Override
public boolean canFill(ForgeDirection arg0, Fluid arg1) {
return false;
}
@Override
public FluidStack drain(ForgeDirection arg0, FluidStack arg1, boolean arg2) {
return arg1.getFluid() == AtomicScience.FLUID_STEAM
? this.gasTank.drain(arg1.amount, arg2)
: null;
}
@Override
public FluidTankInfo[] getTankInfo(ForgeDirection arg0) {
return new FluidTankInfo[] { new FluidTankInfo(this.gasTank) };
}
}