Class FluidUtil

java.lang.Object
net.neoforged.neoforge.fluids.FluidUtil

public class FluidUtil extends Object
  • Constructor Details

    • FluidUtil

      private FluidUtil()
  • Method Details

    • interactWithFluidHandler

      public static boolean interactWithFluidHandler(Player player, InteractionHand hand, Level level, BlockPos pos, @Nullable @Nullable Direction side)
      Used to handle the common case of a player holding a fluid item and right-clicking on a fluid handler block. First it tries to fill the item from the block, if that action fails then it tries to drain the item into the block. Automatically updates the item in the player's hand and stashes any extra items created.
      Parameters:
      player - The player doing the interaction between the item and fluid handler block.
      hand - The player's hand that is holding an item that should interact with the fluid handler block.
      level - The level that contains the fluid handler block.
      pos - The position of the fluid handler block in the level.
      side - The side of the block to interact with. May be null.
      Returns:
      true if the interaction succeeded and updated the item held by the player, false otherwise.
    • interactWithFluidHandler

      public static boolean interactWithFluidHandler(Player player, InteractionHand hand, IFluidHandler handler)
      Used to handle the common case of a player holding a fluid item and right-clicking on a fluid handler. First it tries to fill the item from the handler, if that action fails then it tries to drain the item into the handler. Automatically updates the item in the player's hand and stashes any extra items created.
      Parameters:
      player - The player doing the interaction between the item and fluid handler.
      hand - The player's hand that is holding an item that should interact with the fluid handler.
      handler - The fluid handler.
      Returns:
      true if the interaction succeeded and updated the item held by the player, false otherwise.
    • tryFillContainer

      public static FluidActionResult tryFillContainer(ItemStack container, IFluidHandler fluidSource, int maxAmount, @Nullable @Nullable Player player, boolean doFill)
      Fill a container from the given fluidSource.
      Parameters:
      container - The container to be filled. Will not be modified. Separate handling must be done to reduce the stack size, stow containers, etc, on success. See tryFillContainerAndStow(ItemStack, IFluidHandler, IItemHandler, int, Player, boolean).
      fluidSource - The fluid handler to be drained.
      maxAmount - The largest amount of fluid that should be transferred.
      player - The player to make the filling noise. Pass null for no noise.
      doFill - true if the container should actually be filled, false if it should be simulated.
      Returns:
      a FluidActionResult holding the filled container if successful.
    • tryEmptyContainer

      public static FluidActionResult tryEmptyContainer(ItemStack container, IFluidHandler fluidDestination, int maxAmount, @Nullable @Nullable Player player, boolean doDrain)
      Takes a filled container and tries to empty it into the given tank.
      Parameters:
      container - The filled container. Will not be modified. Separate handling must be done to reduce the stack size, stow containers, etc, on success. See tryEmptyContainerAndStow(ItemStack, IFluidHandler, IItemHandler, int, Player, boolean).
      fluidDestination - The fluid handler to be filled by the container.
      maxAmount - The largest amount of fluid that should be transferred.
      player - Player for making the bucket drained sound. Pass null for no noise.
      doDrain - true if the container should actually be drained, false if it should be simulated.
      Returns:
      a FluidActionResult holding the empty container if the fluid handler was filled. NOTE If the container is consumable, the empty container will be null on success.
    • tryFillContainerAndStow

      public static FluidActionResult tryFillContainerAndStow(ItemStack container, IFluidHandler fluidSource, IItemHandler inventory, int maxAmount, @Nullable @Nullable Player player, boolean doFill)
      Takes an Fluid Container Item and tries to fill it from the given tank. If the player is in creative mode, the container will not be modified on success, and no additional items created. If the input itemstack has a stacksize > 1 it will stow the filled container in the given inventory. If the inventory does not accept it, it will be given to the player or dropped at the players feet. If player is null in this case, the action will be aborted.
      Parameters:
      container - The Fluid Container ItemStack to fill. Will not be modified directly, if modifications are necessary a modified copy is returned in the result.
      fluidSource - The fluid source to fill from
      inventory - An inventory where any additionally created item (filled container if multiple empty are present) are put
      maxAmount - Maximum amount of fluid to take from the tank.
      player - The player that gets the items the inventory can't take. Can be null, only used if the inventory cannot take the filled stack.
      doFill - true if the container should actually be filled, false if it should be simulated.
      Returns:
      a FluidActionResult holding the result and the resulting container. The resulting container is empty on failure.
    • tryEmptyContainerAndStow

      public static FluidActionResult tryEmptyContainerAndStow(ItemStack container, IFluidHandler fluidDestination, IItemHandler inventory, int maxAmount, @Nullable @Nullable Player player, boolean doDrain)
      Takes an Fluid Container Item, tries to empty it into the fluid handler, and stows it in the given inventory. If the player is in creative mode, the container will not be modified on success, and no additional items created. If the input itemstack has a stacksize > 1 it will stow the emptied container in the given inventory. If the inventory does not accept the emptied container, it will be given to the player or dropped at the players feet. If player is null in this case, the action will be aborted.
      Parameters:
      container - The filled Fluid Container Itemstack to empty. Will not be modified directly, if modifications are necessary a modified copy is returned in the result.
      fluidDestination - The fluid destination to fill from the fluid container.
      inventory - An inventory where any additionally created item (filled container if multiple empty are present) are put
      maxAmount - Maximum amount of fluid to take from the tank.
      player - The player that gets the items the inventory can't take. Can be null, only used if the inventory cannot take the filled stack.
      doDrain - true if the container should actually be drained, false if it should be simulated.
      Returns:
      a FluidActionResult holding the result and the resulting container. The resulting container is empty on failure.
    • tryFluidTransfer

      public static FluidStack tryFluidTransfer(IFluidHandler fluidDestination, IFluidHandler fluidSource, int maxAmount, boolean doTransfer)
      Fill a destination fluid handler from a source fluid handler with a max amount. To specify a fluid to transfer instead of max amount, use tryFluidTransfer(IFluidHandler, IFluidHandler, FluidStack, boolean) To transfer as much as possible, use Integer.MAX_VALUE for maxAmount.
      Parameters:
      fluidDestination - The fluid handler to be filled.
      fluidSource - The fluid handler to be drained.
      maxAmount - The largest amount of fluid that should be transferred.
      doTransfer - True if the transfer should actually be done, false if it should be simulated.
      Returns:
      the fluidStack that was transferred from the source to the destination. null on failure.
    • tryFluidTransfer

      public static FluidStack tryFluidTransfer(IFluidHandler fluidDestination, IFluidHandler fluidSource, FluidStack resource, boolean doTransfer)
      Fill a destination fluid handler from a source fluid handler using a specific fluid. To specify a max amount to transfer instead of specific fluid, use tryFluidTransfer(IFluidHandler, IFluidHandler, int, boolean) To transfer as much as possible, use Integer.MAX_VALUE for resource.amount.
      Parameters:
      fluidDestination - The fluid handler to be filled.
      fluidSource - The fluid handler to be drained.
      resource - The fluid that should be transferred. Amount represents the maximum amount to transfer.
      doTransfer - True if the transfer should actually be done, false if it should be simulated.
      Returns:
      the fluidStack that was transferred from the source to the destination. null on failure.
    • tryFluidTransfer_Internal

      private static FluidStack tryFluidTransfer_Internal(IFluidHandler fluidDestination, IFluidHandler fluidSource, FluidStack drainable, boolean doTransfer)
      Internal method for filling a destination fluid handler from a source fluid handler using a specific fluid. Assumes that "drainable" can be drained from "fluidSource". Modders: Instead of this method, use tryFluidTransfer(IFluidHandler, IFluidHandler, FluidStack, boolean) or tryFluidTransfer(IFluidHandler, IFluidHandler, int, boolean).
    • getFluidHandler

      public static Optional<IFluidHandlerItem> getFluidHandler(ItemStack itemStack)
      Helper method to get an IFluidHandlerItem for an itemStack. The itemStack passed in here WILL be modified, the IFluidHandlerItem acts on it directly. Some IFluidHandlerItem will change the item entirely, always use IFluidHandlerItem.getContainer() after using the fluid handler to get the resulting item back. Note that the itemStack MUST have a stackSize of 1 if you want to fill or drain it. You can't fill or drain multiple items at once, if you do then liquid is multiplied or destroyed. Vanilla buckets will be converted to universal buckets if they are enabled.
    • getFluidContained

      public static Optional<FluidStack> getFluidContained(ItemStack container)
      Helper method to get the fluid contained in an itemStack
    • getFluidHandler

      public static Optional<IFluidHandler> getFluidHandler(Level level, BlockPos blockPos, @Nullable @Nullable Direction side)
      Helper method to get an IFluidHandler for at a block position.
    • tryPickUpFluid

      public static FluidActionResult tryPickUpFluid(ItemStack emptyContainer, @Nullable @Nullable Player playerIn, Level level, BlockPos pos, Direction side)
      Attempts to pick up a fluid in the level and put it in an empty container item.
      Parameters:
      emptyContainer - The empty container to fill. Will not be modified directly, if modifications are necessary a modified copy is returned in the result.
      playerIn - The player filling the container. Optional.
      level - The level the fluid is in.
      pos - The position of the fluid in the level.
      side - The side of the fluid that is being drained.
      Returns:
      a FluidActionResult holding the result and the resulting container.
    • tryPlaceFluid

      public static FluidActionResult tryPlaceFluid(@Nullable @Nullable Player player, Level level, InteractionHand hand, BlockPos pos, ItemStack container, FluidStack resource)
      ItemStack version of tryPlaceFluid(Player, Level, InteractionHand, BlockPos, IFluidHandler, FluidStack). Use the returned FluidActionResult to update the container ItemStack.
      Parameters:
      player - Player who places the fluid. May be null for blocks like dispensers.
      level - Level to place the fluid in
      hand - hand of the player to place the fluid with
      pos - The position in the level to place the fluid block
      container - The fluid container holding the fluidStack to place
      resource - The fluidStack to place
      Returns:
      the container's ItemStack with the remaining amount of fluid if the placement was successful, null otherwise
    • tryPlaceFluid

      public static boolean tryPlaceFluid(@Nullable @Nullable Player player, Level level, InteractionHand hand, BlockPos pos, IFluidHandler fluidSource, FluidStack resource)
      Tries to place a fluid resource into the level as a block and drains the fluidSource. Makes a fluid emptying or vaporization sound when successful. Honors the amount of fluid contained by the used container. Checks if water-like fluids should vaporize like in the nether. Modeled after BucketItem.emptyContents(Player, Level, BlockPos, BlockHitResult)
      Parameters:
      player - Player who places the fluid. May be null for blocks like dispensers.
      level - Level to place the fluid in
      hand - hand of the player to place the fluid with
      pos - The position in the level to place the fluid block
      fluidSource - The fluid source holding the fluidStack to place
      resource - The fluidStack to place.
      Returns:
      true if the placement was successful, false otherwise
    • getFluidBlockHandler

      private static IFluidHandler getFluidBlockHandler(Fluid fluid, Level level, BlockPos pos)
      Internal method for getting a fluid block handler for placing a fluid. Modders: Instead of this method, use tryPlaceFluid(Player, Level, InteractionHand, BlockPos, ItemStack, FluidStack) or tryPlaceFluid(Player, Level, InteractionHand, BlockPos, IFluidHandler, FluidStack)
    • destroyBlockOnFluidPlacement

      public static void destroyBlockOnFluidPlacement(Level level, BlockPos pos)
      Destroys a block when a fluid is placed in the same position. Modeled after BucketItem.emptyContents(Player, Level, BlockPos, BlockHitResult)
      Parameters:
      level - the level that the fluid will be placed in
      pos - the location that the fluid will be placed
    • getFilledBucket

      public static ItemStack getFilledBucket(FluidStack fluidStack)
      Parameters:
      fluidStack - contents used to fill the bucket. FluidStack is used instead of Fluid to preserve fluid NBT, the amount is ignored.
      Returns:
      a filled vanilla bucket or filled universal bucket. Returns empty itemStack if none of the enabled buckets can hold the fluid.