From 12ddca4973ff1d36c04be46edb87aad25bf00945 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 14 Aug 2016 20:46:04 +0200 Subject: [PATCH] Insert stuff in fluid interface --- .../network/grid/FluidGridHandler.java | 16 +++++-------- .../apiimpl/storage/fluid/FluidUtils.java | 14 +++++++++++ .../inventory/ItemHandlerFluid.java | 7 +++--- .../refinedstorage/tile/TileConstructor.java | 1 - .../tile/TileFluidInterface.java | 24 ++++++++++++++++++- 5 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index b1b092987..abe949063 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -7,11 +7,11 @@ 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.IFluidHandler; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.api.storage.CompareUtils; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; import javax.annotation.Nullable; @@ -46,7 +46,7 @@ public class FluidGridHandler implements IFluidGridHandler { } if (bucket != null) { - bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, stack, 1000), true); + bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, stack, Fluid.BUCKET_VOLUME), true); if (shift) { if (!player.inventory.addItemStackToInventory(bucket.copy())) { @@ -63,16 +63,12 @@ public class FluidGridHandler implements IFluidGridHandler { @Nullable @Override public ItemStack onInsert(ItemStack container) { - if (container.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) { - IFluidHandler handler = container.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); + FluidStack stack = FluidUtils.getFluidFromStack(container, true); - FluidStack drainPre = handler.drain(Fluid.BUCKET_VOLUME, false); + if (stack != null && network.insertFluid(stack, stack.amount, true) == null) { + FluidStack drained = FluidUtils.getFluidFromStack(container, false); - if (drainPre != null && network.insertFluid(drainPre, drainPre.amount, true) == null) { - FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true); - - network.insertFluid(drain, drain.amount, false); - } + network.insertFluid(drained, drained.amount, false); } return container; diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java index 2a84f3dac..382d62173 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java @@ -1,6 +1,10 @@ package refinedstorage.apiimpl.storage.fluid; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; public final class FluidUtils { public static FluidStack copyStackWithSize(FluidStack stack, int size) { @@ -8,4 +12,14 @@ public final class FluidUtils { copy.amount = size; return copy; } + + 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); + } else if (stack.getItem() instanceof IFluidContainerItem) { + return ((IFluidContainerItem) stack.getItem()).drain(stack, Fluid.BUCKET_VOLUME, !simulate); + } + + return null; + } } diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java b/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java index d0014bf4f..20f370abf 100755 --- a/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java @@ -2,15 +2,14 @@ package refinedstorage.inventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; public class ItemHandlerFluid extends ItemHandlerBasic { private FluidStack[] fluids; public ItemHandlerFluid(int size, TileEntity tile) { - super(size, tile, (IItemValidator) s -> s.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null) && s.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false) != null); + super(size, tile, s -> FluidUtils.getFluidFromStack(s, true) != null); this.fluids = new FluidStack[size]; } @@ -24,7 +23,7 @@ public class ItemHandlerFluid extends ItemHandlerBasic { if (stack == null) { fluids[slot] = null; } else { - fluids[slot] = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false); + fluids[slot] = FluidUtils.getFluidFromStack(stack, false); } } diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 9939502d8..2edd39de0 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -99,7 +99,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I Block block = stack.getFluid().getBlock(); - if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) { FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); diff --git a/src/main/java/refinedstorage/tile/TileFluidInterface.java b/src/main/java/refinedstorage/tile/TileFluidInterface.java index 67266764d..20e7fe944 100755 --- a/src/main/java/refinedstorage/tile/TileFluidInterface.java +++ b/src/main/java/refinedstorage/tile/TileFluidInterface.java @@ -1,5 +1,6 @@ package refinedstorage.tile; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; @@ -8,6 +9,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import refinedstorage.RefinedStorage; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; @@ -68,7 +70,7 @@ public class TileFluidInterface extends TileNode implements IComparable { } }; - private ItemHandlerBasic in = new ItemHandlerBasic(1, this); + private ItemHandlerBasic in = new ItemHandlerBasic(1, this, s -> FluidUtils.getFluidFromStack(s, true) != null); private ItemHandlerFluid out = new ItemHandlerFluid(1, this); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); @@ -87,7 +89,27 @@ public class TileFluidInterface extends TileNode implements IComparable { @Override public void updateNode() { + ItemStack container = in.getStackInSlot(0); + + if (container != null) { + FluidStack fluid = FluidUtils.getFluidFromStack(container, true); + + if (fluid != null && tankIn.fillInternal(fluid, false) == fluid.amount) { + tankIn.fillInternal(FluidUtils.getFluidFromStack(container, false), true); + } + } + if (ticks % upgrades.getSpeed() == 0) { + FluidStack drained = tankIn.drainInternal(Fluid.BUCKET_VOLUME, true); + + if (drained != null) { + FluidStack remainder = network.insertFluid(drained, drained.amount, false); + + if (remainder != null) { + tankIn.fillInternal(remainder, true); + } + } + FluidStack stack = out.getFluids()[0]; if (tankOut.getFluid() != null && (stack == null || (tankOut.getFluid().getFluid() != stack.getFluid()))) {