From e65fb4b7cf15d92e09d76ec9c38433d33deac273 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 27 Nov 2016 13:48:47 +0100 Subject: [PATCH] Fix more bugs --- .../raoulvdberge/refinedstorage/RSUtils.java | 27 ++++++++----------- .../autocrafting/task/CraftingStep.java | 4 +-- .../autocrafting/task/CraftingTask.java | 2 +- .../network/grid/FluidGridHandler.java | 22 +++++++++------ .../inventory/ItemHandlerFluid.java | 4 +-- .../refinedstorage/tile/TileDiskDrive.java | 2 +- .../tile/TileFluidInterface.java | 11 +++++--- 7 files changed, 39 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java index 19cecb5c1..b2ec920e3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java @@ -29,6 +29,7 @@ import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; @@ -81,7 +82,7 @@ public final class RSUtils { } public static void createStorages(ItemStack disk, int slot, ItemStorageNBT[] itemStorages, FluidStorageNBT[] fluidStorages, Function itemStorageSupplier, Function fluidStorageNBTSupplier) { - if (disk == null) { + if (disk.isEmpty()) { itemStorages[slot] = null; fluidStorages[slot] = null; } else { @@ -239,26 +240,20 @@ public final class RSUtils { return handler; } - @SuppressWarnings("deprecation") public static IFluidHandler getFluidHandler(TileEntity tile, EnumFacing side) { - if (tile == null) { - return null; - } - - if (!tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { - return null; - } - - return tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); + return (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) ? tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side) : null; } - @SuppressWarnings("deprecation") - public static FluidStack getFluidFromStack(ItemStack stack, boolean simulate) { - if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) { - return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, !simulate); + public static Pair getFluidFromStack(ItemStack stack, boolean simulate) { + if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) { + IFluidHandlerItem fluidHandler = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); + + FluidStack result = fluidHandler.drain(Fluid.BUCKET_VOLUME, !simulate); + + return Pair.of(fluidHandler.getContainer(), result); } - return null; + return Pair.of(null, null); } public static boolean hasFluidBucket(FluidStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java index bb1e0a7a5..4517db81f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java @@ -164,7 +164,7 @@ public abstract class CraftingStep implements ICraftingStep { protected AvailableType isItemAvailable(IItemStackList items, IFluidStackList fluids, ItemStack stack, ItemStack actualStack, int compare) { if (actualStack == null || actualStack.getCount() == 0 || !items.trackedRemove(actualStack, stack.getCount(), true)) { - FluidStack fluidInItem = RSUtils.getFluidFromStack(stack, true); + FluidStack fluidInItem = RSUtils.getFluidFromStack(stack, true).getValue(); if (fluidInItem != null && RSUtils.hasFluidBucket(fluidInItem)) { FluidStack fluidStack = fluids.get(fluidInItem, compare); @@ -192,7 +192,7 @@ public abstract class CraftingStep implements ICraftingStep { actualInputs.add(input); } else { boolean abort = true; - FluidStack fluidInItem = RSUtils.getFluidFromStack(insertStack, true); + FluidStack fluidInItem = RSUtils.getFluidFromStack(insertStack, true).getValue(); if (fluidInItem != null) { FluidStack fluidStack = network.extractFluid(fluidInItem, fluidInItem.amount, compare, false); ItemStack bucketStack = network.extractItem(RSUtils.EMPTY_BUCKET, 1, compare, false); 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 18e52b35d..10d3221d8 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 @@ -239,7 +239,7 @@ public class CraftingTask implements ICraftingTask { } private boolean doFluidCalculation(IItemStackList networkList, IFluidStackList networkFluidList, ItemStack input, IItemStackList toInsert) { - FluidStack fluidInItem = RSUtils.getFluidFromStack(input, true); + FluidStack fluidInItem = RSUtils.getFluidFromStack(input, true).getValue(); if (fluidInItem != null && RSUtils.hasFluidBucket(fluidInItem)) { FluidStack fluidInStorage = networkFluidList.get(fluidInItem); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index aae98e9f5..e7e0988e1 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -10,6 +10,8 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import org.apache.commons.lang3.tuple.Pair; import javax.annotation.Nullable; @@ -46,14 +48,16 @@ public class FluidGridHandler implements IFluidGridHandler { } if (bucket != null) { - bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(network.extractFluid(stack, Fluid.BUCKET_VOLUME, false), true); + IFluidHandlerItem fluidHandler = bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); + + fluidHandler.fill(network.extractFluid(stack, Fluid.BUCKET_VOLUME, false), true); if (shift) { - if (!player.inventory.addItemStackToInventory(bucket.copy())) { - InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), bucket); + if (!player.inventory.addItemStackToInventory(fluidHandler.getContainer().copy())) { + InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), fluidHandler.getContainer()); } } else { - player.inventory.setItemStack(bucket); + player.inventory.setItemStack(fluidHandler.getContainer()); player.updateHeldItem(); } } @@ -63,12 +67,14 @@ public class FluidGridHandler implements IFluidGridHandler { @Nullable @Override public ItemStack onInsert(ItemStack container) { - FluidStack stack = RSUtils.getFluidFromStack(container, true); + Pair result = RSUtils.getFluidFromStack(container, true); - if (stack != null && network.insertFluid(stack, stack.amount, true) == null) { - FluidStack drained = RSUtils.getFluidFromStack(container, false); + if (result.getValue() != null && network.insertFluid(result.getValue(), result.getValue().amount, true) == null) { + result = RSUtils.getFluidFromStack(container, false); - network.insertFluid(drained, drained.amount, false); + network.insertFluid(result.getValue(), result.getValue().amount, false); + + return result.getLeft(); } return container; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFluid.java index d7d4a2bfc..90c70a5e9 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerFluid.java @@ -10,7 +10,7 @@ public class ItemHandlerFluid extends ItemHandlerBasic { private FluidStack[] fluids; public ItemHandlerFluid(int size, TileEntity tile) { - super(size, tile, s -> RSUtils.getFluidFromStack(ItemHandlerHelper.copyStackWithSize(s, 1), true) != null); + super(size, tile, s -> RSUtils.getFluidFromStack(ItemHandlerHelper.copyStackWithSize(s, 1), true).getValue() != null); this.fluids = new FluidStack[size]; } @@ -24,7 +24,7 @@ public class ItemHandlerFluid extends ItemHandlerBasic { if (stack.isEmpty()) { fluids[slot] = null; } else { - fluids[slot] = RSUtils.getFluidFromStack(ItemHandlerHelper.copyStackWithSize(stack, 1), true); + fluids[slot] = RSUtils.getFluidFromStack(ItemHandlerHelper.copyStackWithSize(stack, 1), true).getValue(); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java index 21978011c..8cf305ee8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDiskDrive.java @@ -395,7 +395,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl public static int getDiskState(int stored, int capacity) { if (stored == capacity) { return DISK_STATE_FULL; - } else if ((int) ((float) stored / (float) capacity * 100F) > 85) { + } else if ((int) ((float) stored / (float) capacity * 100F) >= 85) { return DISK_STATE_NEAR_CAPACITY; } else { return DISK_STATE_NORMAL; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidInterface.java index 7e1aab164..6667d6f42 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidInterface.java @@ -19,6 +19,7 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import org.apache.commons.lang3.tuple.Pair; public class TileFluidInterface extends TileNode implements IComparable { public static final int TANK_CAPACITY = 16000; @@ -93,10 +94,14 @@ public class TileFluidInterface extends TileNode implements IComparable { ItemStack container = in.getStackInSlot(0); if (!container.isEmpty()) { - FluidStack fluid = RSUtils.getFluidFromStack(container, true); + Pair result = RSUtils.getFluidFromStack(container, true); - if (fluid != null && tankIn.fillInternal(fluid, false) == fluid.amount) { - tankIn.fillInternal(RSUtils.getFluidFromStack(container, false), true); + if (result.getValue() != null && tankIn.fillInternal(result.getValue(), false) == result.getValue().amount) { + result = RSUtils.getFluidFromStack(container, false); + + tankIn.fillInternal(result.getValue(), true); + + in.setStackInSlot(0, result.getLeft()); } }