generated from tilera/1710mod
103 lines
3.3 KiB
Java
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) };
|
|
}
|
|
}
|