package mekanism.common.tile; import mekanism.common.base.FluidHandlerWrapper; import mekanism.common.base.IFluidHandlerWrapper; import mekanism.common.content.tank.DynamicFluidTank; import mekanism.common.util.LangUtils; import mekanism.common.util.PipeUtils; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; public class TileEntityDynamicValve extends TileEntityDynamicTank implements IFluidHandlerWrapper { public DynamicFluidTank fluidTank; public TileEntityDynamicValve() { super("Dynamic Valve"); fluidTank = new DynamicFluidTank(this); } @Override public FluidTankInfo[] getTankInfo(EnumFacing from) { return ((!worldObj.isRemote && structure != null) || (worldObj.isRemote && clientHasStructure)) ? new FluidTankInfo[] {fluidTank.getInfo()} : PipeUtils.EMPTY; } @Override public int fill(EnumFacing from, FluidStack resource, boolean doFill) { return fluidTank.fill(resource, doFill); } @Override public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain) { if(structure != null && structure.fluidStored != null) { if(resource.getFluid() == structure.fluidStored.getFluid()) { return fluidTank.drain(resource.amount, doDrain); } } return null; } @Override public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain) { if(structure != null) { return fluidTank.drain(maxDrain, doDrain); } return null; } @Override public boolean canFill(EnumFacing from, Fluid fluid) { return ((!worldObj.isRemote && structure != null) || (worldObj.isRemote && clientHasStructure)); } @Override public boolean canDrain(EnumFacing from, Fluid fluid) { return ((!worldObj.isRemote && structure != null) || (worldObj.isRemote && clientHasStructure)); } @Override public String getName() { return LangUtils.localize("gui.dynamicTank"); } @Override public boolean hasCapability(Capability<?> capability, EnumFacing side) { if((!worldObj.isRemote && structure != null) || (worldObj.isRemote && clientHasStructure)) { if(capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { return true; } } return super.hasCapability(capability, side); } @Override public <T> T getCapability(Capability<T> capability, EnumFacing side) { if((!worldObj.isRemote && structure != null) || (worldObj.isRemote && clientHasStructure)) { if(capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { return (T)new FluidHandlerWrapper(this, side); } } return super.getCapability(capability, side); } }