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
	 Raoul Van den Berge
					Raoul Van den Berge