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

View file

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

View file

@ -12,7 +12,7 @@ import universalelectricity.core.electricity.ElectricityNetwork;
* @author Calclavia * @author Calclavia
* *
*/ */
public interface IFluidPipe extends IPsiMachine public interface IFluidPipe extends IColorCoded
{ {
/** /**
* The Fluid network that this pipe is part of * The Fluid network that this pipe is part of
@ -33,7 +33,12 @@ public interface IFluidPipe extends IPsiMachine
* *
* @return The amount of Ohm's of resistance. * @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 * Called when the pressure on the pipe passes max

View file

@ -1,222 +1,69 @@
package hydraulic.core.liquids; package hydraulic.core.liquids;
import hydraulic.core.implement.ColorCode;
import hydraulic.core.implement.IFluidPipe; import hydraulic.core.implement.IFluidPipe;
import hydraulic.core.implement.IPsiCreator;
import hydraulic.core.implement.IPsiReciever;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.liquids.ITankContainer;
import net.minecraftforge.liquids.LiquidStack; import net.minecraftforge.liquids.LiquidStack;
import universalelectricity.core.vector.Vector3;
import cpw.mods.fml.common.FMLLog;
public class HydraulicNetwork public class HydraulicNetwork
{ {
private final HashMap<TileEntity, FluidPacket> producers = new HashMap<TileEntity, FluidPacket>(); /* BLOCK THAT ACT AS FLUID CONVEYORS ** */
private final HashMap<TileEntity, FluidPacket> consumers = new HashMap<TileEntity, FluidPacket>();
public final List<IFluidPipe> conductors = new ArrayList<IFluidPipe>(); 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) public HydraulicNetwork(IFluidPipe conductor)
{ {
this.addConductor(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));
} }
return 0;
public boolean isProducing(TileEntity tileEntity)
{
return this.producers.containsKey(tileEntity);
} }
/** /**
* 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)) fluidReceivers.remove(ent);
{ pressureProducers.remove(ent);
this.consumers.put(tileEntity, pack); pressureReceivers.remove(ent);
}
}
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;
} }
public void addConductor(IFluidPipe newConductor) 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() public void cleanConductors()
{ {
for (int i = 0; i < conductors.size(); i++) for (int i = 0; i < conductors.size(); i++)
@ -307,5 +132,4 @@ public class HydraulicNetwork
} }
} }
} }

View file

@ -16,11 +16,11 @@ import cpw.mods.fml.common.FMLLog;
* based on Calclavia's UE Electric Network stuff * 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. * Registers a conductor into the UE electricity net.
@ -29,15 +29,14 @@ public class Hydraulic
{ {
this.cleanUpNetworks(); this.cleanUpNetworks();
HydraulicNetwork newNetwork = new HydraulicNetwork(newConductor); HydraulicNetwork newNetwork = new HydraulicNetwork(newConductor);
this.electricityNetworks.add(newNetwork); this.hydraulicNetworks.add(newNetwork);
} }
public void unregister(TileEntity tileEntity) public void unregister(TileEntity tileEntity)
{ {
for (HydraulicNetwork network : this.electricityNetworks) for (HydraulicNetwork network : this.hydraulicNetworks)
{ {
network.stopProducing(tileEntity); network.removeEntity(tileEntity);
network.stopRequesting(tileEntity);
} }
} }
@ -57,14 +56,14 @@ public class Hydraulic
{ {
networkA.conductors.addAll(networkB.conductors); networkA.conductors.addAll(networkB.conductors);
networkA.setNetwork(); networkA.setNetwork();
this.electricityNetworks.remove(networkB); this.hydraulicNetworks.remove(networkB);
networkB = null; networkB = null;
networkA.cleanConductors(); networkA.cleanConductors();
} }
else 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 try
{ {
Iterator it = electricityNetworks.iterator(); Iterator it = hydraulicNetworks.iterator();
while (it.hasNext()) while (it.hasNext())
{ {
@ -143,7 +142,7 @@ public class Hydraulic
public void resetConductors() public void resetConductors()
{ {
Iterator it = electricityNetworks.iterator(); Iterator it = hydraulicNetworks.iterator();
while (it.hasNext()) while (it.hasNext())
{ {

View file

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