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.Fluid;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
import refinedstorage.api.network.NetworkUtils;
|
import refinedstorage.api.network.NetworkUtils;
|
||||||
import refinedstorage.api.network.grid.IFluidGridHandler;
|
import refinedstorage.api.network.grid.IFluidGridHandler;
|
||||||
import refinedstorage.api.storage.CompareUtils;
|
import refinedstorage.api.storage.CompareUtils;
|
||||||
|
import refinedstorage.apiimpl.storage.fluid.FluidUtils;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ public class FluidGridHandler implements IFluidGridHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (bucket != null) {
|
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 (shift) {
|
||||||
if (!player.inventory.addItemStackToInventory(bucket.copy())) {
|
if (!player.inventory.addItemStackToInventory(bucket.copy())) {
|
||||||
@@ -63,16 +63,12 @@ public class FluidGridHandler implements IFluidGridHandler {
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public ItemStack onInsert(ItemStack container) {
|
public ItemStack onInsert(ItemStack container) {
|
||||||
if (container.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) {
|
FluidStack stack = FluidUtils.getFluidFromStack(container, true);
|
||||||
IFluidHandler handler = container.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null);
|
|
||||||
|
|
||||||
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) {
|
network.insertFluid(drained, drained.amount, false);
|
||||||
FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true);
|
|
||||||
|
|
||||||
network.insertFluid(drain, drain.amount, false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return container;
|
return container;
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
package refinedstorage.apiimpl.storage.fluid;
|
package refinedstorage.apiimpl.storage.fluid;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraftforge.fluids.Fluid;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
|
import net.minecraftforge.fluids.IFluidContainerItem;
|
||||||
|
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||||
|
|
||||||
public final class FluidUtils {
|
public final class FluidUtils {
|
||||||
public static FluidStack copyStackWithSize(FluidStack stack, int size) {
|
public static FluidStack copyStackWithSize(FluidStack stack, int size) {
|
||||||
@@ -8,4 +12,14 @@ public final class FluidUtils {
|
|||||||
copy.amount = size;
|
copy.amount = size;
|
||||||
return copy;
|
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.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraftforge.fluids.Fluid;
|
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
import refinedstorage.apiimpl.storage.fluid.FluidUtils;
|
||||||
|
|
||||||
public class ItemHandlerFluid extends ItemHandlerBasic {
|
public class ItemHandlerFluid extends ItemHandlerBasic {
|
||||||
private FluidStack[] fluids;
|
private FluidStack[] fluids;
|
||||||
|
|
||||||
public ItemHandlerFluid(int size, TileEntity tile) {
|
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];
|
this.fluids = new FluidStack[size];
|
||||||
}
|
}
|
||||||
@@ -24,7 +23,7 @@ public class ItemHandlerFluid extends ItemHandlerBasic {
|
|||||||
if (stack == null) {
|
if (stack == null) {
|
||||||
fluids[slot] = null;
|
fluids[slot] = null;
|
||||||
} else {
|
} 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();
|
Block block = stack.getFluid().getBlock();
|
||||||
|
|
||||||
|
|
||||||
if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) {
|
if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) {
|
||||||
FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare);
|
FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package refinedstorage.tile;
|
package refinedstorage.tile;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
@@ -8,6 +9,7 @@ import net.minecraftforge.fluids.FluidStack;
|
|||||||
import net.minecraftforge.fluids.FluidTank;
|
import net.minecraftforge.fluids.FluidTank;
|
||||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
|
import refinedstorage.apiimpl.storage.fluid.FluidUtils;
|
||||||
import refinedstorage.inventory.ItemHandlerBasic;
|
import refinedstorage.inventory.ItemHandlerBasic;
|
||||||
import refinedstorage.inventory.ItemHandlerFluid;
|
import refinedstorage.inventory.ItemHandlerFluid;
|
||||||
import refinedstorage.inventory.ItemHandlerUpgrade;
|
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 ItemHandlerFluid out = new ItemHandlerFluid(1, this);
|
||||||
|
|
||||||
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED);
|
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED);
|
||||||
@@ -87,7 +89,27 @@ public class TileFluidInterface extends TileNode implements IComparable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateNode() {
|
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) {
|
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];
|
FluidStack stack = out.getFluids()[0];
|
||||||
|
|
||||||
if (tankOut.getFluid() != null && (stack == null || (tankOut.getFluid().getFluid() != stack.getFluid()))) {
|
if (tankOut.getFluid() != null && (stack == null || (tankOut.getFluid().getFluid() != stack.getFluid()))) {
|
||||||
|
|||||||
Reference in New Issue
Block a user