Got tanks almost working

This commit is contained in:
Calclavia 2014-01-19 15:14:20 +08:00
parent ff0dbfe5ad
commit c90d509d5e
8 changed files with 180 additions and 312 deletions

View file

@ -4,10 +4,12 @@ import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
import universalelectricity.api.net.IConnector; import universalelectricity.api.net.IConnector;
/** Generic interface for any tile that acts as part of a fluid network. Generally network assume /**
* Generic interface for any tile that acts as part of a fluid network. Generally network assume
* that each part can only support one fluid tank internally * that each part can only support one fluid tank internally
* *
* @author DarkGuardsman */ * @author DarkGuardsman
*/
public interface IFluidConnector extends IConnector<IFluidNetwork>, IFluidHandler public interface IFluidConnector extends IConnector<IFluidNetwork>, IFluidHandler
{ {
/** FluidTank that the network will have access to fill or drain */ /** FluidTank that the network will have access to fill or drain */

View file

@ -91,14 +91,14 @@ public class TilePipe extends TileFluidNetwork implements IColorCoded, IFluidPip
} }
@Override @Override
public PipeNetwork getNetwork() public IFluidNetwork getNetwork()
{ {
if (this.network == null) if (this.network == null)
{ {
this.network = new PipeNetwork(); this.network = new PipeNetwork();
this.network.addConnector(this); this.network.addConnector(this);
} }
return (PipeNetwork) this.network; return this.network;
} }
@Override @Override

View file

@ -1,18 +0,0 @@
package resonantinduction.mechanical.fluid.prefab;
import java.util.Random;
import resonantinduction.core.tilenetwork.prefab.NetworkTileEntities;
import calclavia.lib.prefab.tile.TileAdvanced;
public abstract class TileEntityFluidDevice extends TileAdvanced
{
public Random random = new Random();
@Override
public void invalidate()
{
super.invalidate();
NetworkTileEntities.invalidate(this);
}
}

View file

@ -1,116 +0,0 @@
package resonantinduction.mechanical.fluid.prefab;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
import calclavia.lib.render.ColorCode.IColorCoded;
import calclavia.lib.utility.FluidUtility;
public abstract class TileEntityFluidStorage extends TileEntityFluidDevice implements IFluidHandler, IColorCoded
{
public FluidTank fluidTank;
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
{
if (resource == null || resource.getFluid() == null)
{
return 0;
}
else if (this.getTank().getFluid() != null && !resource.isFluidEqual(this.getTank().getFluid()))
{
return 0;
}
return this.getTank().fill(resource, doFill);
}
@Override
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
{
if (this.getTank().getFluid() == null)
{
return null;
}
FluidStack stack = this.getTank().getFluid();
if (maxDrain < stack.amount)
{
stack = FluidUtility.getStack(stack, maxDrain);
}
return this.getTank().drain(maxDrain, doDrain);
}
@Override
public FluidTankInfo[] getTankInfo(ForgeDirection from)
{
if (this.getTank() != null)
{
return new FluidTankInfo[] { new FluidTankInfo(this.getTank()) };
}
return new FluidTankInfo[1];
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
if (nbt.hasKey("stored"))
{
NBTTagCompound tag = nbt.getCompoundTag("stored");
String name = tag.getString("LiquidName");
int amount = nbt.getInteger("Amount");
Fluid fluid = FluidRegistry.getFluid(name);
if (fluid != null)
{
FluidStack liquid = new FluidStack(fluid, amount);
getTank().setFluid(liquid);
}
}
else
{
// System.out.println("Loading fluid tank");
getTank().readFromNBT(nbt.getCompoundTag("FluidTank"));
// System.out.println("Tank: "+ (getTank().getFluid() != null ?
// getTank().getFluid().fluidID +"@"+getTank().getFluid().amount+"mb" : "Empty"));
}
}
@Override
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
if (this.getTank() != null)
{
// System.out.println("Saving fluid tank");
// System.out.println("Tank: "+ (getTank().getFluid() != null ?
// getTank().getFluid().fluidID +"@"+getTank().getFluid().amount+"mb" : "Empty"));
nbt.setCompoundTag("FluidTank", this.getTank().writeToNBT(new NBTTagCompound()));
}
}
/** Is the internal tank full */
public boolean isFull()
{
return this.getTank().getFluidAmount() >= this.getTank().getCapacity();
}
public FluidTank getTank()
{
if (this.fluidTank == null)
{
this.fluidTank = new FluidTank(this.getTankSize());
}
return this.fluidTank;
}
/** gets the max storage limit of the tank */
public abstract int getTankSize();
}

View file

