reformating and removal of un usable methods

As nice as UE's network is it turns out i can use it that way due to
Forge Liquid Api. So i have to setup a network system that will just
track all TileEntities and add liquid or apply pressure as needed.
This commit is contained in:
Rseifert 2013-02-25 13:03:43 -05:00
parent aa637ca861
commit 49cadce1ea
6 changed files with 69 additions and 241 deletions

View file

@ -2,7 +2,7 @@ package fluidmech.common.machines.pipes;
import com.google.common.io.ByteArrayDataInput;
import hydraulic.core.prefab.TileEntityFluidHandler;
import hydraulic.core.prefab.TileEntityFluidConveyor;
import fluidmech.common.FluidMech;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
@ -13,7 +13,7 @@ import net.minecraftforge.liquids.LiquidStack;
import universalelectricity.prefab.tile.TileEntityConductor;
import basiccomponents.common.BCLoader;
public class TileEntityNewPipes extends TileEntityFluidHandler
public class TileEntityNewPipes extends TileEntityFluidConveyor
{
public static double RESISTANCE = 0.5;
public static double MAX_AMPS = 200;
@ -24,7 +24,7 @@ public class TileEntityNewPipes extends TileEntityFluidHandler
}
@Override
public double getResistance(LiquidStack stack)
public double getMaxFlowRate(LiquidStack stack)
{
return this.RESISTANCE;
}

View file

