150 lines
4.0 KiB
Java
150 lines
4.0 KiB
Java
package resonantinduction.atomic.process.turbine;
|
|
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.client.renderer.texture.IconRegister;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.util.Icon;
|
|
import net.minecraftforge.common.ForgeDirection;
|
|
import net.minecraftforge.fluids.Fluid;
|
|
import net.minecraftforge.fluids.FluidContainerRegistry;
|
|
import net.minecraftforge.fluids.FluidStack;
|
|
import net.minecraftforge.fluids.FluidTank;
|
|
import net.minecraftforge.fluids.FluidTankInfo;
|
|
import net.minecraftforge.fluids.IFluidHandler;
|
|
import resonant.api.IBoilHandler;
|
|
import resonant.lib.content.module.TileBase;
|
|
import resonant.lib.content.module.TileRender;
|
|
import resonant.lib.utility.ConnectedTextureRenderer;
|
|
import resonantinduction.core.Reference;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
/** Funnel for gas. */
|
|
public class TileFunnel extends TileBase implements IBoilHandler
|
|
{
|
|
private static Icon iconTop;
|
|
private final FluidTank tank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 16);
|
|
|
|
public TileFunnel()
|
|
{
|
|
super(Material.iron);
|
|
|
|
}
|
|
|
|
@Override
|
|
public Icon getIcon(int side, int meta)
|
|
{
|
|
return side == 1 || side == 0 ? iconTop : super.getIcon(side, meta);
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
@Override
|
|
public void registerIcons(IconRegister iconRegister)
|
|
{
|
|
super.registerIcons(iconRegister);
|
|
iconTop = iconRegister.registerIcon(domain + name + "_top");
|
|
}
|
|
|
|
@Override
|
|
public void updateEntity()
|
|
{
|
|
super.updateEntity();
|
|
|
|
if (tank.getFluidAmount() > 0)
|
|
{
|
|
TileEntity tileEntity = this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord);
|
|
|
|
if (tileEntity instanceof IFluidHandler)
|
|
{
|
|
IFluidHandler handler = (IFluidHandler) tileEntity;
|
|
|
|
if (handler.canFill(ForgeDirection.DOWN, tank.getFluid().getFluid()))
|
|
{
|
|
FluidStack drainedStack = tank.drain(tank.getCapacity(), false);
|
|
|
|
if (drainedStack != null)
|
|
{
|
|
tank.drain(handler.fill(ForgeDirection.DOWN, drainedStack, true), true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void readFromNBT(NBTTagCompound tag)
|
|
{
|
|
super.readFromNBT(tag);
|
|
tank.writeToNBT(tag);
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT(NBTTagCompound tag)
|
|
{
|
|
super.writeToNBT(tag);
|
|
tank.readFromNBT(tag);
|
|
}
|
|
|
|
/** Tank Methods */
|
|
|
|
/* IFluidHandler */
|
|
@Override
|
|
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
|
|
{
|
|
return tank.fill(resource, doFill);
|
|
}
|
|
|
|
@Override
|
|
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
|
|
{
|
|
return this.tank.drain(maxDrain, doDrain);
|
|
}
|
|
|
|
@Override
|
|
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
|
|
{
|
|
if (resource == null || !resource.isFluidEqual(tank.getFluid()))
|
|
{
|
|
return null;
|
|
}
|
|
return tank.drain(resource.amount, doDrain);
|
|
}
|
|
|
|
@Override
|
|
public boolean canFill(ForgeDirection from, Fluid fluid)
|
|
{
|
|
if (fluid.isGaseous() && from == ForgeDirection.DOWN)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean canDrain(ForgeDirection from, Fluid fluid)
|
|
{
|
|
if (fluid.isGaseous() && from == ForgeDirection.UP)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public FluidTankInfo[] getTankInfo(ForgeDirection from)
|
|
{
|
|
return new FluidTankInfo[]
|
|
{ tank.getInfo() };
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
@Override
|
|
protected TileRender newRenderer()
|
|
{
|
|
return new ConnectedTextureRenderer(this, Reference.PREFIX + "funnel_edge");
|
|
}
|
|
}
|