mirror of
https://github.com/GTNewHorizons/TinkersConstruct.git
synced 2026-11-13 17:04:24 +00:00
181 lines
4.7 KiB
Java
181 lines
4.7 KiB
Java
package tconstruct.blocks.logic;
|
|
|
|
import mantle.blocks.abstracts.MultiServantLogic;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.network.NetworkManager;
|
|
import net.minecraft.network.Packet;
|
|
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
|
|
import net.minecraftforge.common.util.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;
|
|
|
|
public class LavaTankLogic extends MultiServantLogic implements IFluidHandler
|
|
{
|
|
public FluidTank tank;
|
|
public int renderOffset;
|
|
|
|
public LavaTankLogic()
|
|
{
|
|
tank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME * 4);
|
|
}
|
|
|
|
@Override
|
|
public int fill (ForgeDirection from, FluidStack resource, boolean doFill)
|
|
{
|
|
int amount = tank.fill(resource, doFill);
|
|
if (amount > 0 && doFill)
|
|
{
|
|
renderOffset = resource.amount;
|
|
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
|
|
}
|
|
|
|
return amount;
|
|
}
|
|
|
|
@Override
|
|
public FluidStack drain (ForgeDirection from, int maxDrain, boolean doDrain)
|
|
{
|
|
FluidStack amount = tank.drain(maxDrain, doDrain);
|
|
if (amount != null && doDrain)
|
|
{
|
|
renderOffset = -maxDrain;
|
|
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
|
|
}
|
|
return amount;
|
|
}
|
|
|
|
@Override
|
|
public FluidStack drain (ForgeDirection from, FluidStack resource, boolean doDrain)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public boolean canFill (ForgeDirection from, Fluid fluid)
|
|
{
|
|
//return tank.fill(fluid, false) > 0;
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean canDrain (ForgeDirection from, Fluid fluid)
|
|
{
|
|
// TODO Auto-generated method stub
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public FluidTankInfo[] getTankInfo (ForgeDirection from)
|
|
{
|
|
FluidStack fluid = null;
|
|
if (tank.getFluid() != null)
|
|
fluid = tank.getFluid().copy();
|
|
return new FluidTankInfo[] { new FluidTankInfo(fluid, tank.getCapacity()) };
|
|
}
|
|
|
|
/*@Override
|
|
public IFluidTank[] getTanks (ForgeDirection direction)
|
|
{
|
|
return new IFluidTank[] { tank };
|
|
}
|
|
|
|
@Override
|
|
public IFluidTank getTank (ForgeDirection direction, FluidStack type)
|
|
{
|
|
return tank;
|
|
}*/
|
|
|
|
public float getFluidAmountScaled ()
|
|
{
|
|
return (float) (tank.getFluid().amount - renderOffset) / (float) (tank.getCapacity() * 1.01F);
|
|
}
|
|
|
|
public boolean containsFluid ()
|
|
{
|
|
return tank.getFluid() != null;
|
|
}
|
|
|
|
public int getBrightness ()
|
|
{
|
|
if (containsFluid())
|
|
{
|
|
int id = tank.getFluid().fluidID;
|
|
if (id < 4096)
|
|
{
|
|
Block block = Block.getBlockById(id);
|
|
return block.getLightValue();
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public void readFromNBT (NBTTagCompound tags)
|
|
{
|
|
super.readFromNBT(tags);
|
|
readCustomNBT(tags);
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT (NBTTagCompound tags)
|
|
{
|
|
super.writeToNBT(tags);
|
|
writeCustomNBT(tags);
|
|
}
|
|
|
|
public void readCustomNBT (NBTTagCompound tags)
|
|
{
|
|
if (tags.getBoolean("hasFluid"))
|
|
tank.setFluid(new FluidStack(tags.getInteger("itemID"), tags.getInteger("amount")));
|
|
else
|
|
tank.setFluid(null);
|
|
}
|
|
|
|
public void writeCustomNBT (NBTTagCompound tags)
|
|
{
|
|
FluidStack liquid = tank.getFluid();
|
|
tags.setBoolean("hasFluid", liquid != null);
|
|
if (liquid != null)
|
|
{
|
|
tags.setInteger("itemID", liquid.fluidID);
|
|
tags.setInteger("amount", liquid.amount);
|
|
}
|
|
}
|
|
|
|
/* Packets */
|
|
@Override
|
|
public Packet getDescriptionPacket ()
|
|
{
|
|
NBTTagCompound tag = new NBTTagCompound();
|
|
writeCustomNBT(tag);
|
|
return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, tag);
|
|
}
|
|
|
|
@Override
|
|
public void onDataPacket (NetworkManager net, S35PacketUpdateTileEntity packet)
|
|
{
|
|
readCustomNBT(packet.func_148857_g());
|
|
worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord);
|
|
}
|
|
|
|
/* Updating */
|
|
public boolean canUpdate ()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void updateEntity ()
|
|
{
|
|
if (renderOffset > 0)
|
|
{
|
|
renderOffset -= 6;
|
|
worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord);
|
|
}
|
|
}
|
|
} |