@ -1,6 +1,6 @@
package hydraulic.core;
import hydraulic.core.liquids.Hydraulic;
import hydraulic.core.liquids.HydraulicNetworkManager;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.world.WorldEvent;
@ -16,7 +16,7 @@ public class HydraulicLoader
{
if (!isInitialized)
{
Hydraulic.instance = new Hydraulic();
HydraulicNetworkManager.instance = new HydraulicNetworkManager();
MinecraftForge.EVENT_BUS.register(this);
FMLLog.finest("Hydraulics v" + Hydraulics.VERSION + " loaded without error!");
@ -28,14 +28,14 @@ public class HydraulicLoader
@ForgeSubscribe
public void onWorldUnLoad(WorldEvent.Unload event)
{
Hydraulic.instance = new Hydraulic();
Hydraulic.instance.cleanUpNetworks();
HydraulicNetworkManager.instance = new HydraulicNetworkManager();
HydraulicNetworkManager.instance.cleanUpNetworks();
}
@ForgeSubscribe
public void onWorldLoad(WorldEvent.Load event)
{
Hydraulic.instance = new Hydraulic();
Hydraulic.instance.cleanUpNetworks();
HydraulicNetworkManager.instance = new HydraulicNetworkManager();
HydraulicNetworkManager.instance.cleanUpNetworks();
}
}

View file

@ -12,7 +12,7 @@ import universalelectricity.core.electricity.ElectricityNetwork;
* @author Calclavia
*
*/
public interface IFluidPipe extends IPsiMachine
public interface IFluidPipe extends IColorCoded
{
/**
* The Fluid network that this pipe is part of
@ -33,8 +33,13 @@ public interface IFluidPipe extends IPsiMachine
*
* @return The amount of Ohm's of resistance.
*/
public double getResistance(LiquidStack stack);
public double getMaxFlowRate(LiquidStack stack);
/**
* gets the devices pressure from a given side
*/
public double getMaxPressure(ForgeDirection side);
/**
* Called when the pressure on the pipe passes max
*/

View file

@ -1,222 +1,69 @@
package hydraulic.core.liquids;
import hydraulic.core.implement.ColorCode;
import hydraulic.core.implement.IFluidPipe;
import hydraulic.core.implement.IPsiCreator;
import hydraulic.core.implement.IPsiReciever;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.liquids.ITankContainer;
import net.minecraftforge.liquids.LiquidStack;
import universalelectricity.core.vector.Vector3;
import cpw.mods.fml.common.FMLLog;
public class HydraulicNetwork
{
private final HashMap<TileEntity, FluidPacket> producers = new HashMap<TileEntity, FluidPacket>();
private final HashMap<TileEntity, FluidPacket> consumers = new HashMap<TileEntity, FluidPacket>();
/* BLOCK THAT ACT AS FLUID CONVEYORS ** */
public final List<IFluidPipe> conductors = new ArrayList<IFluidPipe>();
public LiquidStack stack = new LiquidStack(0,0,0);
/* MACHINES THAT USE THE FORGE LIQUID API TO RECEIVE LIQUID ** */
public final List<ITankContainer> fluidReceivers = new ArrayList<ITankContainer>();
/* MACHINES THAT DEAL WITH PRESSURE ** */
public final List<IPsiCreator> pressureProducers = new ArrayList<IPsiCreator>();
public final List<IPsiReciever> pressureReceivers = new ArrayList<IPsiReciever>();
public ColorCode color;
public HydraulicNetwork(IFluidPipe conductor)
{
this.addConductor(conductor);
this.color = conductor.getColor();
}
/**
* Sets this tile entity to start producing energy in this network.
* Tries to add the liquid stack to the network's valid machines. Same as the fill method for
* ITankContainer in that it will
*
* @return The amount of Liquid used.
*/
public void startProducing(TileEntity tileEntity, FluidPacket pack)
public int addFluidToNetwork(LiquidStack stack)
{
if (tileEntity != null && pack.liquidStack != null && stack.isLiquidEqual(pack.liquidStack))
if (stack != null && canAcceptLiquid(stack))
{
this.producers.put(tileEntity, pack);
}
}
public void startProducing(TileEntity tileEntity, double pressure, LiquidStack stack)
{
this.startProducing(tileEntity, new FluidPacket(pressure, stack));
}
public boolean isProducing(TileEntity tileEntity)
{
return this.producers.containsKey(tileEntity);
return 0;
}
/**
* Sets this tile entity to stop producing energy in this network.
* can this network can accept the liquid type
*/
public void stopProducing(TileEntity tileEntity)
private boolean canAcceptLiquid(LiquidStack stack)
{
this.producers.remove(tileEntity);
return color.isValidLiquid(stack);
}
/**
* Sets this tile entity to start producing energy in this network.
* Removes a tileEntity from any of the valid lists
*/
public void startRequesting(TileEntity tileEntity, FluidPacket pack)
public void removeEntity(TileEntity ent)
{
if (tileEntity != null && pack.liquidStack != null && stack.isLiquidEqual(pack.liquidStack))
{
this.consumers.put(tileEntity, pack);
}
}
public void startRequesting(TileEntity tileEntity, double pressure, LiquidStack stack)
{
this.startRequesting(tileEntity, new FluidPacket(pressure, stack));
}
public boolean isRequesting(TileEntity tileEntity)
{
return this.consumers.containsKey(tileEntity);
}
/**
* Sets this tile entity to stop producing energy in this network.
*/
public void stopRequesting(TileEntity tileEntity)
{
this.consumers.remove(tileEntity);
}
/**
* @return The electricity produced in this electricity network
*/
public FluidPacket getProduced(LiquidStack stack)
{
FluidPacket totalElectricity = new FluidPacket(0, new LiquidStack(stack.itemID,0,stack.itemMeta));
Iterator it = this.producers.entrySet().iterator();
while (it.hasNext())
{
Map.Entry pairs = (Map.Entry) it.next();
if (pairs != null)
{
TileEntity tileEntity = (TileEntity) pairs.getKey();
if (tileEntity == null)
{
it.remove();
continue;
}
if (tileEntity.isInvalid())
{
it.remove();
continue;
}
if (tileEntity.worldObj.getBlockTileEntity(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord) != tileEntity)
{
it.remove();
continue;
}
FluidPacket pack = (FluidPacket) pairs.getValue();
if (pairs.getKey() != null && pairs.getValue() != null && pack != null && totalElectricity.liquidStack != null && pack.liquidStack != null)
{
int volume = totalElectricity.liquidStack.amount + pack.liquidStack.amount;
double pressure = Math.max(totalElectricity.pressure, pack.pressure);
totalElectricity.liquidStack = new LiquidStack(stack.itemID,volume,stack.itemMeta);
totalElectricity.pressure = pressure;
}
}
}
return totalElectricity;
}
/**
* @return How much electricity this network needs.
*/
public FluidPacket getRequest(LiquidStack stack)
{
FluidPacket totalElectricity = this.getRequestWithoutReduction(stack);
LiquidStack a = totalElectricity.liquidStack;
LiquidStack b = this.getProduced(stack).liquidStack;
if(a != null && b != null)
{
int amount = Math.max(a.amount - b.amount, 0);
totalElectricity.liquidStack.amount = amount;
}
return totalElectricity;
}
public FluidPacket getRequestWithoutReduction(LiquidStack stack)
{
FluidPacket totalElectricity = new FluidPacket(0, new LiquidStack(stack.itemID,0,stack.itemMeta));
Iterator it = this.consumers.entrySet().iterator();
while (it.hasNext())
{
Map.Entry pairs = (Map.Entry) it.next();
if (pairs != null)
{
TileEntity tileEntity = (TileEntity) pairs.getKey();
if (tileEntity == null)
{
it.remove();
continue;
}
if (tileEntity.isInvalid())
{
it.remove();
continue;
}
if (tileEntity.worldObj.getBlockTileEntity(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord) != tileEntity)
{
it.remove();
continue;
}
FluidPacket pack = (FluidPacket) pairs.getValue();
if (pack != null && pack.liquidStack != null)
{
totalElectricity.liquidStack.amount += pack.liquidStack.amount;
totalElectricity.pressure = Math.max(totalElectricity.pressure, pack.pressure);
}
}
}
return totalElectricity;
}
/**
* @return Returns all producers in this electricity network.
*/
public HashMap<TileEntity, FluidPacket> getProducers()
{
return this.producers;
}
/**
* @return Returns all consumers in this electricity network.
*/
public HashMap<TileEntity, FluidPacket> getConsumers()
{
return this.consumers;
fluidReceivers.remove(ent);
pressureProducers.remove(ent);
pressureReceivers.remove(ent);
}
public void addConductor(IFluidPipe newConductor)
@ -230,28 +77,6 @@ public class HydraulicNetwork
}
}
/**
* Get only the electric units that can receive electricity from the given side.
*/
public List<TileEntity> getReceivers()
{
List<TileEntity> receivers = new ArrayList<TileEntity>();
Iterator it = this.consumers.entrySet().iterator();
while (it.hasNext())
{
Map.Entry pairs = (Map.Entry) it.next();
if (pairs != null)
{
receivers.add((TileEntity) pairs.getKey());
}
}
return receivers;
}
public void cleanConductors()
{
for (int i = 0; i < conductors.size(); i++)
@ -302,10 +127,9 @@ public class HydraulicNetwork
{
for (int j = 0; j < this.conductors.size(); j++)
{
IFluidPipe conductor = this.conductors.get(j);
IFluidPipe conductor = this.conductors.get(j);
conductor.refreshConnectedBlocks();
}
}
}

View file

@ -16,11 +16,11 @@ import cpw.mods.fml.common.FMLLog;
* based on Calclavia's UE Electric Network stuff
*
*/
public class Hydraulic
public class HydraulicNetworkManager
{
public static Hydraulic instance = new Hydraulic();
public static HydraulicNetworkManager instance = new HydraulicNetworkManager();
private List<HydraulicNetwork> electricityNetworks = new ArrayList<HydraulicNetwork>();
private List<HydraulicNetwork> hydraulicNetworks = new ArrayList<HydraulicNetwork>();
/**
* Registers a conductor into the UE electricity net.
@ -29,15 +29,14 @@ public class Hydraulic
{
this.cleanUpNetworks();
HydraulicNetwork newNetwork = new HydraulicNetwork(newConductor);
this.electricityNetworks.add(newNetwork);
this.hydraulicNetworks.add(newNetwork);
}
public void unregister(TileEntity tileEntity)
{
for (HydraulicNetwork network : this.electricityNetworks)
for (HydraulicNetwork network : this.hydraulicNetworks)
{
network.stopProducing(tileEntity);
network.stopRequesting(tileEntity);
network.removeEntity(tileEntity);
}
}
@ -57,14 +56,14 @@ public class Hydraulic
{
networkA.conductors.addAll(networkB.conductors);
networkA.setNetwork();
this.electricityNetworks.remove(networkB);
this.hydraulicNetworks.remove(networkB);
networkB = null;
networkA.cleanConductors();
}
else
{
System.err.println("Failed to merge Universal Electricity wire connections!");
System.err.println("Failed to merge pipe connections!");
}
}
}
@ -121,7 +120,7 @@ public class Hydraulic
{
try
{
Iterator it = electricityNetworks.iterator();
Iterator it = hydraulicNetworks.iterator();
while (it.hasNext())
{
@ -143,7 +142,7 @@ public class Hydraulic
public void resetConductors()
{
Iterator it = electricityNetworks.iterator();
Iterator it = hydraulicNetworks.iterator();
while (it.hasNext())
{

View file

@ -4,7 +4,7 @@ import hydraulic.core.implement.IColorCoded;
import hydraulic.core.implement.IFluidPipe;
import hydraulic.core.implement.IPsiCreator;
import hydraulic.core.implement.IPsiMachine;
import hydraulic.core.liquids.Hydraulic;
import hydraulic.core.liquids.HydraulicNetworkManager;
import hydraulic.core.liquids.HydraulicNetwork;
import hydraulic.core.liquids.LiquidData;
import hydraulic.core.liquids.LiquidHandler;
@ -29,7 +29,7 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author Calclavia,DarkGuardsman
*
*/
public abstract class TileEntityFluidHandler extends TileEntityAdvanced implements IFluidPipe, IPacketReceiver
public abstract class TileEntityFluidConveyor extends TileEntityAdvanced implements IFluidPipe, IPacketReceiver
{
private HydraulicNetwork network;
@ -47,7 +47,7 @@ public abstract class TileEntityFluidHandler extends TileEntityAdvanced implemen
protected LiquidData liquidData = LiquidHandler.unkown;
public TileEntityFluidHandler()
public TileEntityFluidConveyor()
{
this.reset();
}
@ -84,7 +84,7 @@ public abstract class TileEntityFluidHandler extends TileEntityAdvanced implemen
if (tileEntity.getClass() == this.getClass())
{
Hydraulic.instance.mergeConnection(this.getNetwork(), ((IFluidPipe) tileEntity).getNetwork());
HydraulicNetworkManager.instance.mergeConnection(this.getNetwork(), ((IFluidPipe) tileEntity).getNetwork());
}
return;
@ -95,11 +95,11 @@ public abstract class TileEntityFluidHandler extends TileEntityAdvanced implemen
{
if (this.connectedBlocks[side.ordinal()] instanceof IFluidPipe)
{
Hydraulic.instance.splitConnection(this, (IFluidPipe) this.getConnectedBlocks()[side.ordinal()]);
HydraulicNetworkManager.instance.splitConnection(this, (IFluidPipe) this.getConnectedBlocks()[side.ordinal()]);
}
this.getNetwork().stopProducing(this.connectedBlocks[side.ordinal()]);
this.getNetwork().stopRequesting(this.connectedBlocks[side.ordinal()]);
//this.getNetwork().stopProducing(this.connectedBlocks[side.ordinal()]);
//this.getNetwork().stopRequesting(this.connectedBlocks[side.ordinal()]);
}
this.connectedBlocks[side.ordinal()] = null;
@ -157,7 +157,7 @@ public abstract class TileEntityFluidHandler extends TileEntityAdvanced implemen
if (tileEntity.getClass() == this.getClass())
{
Hydraulic.instance.mergeConnection(this.getNetwork(), ((IFluidPipe) tileEntity).getNetwork());
HydraulicNetworkManager.instance.mergeConnection(this.getNetwork(), ((IFluidPipe) tileEntity).getNetwork());
}
return;
@ -191,9 +191,9 @@ public abstract class TileEntityFluidHandler extends TileEntityAdvanced implemen
{
this.network = null;
if (Hydraulic.instance != null)
if (HydraulicNetworkManager.instance != null)
{
Hydraulic.instance.registerConductor(this);
HydraulicNetworkManager.instance.registerConductor(this);
}
}