@ -13,14 +13,14 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.FluidTankInfo;
import resonantinduction.api.IReadOut; import resonantinduction.api.IReadOut;
import resonantinduction.api.fluid.IFluidNetwork;
import resonantinduction.api.fluid.IFluidConnector; import resonantinduction.api.fluid.IFluidConnector;
import resonantinduction.api.fluid.IFluidNetwork;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
import resonantinduction.mechanical.Mechanical; import resonantinduction.mechanical.Mechanical;
import resonantinduction.mechanical.fluid.network.FluidNetwork;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
import calclavia.lib.network.IPacketReceiverWithID; import calclavia.lib.network.IPacketReceiverWithID;
import calclavia.lib.network.PacketHandler; import calclavia.lib.network.PacketHandler;
import calclavia.lib.prefab.tile.TileAdvanced;
import calclavia.lib.utility.FluidUtility; import calclavia.lib.utility.FluidUtility;
import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteArrayDataInput;
@ -34,9 +34,8 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author DarkCow * @author DarkCow
* *
*/ */
public abstract class TileFluidNetwork<N extends FluidNetwork> extends TileEntityFluidDevice implements IFluidConnector, IPacketReceiverWithID, IReadOut public abstract class TileFluidNetwork extends TileAdvanced implements IFluidConnector, IPacketReceiverWithID, IReadOut
{ {
public static int refreshRate = 10;
protected FluidTank tank = new FluidTank(1 * FluidContainerRegistry.BUCKET_VOLUME); protected FluidTank tank = new FluidTank(1 * FluidContainerRegistry.BUCKET_VOLUME);
protected Object[] connectedBlocks = new Object[6]; protected Object[] connectedBlocks = new Object[6];
protected int colorID = 0; protected int colorID = 0;
@ -45,7 +44,7 @@ public abstract class TileFluidNetwork<N extends FluidNetwork> extends TileEntit
protected FluidStack prevStack = null; protected FluidStack prevStack = null;
/** Network used to link all parts together */ /** Network used to link all parts together */
protected N network; protected IFluidNetwork network;
public static final int PACKET_DESCRIPTION = Mechanical.contentRegistry.getNextPacketID(); public static final int PACKET_DESCRIPTION = Mechanical.contentRegistry.getNextPacketID();
public static final int PACKET_RENDER = Mechanical.contentRegistry.getNextPacketID(); public static final int PACKET_RENDER = Mechanical.contentRegistry.getNextPacketID();
@ -61,7 +60,8 @@ public abstract class TileFluidNetwork<N extends FluidNetwork> extends TileEntit
public void initiate() public void initiate()
{ {
super.initiate(); super.initiate();
this.refresh(); refresh();
getNetwork().reconstruct();
} }
@Override @Override
@ -71,7 +71,7 @@ public abstract class TileFluidNetwork<N extends FluidNetwork> extends TileEntit
if (!worldObj.isRemote) if (!worldObj.isRemote)
{ {
if (this.updateFluidRender && ticks % TileFluidNetwork.refreshRate == 0) if (this.updateFluidRender)
{ {
if (!FluidUtility.matchExact(prevStack, this.getInternalTank().getFluid())) if (!FluidUtility.matchExact(prevStack, this.getInternalTank().getFluid()))
{ {

View file

@ -15,13 +15,13 @@ import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
import resonantinduction.api.fluid.IDrain; import resonantinduction.api.fluid.IDrain;
import resonantinduction.mechanical.fluid.prefab.TileEntityFluidDevice;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
import calclavia.lib.prefab.tile.TileAdvanced;
import calclavia.lib.utility.FluidUtility; import calclavia.lib.utility.FluidUtility;
import com.builtbroken.common.Pair; import com.builtbroken.common.Pair;
public class TileGrate extends TileEntityFluidDevice implements IFluidHandler, IDrain public class TileGrate extends TileAdvanced implements IFluidHandler, IDrain
{ {
/* MAX BLOCKS DRAINED PER 1/2 SECOND */ /* MAX BLOCKS DRAINED PER 1/2 SECOND */
public static int MAX_WORLD_EDITS_PER_PROCESS = 50; public static int MAX_WORLD_EDITS_PER_PROCESS = 50;

View file

@ -3,8 +3,8 @@ package resonantinduction.mechanical.fluid.tank;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidContainerRegistry;
import resonantinduction.api.fluid.IFluidNetwork;
import resonantinduction.api.fluid.IFluidConnector; import resonantinduction.api.fluid.IFluidConnector;
import resonantinduction.api.fluid.IFluidNetwork;
import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork; import resonantinduction.mechanical.fluid.prefab.TileFluidNetwork;
public class TileTank extends TileFluidNetwork public class TileTank extends TileFluidNetwork
@ -17,14 +17,14 @@ public class TileTank extends TileFluidNetwork
} }
@Override @Override
public TankNetwork getNetwork() public IFluidNetwork getNetwork()
{ {
if (this.network == null) if (this.network == null)
{ {
this.network = new TankNetwork(); this.network = new TankNetwork();
this.network.addConnector(this); this.network.addConnector(this);
} }
return (TankNetwork) this.network; return this.network;
} }
@Override @Override

View file

@ -9,10 +9,10 @@ import net.minecraftforge.fluids.IFluidHandler;
import resonantinduction.api.IReadOut; import resonantinduction.api.IReadOut;
import resonantinduction.api.fluid.IFluidPipe; import resonantinduction.api.fluid.IFluidPipe;
import resonantinduction.core.tilenetwork.ITileConnector; import resonantinduction.core.tilenetwork.ITileConnector;
import resonantinduction.mechanical.fluid.prefab.TileEntityFluidDevice; import resonantinduction.mechanical.fluid.pipe.TilePipe;
import calclavia.lib.utility.WorldUtility; import calclavia.lib.utility.WorldUtility;
public class TileReleaseValve extends TileEntityFluidDevice implements ITileConnector, IReadOut public class TileReleaseValve extends TilePipe implements ITileConnector, IReadOut
{ {
public TileEntity[] connected = new TileEntity[6]; public TileEntity[] connected = new TileEntity[6];