Insert stuff in fluid interface
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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()))) {
|
||||
|
||||
Reference in New Issue
Block a user