From 73ccc830c3d659484c82eb335f93ff5587a2b32f Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Wed, 16 Oct 2019 19:07:31 +0200 Subject: [PATCH] Make INetwork insertFluid/extractFluid return a NonNull FluidStack --- .../api/autocrafting/ICraftingManager.java | 6 ++--- .../refinedstorage/api/network/INetwork.java | 23 +++++++++---------- .../apiimpl/autocrafting/CraftingManager.java | 6 ++++- .../autocrafting/task/CraftingTask.java | 14 +++-------- .../grid/handler/FluidGridHandler.java | 6 ++--- .../network/node/NetworkNodeExporter.java | 10 ++++---- .../node/NetworkNodeFluidInterface.java | 18 +++++---------- .../network/node/NetworkNodeImporter.java | 10 ++++---- .../network/node/NetworkNodeInterface.java | 2 +- .../NetworkNodeDiskManipulator.java | 14 ++++------- .../refinedstorage/tile/ControllerTile.java | 22 +++++++++--------- 11 files changed, 56 insertions(+), 75 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java index 2208f01e5..74fc16b0f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java @@ -119,16 +119,16 @@ public interface ICraftingManager { /** * Tracks an incoming stack. * - * @param stack the stack + * @param stack the stack, can be empty */ int track(@Nonnull ItemStack stack, int size); /** * Tracks an incoming stack. * - * @param stack the stack + * @param stack the stack, can be empty */ - int track(FluidStack stack, int size); + int track(@Nonnull FluidStack stack, int size); /** * @return a list of crafting patterns in this network, do NOT modify this list diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetwork.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetwork.java index 1eaf5a335..d51b61922 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetwork.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetwork.java @@ -17,7 +17,6 @@ import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.util.function.Predicate; /** @@ -159,9 +158,9 @@ public interface INetwork { * @param stack the stack prototype to insert, do NOT modify * @param size the amount of that prototype that has to be inserted * @param action the action - * @return null if the insert was successful, or a stack with the remainder + * @return an empty stack if the insert was successful, or a stack with the remainder */ - @Nullable + @Nonnull FluidStack insertFluid(@Nonnull FluidStack stack, int size, Action action); /** @@ -169,14 +168,14 @@ public interface INetwork { * * @param stack the stack prototype to insert, do NOT modify * @param size the amount of that prototype that has to be inserted - * @return null if the insert was successful, or a stack with the remainder + * @return an empty stack if the insert was successful, or a stack with the remainder */ - @Nullable + @Nonnull default FluidStack insertFluidTracked(@Nonnull FluidStack stack, int size) { int remainder = getCraftingManager().track(stack, size); if (remainder == 0) { - return null; + return FluidStack.EMPTY; } return insertFluid(stack, remainder, Action.PERFORM); @@ -189,9 +188,9 @@ public interface INetwork { * @param size the amount of that prototype that has to be extracted * @param flags the flags to compare on, see {@link IComparer} * @param action the action - * @return null if we didn't extract anything, or a stack with the result + * @return an empty stack if nothing was extracted, or a stack with the result */ - @Nullable + @Nonnull FluidStack extractFluid(@Nonnull FluidStack stack, int size, int flags, Action action, Predicate> filter); /** @@ -201,9 +200,9 @@ public interface INetwork { * @param size the amount of that prototype that has to be extracted * @param flags the flags to compare on, see {@link IComparer} * @param action the action - * @return null if we didn't extract anything, or a stack with the result + * @return an empty stack if nothing was extracted, or a stack with the result */ - @Nullable + @Nonnull default FluidStack extractFluid(FluidStack stack, int size, int flags, Action action) { return extractFluid(stack, size, flags, action, s -> true); } @@ -214,9 +213,9 @@ public interface INetwork { * @param stack the prototype of the stack to extract, do NOT modify * @param size the amount of that prototype that has to be extracted * @param action the action - * @return null if we didn't extract anything, or a stack with the result + * @return an empty stack if nothing was extracted, or a stack with the result */ - @Nullable + @Nonnull default FluidStack extractFluid(FluidStack stack, int size, Action action) { return extractFluid(stack, size, IComparer.COMPARE_NBT, action); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java index 17b0d49b0..1b0e6009a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java @@ -333,7 +333,11 @@ public class CraftingManager implements ICraftingManager { } @Override - public int track(FluidStack stack, int size) { + public int track(@Nonnull FluidStack stack, int size) { + if (stack.isEmpty()) { + return 0; + } + for (ICraftingTask task : tasks.values()) { size = task.onTrackedInsert(stack, size); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java index b03e32977..080eaad5d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java @@ -568,7 +568,7 @@ public class CraftingTask implements ICraftingTask { for (StackListEntry toExtract : toExtractInitialFluids.getStacks()) { FluidStack result = network.extractFluid(toExtract.getStack(), toExtract.getStack().getAmount(), Action.PERFORM); - if (result != null) { + if (!result.isEmpty()) { internalFluidStorage.insert(toExtract.getStack(), result.getAmount(), Action.PERFORM); toRemove.add(result); @@ -856,13 +856,7 @@ public class CraftingTask implements ICraftingTask { for (FluidStack stack : internalFluidStorage.getStacks()) { FluidStack remainder = network.insertFluid(stack, stack.getAmount(), Action.PERFORM); - toPerform.add(() -> { - if (remainder == null) { - internalFluidStorage.extract(stack, stack.getAmount(), IComparer.COMPARE_NBT, Action.PERFORM); - } else { - internalFluidStorage.extract(stack, stack.getAmount() - remainder.getAmount(), IComparer.COMPARE_NBT, Action.PERFORM); - } - }); + toPerform.add(() -> internalFluidStorage.extract(stack, stack.getAmount() - remainder.getAmount(), IComparer.COMPARE_NBT, Action.PERFORM)); } // Prevent CME. @@ -993,9 +987,7 @@ public class CraftingTask implements ICraftingTask { } else { FluidStack remainder = network.insertFluid(stack, needed, Action.PERFORM); - if (remainder != null) { - internalFluidStorage.insert(stack, needed, Action.PERFORM); - } + internalFluidStorage.insert(remainder, remainder.getAmount(), Action.PERFORM); } if (size == 0) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java index 6b9af7d38..35929dc37 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java @@ -61,9 +61,7 @@ public class FluidGridHandler implements IFluidGridHandler { FluidStack extracted = network.extractFluid(stack, FluidAttributes.BUCKET_VOLUME, Action.PERFORM); - if (extracted != null) { - fluidHandler.fill(extracted, IFluidHandler.FluidAction.EXECUTE); - } + fluidHandler.fill(extracted, IFluidHandler.FluidAction.EXECUTE); if (shift) { if (!player.inventory.addItemStackToInventory(fluidHandler.getContainer().copy())) { @@ -88,7 +86,7 @@ public class FluidGridHandler implements IFluidGridHandler { Pair result = StackUtils.getFluid(container, true); - if (!result.getValue().isEmpty() && network.insertFluid(result.getValue(), result.getValue().getAmount(), Action.SIMULATE) == null) { + if (!result.getValue().isEmpty() && network.insertFluid(result.getValue(), result.getValue().getAmount(), Action.SIMULATE).isEmpty()) { network.getFluidStorageTracker().changed(player, result.getValue().copy()); result = StackUtils.getFluid(container, false); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java index 0e8854802..61679b390 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java @@ -122,14 +122,12 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy FluidStack took = network.extractFluid(stack, toExtract, compare, Action.SIMULATE); - if (took != null) { - int filled = handler.fill(took, IFluidHandler.FluidAction.SIMULATE); + int filled = handler.fill(took, IFluidHandler.FluidAction.SIMULATE); - if (filled > 0) { - took = network.extractFluid(stack, filled, compare, Action.PERFORM); + if (filled > 0) { + took = network.extractFluid(stack, filled, compare, Action.PERFORM); - handler.fill(took, IFluidHandler.FluidAction.EXECUTE); - } + handler.fill(took, IFluidHandler.FluidAction.EXECUTE); } } else if (upgrades.hasUpgrade(UpgradeItem.Type.CRAFTING)) { network.getCraftingManager().request(this, stack, toExtract); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java index 64686f7d3..1c7b0612d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java @@ -87,12 +87,10 @@ public class NetworkNodeFluidInterface extends NetworkNode { FluidStack drained = tankIn.drain(FluidAttributes.BUCKET_VOLUME * upgrades.getItemInteractCount(), IFluidHandler.FluidAction.EXECUTE); // Drain in tank - if (drained != null) { + if (!drained.isEmpty()) { FluidStack remainder = network.insertFluidTracked(drained, drained.getAmount()); - if (remainder != null) { - tankIn.fill(remainder, IFluidHandler.FluidAction.EXECUTE); - } + tankIn.fill(remainder, IFluidHandler.FluidAction.EXECUTE); } } @@ -126,8 +124,8 @@ public class NetworkNodeFluidInterface extends NetworkNode { return !(s instanceof FluidExternalStorage) || !((FluidExternalStorage) s).isConnectedToInterface(); }); - if (result != null) { - if (tankOut.getFluid() == null) { + if (!result.isEmpty()) { + if (tankOut.getFluid().isEmpty()) { tankOut.setFluid(result); } else { tankOut.getFluid().grow(result.getAmount()); @@ -138,7 +136,7 @@ public class NetworkNodeFluidInterface extends NetworkNode { // Example: our delta is 5, we extracted 3 fluids. // That means we still have to autocraft 2 fluids. - delta -= result == null ? 0 : result.getAmount(); + delta -= result.getAmount(); if (delta > 0 && upgrades.hasUpgrade(UpgradeItem.Type.CRAFTING)) { network.getCraftingManager().request(this, wanted, delta); @@ -146,11 +144,7 @@ public class NetworkNodeFluidInterface extends NetworkNode { } else if (delta < 0) { FluidStack remainder = network.insertFluidTracked(got, Math.abs(delta)); - if (remainder == null) { - tankOut.getFluid().shrink(Math.abs(delta)); - } else { - tankOut.getFluid().shrink(Math.abs(delta) - remainder.getAmount()); - } + tankOut.getFluid().shrink(Math.abs(delta) - remainder.getAmount()); onTankOutChanged(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java index b48f42836..f81eeca9d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java @@ -101,15 +101,15 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IWh if (handler != null) { FluidStack stack = handler.drain(FluidAttributes.BUCKET_VOLUME, IFluidHandler.FluidAction.SIMULATE); - if (stack != null && IWhitelistBlacklist.acceptsFluid(fluidFilters, mode, compare, stack) && network.insertFluid(stack, stack.getAmount(), Action.SIMULATE) == null) { + if (!stack.isEmpty() && + IWhitelistBlacklist.acceptsFluid(fluidFilters, mode, compare, stack) && + network.insertFluid(stack, stack.getAmount(), Action.SIMULATE).isEmpty()) { FluidStack toDrain = handler.drain(FluidAttributes.BUCKET_VOLUME * upgrades.getItemInteractCount(), IFluidHandler.FluidAction.EXECUTE); // TODO: is this execute? - if (toDrain != null) { + if (!toDrain.isEmpty()) { FluidStack remainder = network.insertFluidTracked(toDrain, toDrain.getAmount()); - if (remainder != null) { - toDrain.shrink(remainder.getAmount()); - } + toDrain.shrink(remainder.getAmount()); handler.drain(toDrain, IFluidHandler.FluidAction.EXECUTE); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java index 9cb164dbb..fd6af02f8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java @@ -114,7 +114,7 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { // Example: our delta is 5, we extracted 3 items. // That means we still have to autocraft 2 items. - delta -= result.isEmpty() ? 0 : result.getCount(); + delta -= result.getCount(); if (delta > 0 && upgrades.hasUpgrade(UpgradeItem.Type.CRAFTING)) { network.getCraftingManager().request(new SlottedCraftingRequest(this, i), wanted, delta); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java index 93e91c290..efdca6c10 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java @@ -289,9 +289,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab FluidStack remainder = network.insertFluid(extracted, extracted.getAmount(), Action.PERFORM); - if (remainder != null) { - storage.insert(remainder, remainder.getAmount(), Action.PERFORM); - } + storage.insert(remainder, remainder.getAmount(), Action.PERFORM); } private boolean isFluidDiskDone(IStorageDisk storage, int slot) { @@ -319,7 +317,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab } FluidStack remainder = network.insertFluid(extracted, extracted.getAmount(), Action.SIMULATE); - if (remainder == null) { // A fluid could be inserted (no remainders when trying to). This disk isn't done. + if (remainder.isEmpty()) { // A fluid could be inserted (no remainders when trying to). This disk isn't done. return false; } } @@ -327,7 +325,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab } private void extractFluidFromNetwork(IStorageDisk storage, int slot) { - FluidStack extracted = null; + FluidStack extracted = FluidStack.EMPTY; int i = 0; if (fluidFilters.isEmpty()) { @@ -357,16 +355,14 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab } } - if (extracted == null) { + if (extracted.isEmpty()) { moveDriveToOutput(slot); return; } FluidStack remainder = storage.insert(extracted, extracted.getAmount(), Action.PERFORM); - if (!remainder.isEmpty()) { - network.insertFluid(remainder, remainder.getAmount(), Action.PERFORM); - } + network.insertFluid(remainder, remainder.getAmount(), Action.PERFORM); } private void moveDriveToOutput(int slot) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/ControllerTile.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/ControllerTile.java index 6c51ad795..a94b9fbc6 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/ControllerTile.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/ControllerTile.java @@ -400,8 +400,13 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe @Override + @Nonnull public FluidStack insertFluid(@Nonnull FluidStack stack, int size, Action action) { - if (stack == null || fluidStorage.getStorages().isEmpty()) { + if (stack.isEmpty()) { + return stack; + } + + if (fluidStorage.getStorages().isEmpty()) { return StackUtils.copy(stack, size); } @@ -448,16 +453,16 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe fluidStorage.add(stack, inserted - insertedExternally, false, false); } - // TODO Remove. - if (remainder.isEmpty()) { - remainder = null; - } - return remainder; } @Override + @Nonnull public FluidStack extractFluid(@Nonnull FluidStack stack, int size, int flags, Action action, Predicate> filter) { + if (stack.isEmpty()) { + return stack; + } + int requested = size; int received = 0; @@ -498,11 +503,6 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe fluidStorage.remove(newStack, newStack.getAmount() - extractedExternally, false); } - // TODO Remove. - if (newStack.isEmpty()) { - newStack = null; - } - return newStack; }