Insert stuff in fluid interface

This commit is contained in:
Raoul Van den Berge
2016-08-14 20:46:04 +02:00
parent fd24960d8c
commit 12ddca4973
5 changed files with 46 additions and 16 deletions

View File

@@ -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;

View File

@@ -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;
}
} }

View File

@@ -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);
} }
} }

View File

@@ -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);

View File

@@ -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()))) {