Cleaned up fluidstack merge code
This commit is contained in:
parent
f3749fcaa9
commit
1739fd5fa5
2 changed files with 30 additions and 19 deletions
|
@ -49,61 +49,66 @@ public class FluidNetworkHelper
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Merges two fluids together that don't result in damage to the network */
|
/** Merges two fluids together that don't result in damage to the network */
|
||||||
public static FluidStack mergeFluids(FluidStack stackOne, FluidStack stackTwo)
|
public static FluidStack mergeFluidStacks(FluidStack stackOne, FluidStack stackTwo)
|
||||||
{
|
{
|
||||||
FluidStack stack = null;
|
FluidStack resultStack = null;
|
||||||
|
|
||||||
if (stackTwo != null && stackOne != null && stackOne.isFluidEqual(stackTwo))
|
if (stackTwo != null && stackOne != null && stackOne.isFluidEqual(stackTwo))
|
||||||
{
|
{
|
||||||
stack = stackOne.copy();
|
resultStack = stackOne.copy();
|
||||||
stack.amount += stackTwo.amount;
|
resultStack.amount += stackTwo.amount;
|
||||||
}
|
}
|
||||||
else if (stackOne == null && stackTwo != null)
|
else if (stackOne == null && stackTwo != null)
|
||||||
{
|
{
|
||||||
stack = stackTwo.copy();
|
resultStack = stackTwo.copy();
|
||||||
}
|
}
|
||||||
else if (stackOne != null && stackTwo == null)
|
else if (stackOne != null && stackTwo == null)
|
||||||
{
|
{
|
||||||
stack = stackOne.copy();
|
resultStack = stackOne.copy();
|
||||||
}
|
}
|
||||||
else if (stackTwo != null && stackOne != null && !stackOne.isFluidEqual(stackTwo))
|
else if (stackTwo != null && stackOne != null && !stackOne.isFluidEqual(stackTwo))
|
||||||
{
|
{
|
||||||
Fluid waste = FluidRegistry.getFluid("waste");
|
|
||||||
/* Try to merge fluids by mod defined rules first */
|
/* Try to merge fluids by mod defined rules first */
|
||||||
if (fluidMergeResults.containsKey(new Pair<Fluid, Fluid>(stackOne.getFluid(), stackTwo.getFluid())))
|
if (fluidMergeResults.containsKey(new Pair<Fluid, Fluid>(stackOne.getFluid(), stackTwo.getFluid())))
|
||||||
{
|
{
|
||||||
Object result = fluidMergeResults.get(new Pair<Fluid, Fluid>(stackOne.getFluid(), stackTwo.getFluid()));
|
Object result = fluidMergeResults.get(new Pair<Fluid, Fluid>(stackOne.getFluid(), stackTwo.getFluid()));
|
||||||
if (result instanceof Fluid)
|
if (result instanceof Fluid)
|
||||||
{
|
{
|
||||||
stack = new FluidStack(((Fluid) result).getID(), stackOne.amount + stackTwo.amount);
|
resultStack = new FluidStack(((Fluid) result).getID(), stackOne.amount + stackTwo.amount);
|
||||||
}
|
}
|
||||||
else if (result instanceof FluidStack)
|
else if (result instanceof FluidStack)
|
||||||
{
|
{
|
||||||
stack = ((FluidStack) result).copy();
|
resultStack = ((FluidStack) result).copy();
|
||||||
stack.amount = stackOne.amount + stackTwo.amount;
|
resultStack.amount = stackOne.amount + stackTwo.amount;
|
||||||
}
|
}
|
||||||
else if (result instanceof String && ((String) result).startsWith("Liquid:"))
|
else if (result instanceof String && ((String) result).startsWith("Liquid:"))
|
||||||
{
|
{
|
||||||
stack = new FluidStack(FluidRegistry.getFluid(((String) result).replace("Liquid:", "")), stackOne.amount + stackTwo.amount);
|
resultStack = new FluidStack(FluidRegistry.getFluid(((String) result).replace("Liquid:", "")), stackOne.amount + stackTwo.amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (stack != null)
|
if (resultStack == null)
|
||||||
{
|
{
|
||||||
|
Fluid waste = FluidRegistry.getFluid("waste");
|
||||||
|
if (waste == null)
|
||||||
|
{
|
||||||
|
System.out.println("[FluidNetworkHelper] Attempted to merge two fluids into a waste fluid stack but Forge fluid registry return null for waste. Possible that waste fluid was disabled or not registered correctly.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
/* If both liquids are waste then copy fluidStack lists then merge */
|
/* If both liquids are waste then copy fluidStack lists then merge */
|
||||||
if (stackTwo.fluidID == waste.getID() && stackOne.fluidID == waste.getID())
|
if (stackTwo.fluidID == waste.getID() && stackOne.fluidID == waste.getID())
|
||||||
{
|
{
|
||||||
List<FluidStack> stacks = new ArrayList<FluidStack>();
|
List<FluidStack> stacks = new ArrayList<FluidStack>();
|
||||||
stacks.addAll(getStacksFromWaste(stackOne.copy()));
|
stacks.addAll(getStacksFromWaste(stackOne.copy()));
|
||||||
stacks.addAll(getStacksFromWaste(stackTwo.copy()));
|
stacks.addAll(getStacksFromWaste(stackTwo.copy()));
|
||||||
stack = createNewWasteStack(stacks.toArray(new FluidStack[stacks.size()]));
|
resultStack = createNewWasteStack(stacks.toArray(new FluidStack[stacks.size()]));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stack = createNewWasteStack(stackOne.copy(), stackTwo.copy());
|
resultStack = createNewWasteStack(stackOne.copy(), stackTwo.copy());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return stack;
|
return resultStack;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets the fluidStacks that make up a waste FluidStack */
|
/** Gets the fluidStacks that make up a waste FluidStack */
|
||||||
|
@ -158,8 +163,14 @@ public class FluidNetworkHelper
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Checks if the liquid can be merged without damage */
|
/** Gets the result of the merge of the two fluids, order of merge does matter and will produce
|
||||||
public static Object canMergeFluids(FluidStack stackOne, FluidStack stackTwo)
|
* diffrent results.
|
||||||
|
*
|
||||||
|
* @param stackOne - Receiving fluid, eg the one that is not moving
|
||||||
|
* @param stackTwo - Flowing fluid, eg the one moving into the first fluid
|
||||||
|
* @return Object result of the merge, can be anything from string, ItemStack, Item, Block, or
|
||||||
|
* enum action */
|
||||||
|
public static Object getMergeResult(FluidStack stackOne, FluidStack stackTwo)
|
||||||
{
|
{
|
||||||
if (stackOne != null && stackTwo != null && !stackOne.equals(stackTwo))
|
if (stackOne != null && stackTwo != null && !stackOne.equals(stackTwo))
|
||||||
{
|
{
|
||||||
|
|
|
@ -224,7 +224,7 @@ public class NetworkFluidTiles extends NetworkTileEntities
|
||||||
|
|
||||||
this.readDataFromTiles();
|
this.readDataFromTiles();
|
||||||
network.readDataFromTiles();
|
network.readDataFromTiles();
|
||||||
Object result = FluidNetworkHelper.canMergeFluids(this.combinedStorage().getFluid(), network.combinedStorage().getFluid());
|
Object result = FluidNetworkHelper.getMergeResult(this.combinedStorage().getFluid(), network.combinedStorage().getFluid());
|
||||||
if (mergePoint instanceof TileEntity)
|
if (mergePoint instanceof TileEntity)
|
||||||
{
|
{
|
||||||
World world = ((TileEntity) mergePoint).worldObj;
|
World world = ((TileEntity) mergePoint).worldObj;
|
||||||
|
@ -309,7 +309,7 @@ public class NetworkFluidTiles extends NetworkTileEntities
|
||||||
newNetwork.getNetworkMemebers().addAll(network.getNetworkMemebers());
|
newNetwork.getNetworkMemebers().addAll(network.getNetworkMemebers());
|
||||||
|
|
||||||
newNetwork.cleanUpMembers();
|
newNetwork.cleanUpMembers();
|
||||||
newNetwork.combinedStorage().setFluid(FluidNetworkHelper.mergeFluids(one, two));
|
newNetwork.combinedStorage().setFluid(FluidNetworkHelper.mergeFluidStacks(one, two));
|
||||||
newNetwork.writeDataToTiles();
|
newNetwork.writeDataToTiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue