Core code for Fluid and Gas networks
This commit is contained in:
parent
efc98114e8
commit
acdbf1f3cb
5 changed files with 103 additions and 49 deletions
|
@ -19,6 +19,8 @@ import cpw.mods.fml.common.FMLCommonHandler;
|
|||
|
||||
public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
|
||||
{
|
||||
public static final int TUBE_GAS = 256;
|
||||
|
||||
public int transferDelay = 0;
|
||||
|
||||
public boolean didTransfer;
|
||||
|
@ -27,6 +29,8 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
|
|||
public float gasScale;
|
||||
public Gas refGas = null;
|
||||
|
||||
public GasStack gasStored;
|
||||
|
||||
public GasNetwork(ITransmitter<GasNetwork>... varPipes)
|
||||
{
|
||||
transmitters.addAll(Arrays.asList(varPipes));
|
||||
|
@ -60,13 +64,18 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
|
|||
register();
|
||||
}
|
||||
|
||||
public synchronized int emit(GasStack stack, TileEntity emitter)
|
||||
public int getCapacity()
|
||||
{
|
||||
return TUBE_GAS*transmitters.size();
|
||||
}
|
||||
|
||||
public synchronized int getGasNeeded()
|
||||
{
|
||||
return getCapacity()-(gasStored != null ? gasStored.amount : 0);
|
||||
}
|
||||
|
||||
public synchronized int tickEmit(GasStack stack)
|
||||
{
|
||||
if(refGas != null && refGas != stack.getGas())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
List availableAcceptors = Arrays.asList(getAcceptors(stack.getGas()).toArray());
|
||||
|
||||
Collections.shuffle(availableAcceptors);
|
||||
|
@ -82,7 +91,7 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
|
|||
|
||||
for(Object obj : availableAcceptors)
|
||||
{
|
||||
if(obj instanceof IGasHandler && obj != emitter)
|
||||
if(obj instanceof IGasHandler)
|
||||
{
|
||||
IGasHandler acceptor = (IGasHandler)obj;
|
||||
|
||||
|
@ -111,6 +120,27 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
|
|||
return sent;
|
||||
}
|
||||
|
||||
public synchronized int emit(GasStack stack)
|
||||
{
|
||||
if(refGas != null && refGas != stack.getGas())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int toUse = Math.min(getGasNeeded(), stack.amount);
|
||||
|
||||
if(gasStored == null)
|
||||
{
|
||||
gasStored = stack.copy();
|
||||
gasStored.amount = toUse;
|
||||
}
|
||||
else {
|
||||
gasStored.amount += toUse;
|
||||
}
|
||||
|
||||
return toUse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick()
|
||||
{
|
||||
|
@ -133,6 +163,16 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
|
|||
}
|
||||
|
||||
prevTransfer = didTransfer;
|
||||
|
||||
if(gasStored != null)
|
||||
{
|
||||
gasStored.amount -= (gasStored.amount - tickEmit(gasStored));
|
||||
|
||||
if(gasStored.amount <= 0)
|
||||
{
|
||||
gasStored = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -291,12 +331,12 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
|
|||
@Override
|
||||
public String getNeeded()
|
||||
{
|
||||
return "Undefined for Gas networks.";
|
||||
return Integer.toString(getGasNeeded());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFlow()
|
||||
{
|
||||
return "Not defined yet for Gas networks";
|
||||
return gasStored != null ? gasStored.getGas().getLocalizedName() + " (" + gasStored.amount + ")" : "None";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
package mekanism.api.gas;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import mekanism.api.Object3D;
|
||||
import mekanism.api.transmitters.ITransmitter;
|
||||
import mekanism.api.transmitters.TransmissionType;
|
||||
|
@ -97,7 +94,7 @@ public final class GasTransmission
|
|||
|
||||
if(TransmissionType.checkTransmissionType(pointer, TransmissionType.GAS, sender))
|
||||
{
|
||||
return ((ITransmitter<GasNetwork>)pointer).getTransmitterNetwork().emit(stack, sender);
|
||||
return ((ITransmitter<GasNetwork>)pointer).getTransmitterNetwork().emit(stack);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -25,6 +25,8 @@ import cpw.mods.fml.common.FMLCommonHandler;
|
|||
|
||||
public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
|
||||
{
|
||||
public static final int PIPE_FLUID = 1000;
|
||||
|
||||
public int transferDelay = 0;
|
||||
|
||||
public boolean didTransfer;
|
||||
|
@ -33,6 +35,8 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
|
|||
public float fluidScale;
|
||||
public Fluid refFluid = null;
|
||||
|
||||
public FluidStack fluidStored;
|
||||
|
||||
public FluidNetwork(ITransmitter<FluidNetwork>... varPipes)
|
||||
{
|
||||
transmitters.addAll(Arrays.asList(varPipes));
|
||||
|
@ -66,33 +70,18 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
|
|||
register();
|
||||
}
|
||||
|
||||
public synchronized int getTotalNeeded(List<TileEntity> ignored)
|
||||
public int getCapacity()
|
||||
{
|
||||
int toReturn = 0;
|
||||
|
||||
for(IFluidHandler handler : possibleAcceptors)
|
||||
{
|
||||
ForgeDirection side = acceptorDirections.get(handler).getOpposite();
|
||||
|
||||
for(Fluid fluid : FluidRegistry.getRegisteredFluids().values())
|
||||
{
|
||||
int filled = handler.fill(side, new FluidStack(fluid, Integer.MAX_VALUE), false);
|
||||
|
||||
toReturn += filled;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return toReturn;
|
||||
return PIPE_FLUID*transmitters.size();
|
||||
}
|
||||
|
||||
public synchronized int emit(FluidStack fluidToSend, boolean doTransfer, TileEntity emitter)
|
||||
public synchronized int getFluidNeeded()
|
||||
{
|
||||
return getCapacity()-(fluidStored != null ? fluidStored.amount : 0);
|
||||
}
|
||||
|
||||
public synchronized int tickEmit(FluidStack fluidToSend, boolean doTransfer)
|
||||
{
|
||||
if(refFluid != null && refFluid != fluidToSend.getFluid())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
List availableAcceptors = Arrays.asList(getAcceptors(fluidToSend).toArray());
|
||||
|
||||
Collections.shuffle(availableAcceptors);
|
||||
|
@ -107,7 +96,7 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
|
|||
|
||||
for(Object obj : availableAcceptors)
|
||||
{
|
||||
if(obj instanceof IFluidHandler && obj != emitter)
|
||||
if(obj instanceof IFluidHandler)
|
||||
{
|
||||
IFluidHandler acceptor = (IFluidHandler)obj;
|
||||
int currentSending = sending;
|
||||
|
@ -128,13 +117,35 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
|
|||
refFluid = fluidToSend.getFluid();
|
||||
didTransfer = true;
|
||||
transferDelay = 2;
|
||||
|
||||
transferDelay = 2;
|
||||
}
|
||||
|
||||
return fluidSent;
|
||||
}
|
||||
|
||||
public synchronized int emit(FluidStack fluidToSend, boolean doTransfer)
|
||||
{
|
||||
if(fluidToSend == null || (fluidStored != null && fluidStored.getFluid() != fluidToSend.getFluid()))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int toUse = Math.min(getFluidNeeded(), fluidToSend.amount);
|
||||
|
||||
if(doTransfer)
|
||||
{
|
||||
if(fluidStored == null)
|
||||
{
|
||||
fluidStored = fluidToSend.copy();
|
||||
fluidStored.amount = toUse;
|
||||
}
|
||||
else {
|
||||
fluidStored.amount += toUse;
|
||||
}
|
||||
}
|
||||
|
||||
return toUse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick()
|
||||
{
|
||||
|
@ -157,6 +168,16 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
|
|||
}
|
||||
|
||||
prevTransfer = didTransfer;
|
||||
|
||||
if(fluidStored != null)
|
||||
{
|
||||
fluidStored.amount -= (fluidStored.amount - tickEmit(fluidStored, true));
|
||||
|
||||
if(fluidStored.amount <= 0)
|
||||
{
|
||||
fluidStored = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -317,12 +338,12 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
|
|||
@Override
|
||||
public String getNeeded()
|
||||
{
|
||||
return "Fluid needed (any type): " + (float)getTotalNeeded(new ArrayList())/1000F + " buckets";
|
||||
return "Fluid needed (any type): " + (float)getFluidNeeded()/1000F + " buckets";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFlow()
|
||||
{
|
||||
return "Not defined yet for Fluid networks";
|
||||
return fluidStored + " mB";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package mekanism.common.multipart;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -10,10 +9,7 @@ import mekanism.api.transmitters.TransmissionType;
|
|||
import mekanism.client.render.PartTransmitterIcons;
|
||||
import mekanism.client.render.RenderPartTransmitter;
|
||||
import mekanism.common.FluidNetwork;
|
||||
import mekanism.common.PacketHandler;
|
||||
import mekanism.common.PipeUtils;
|
||||
import mekanism.common.PacketHandler.Transmission;
|
||||
import mekanism.common.network.PacketTileEntity;
|
||||
import net.minecraft.client.renderer.texture.IconRegister;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
@ -96,7 +92,7 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork> implements
|
|||
{
|
||||
if(!isActive)
|
||||
{
|
||||
return getTransmitterNetwork().emit(resource, doFill, Object3D.get(tile()).getFromSide(from).getTileEntity(world()));
|
||||
return getTransmitterNetwork().emit(resource, doFill);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -151,7 +147,7 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork> implements
|
|||
|
||||
if(received != null && received.amount != 0)
|
||||
{
|
||||
container.drain(side.getOpposite(), getTransmitterNetwork().emit(received, true, Object3D.get(tile()).getFromSide(side).getTileEntity(world())), true);
|
||||
container.drain(side.getOpposite(), getTransmitterNetwork().emit(received, true), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -150,7 +150,7 @@ public class TileEntityMechanicalPipe extends TileEntityTransmitter<FluidNetwork
|
|||
|
||||
if(received != null && received.amount != 0)
|
||||
{
|
||||
container.drain(side.getOpposite(), getTransmitterNetwork().emit(received, true, (TileEntity)container), true);
|
||||
container.drain(side.getOpposite(), getTransmitterNetwork().emit(received, true), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -216,7 +216,7 @@ public class TileEntityMechanicalPipe extends TileEntityTransmitter<FluidNetwork
|
|||
{
|
||||
if(!isActive)
|
||||
{
|
||||
return getTransmitterNetwork().emit(resource, doFill, Object3D.get(this).getFromSide(from).getTileEntity(worldObj));
|
||||
return getTransmitterNetwork().emit(resource, doFill);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue