public class FluidUtil
extends java.lang.Object
Modifier | Constructor and Description |
---|---|
private |
FluidUtil() |
Modifier and Type | Method and Description |
---|---|
static void |
destroyBlockOnFluidPlacement(World world,
BlockPos pos)
Destroys a block when a fluid is placed in the same position.
|
static ItemStack |
getFilledBucket(FluidStack fluidStack) |
private static IFluidHandler |
getFluidBlockHandler(Fluid fluid,
World world,
BlockPos pos)
Internal method for getting a fluid block handler for placing a fluid.
|
static LazyOptional<FluidStack> |
getFluidContained(ItemStack container)
Helper method to get the fluid contained in an itemStack
|
static LazyOptional<IFluidHandlerItem> |
getFluidHandler(ItemStack itemStack)
Helper method to get an
IFluidHandlerItem for an itemStack. |
static LazyOptional<IFluidHandler> |
getFluidHandler(World world,
BlockPos blockPos,
Direction side)
Helper method to get an IFluidHandler for at a block position.
|
static boolean |
interactWithFluidHandler(PlayerEntity player,
Hand hand,
IFluidHandler handler)
Used to handle the common case of a player holding a fluid item and right-clicking on a fluid handler.
|
static boolean |
interactWithFluidHandler(PlayerEntity player,
Hand hand,
World world,
BlockPos pos,
Direction side)
Used to handle the common case of a player holding a fluid item and right-clicking on a fluid handler block.
|
static FluidActionResult |
tryEmptyContainer(ItemStack container,
IFluidHandler fluidDestination,
int maxAmount,
PlayerEntity player,
boolean doDrain)
Takes a filled container and tries to empty it into the given tank.
|
static FluidActionResult |
tryEmptyContainerAndStow(ItemStack container,
IFluidHandler fluidDestination,
IItemHandler inventory,
int maxAmount,
PlayerEntity player,
boolean doDrain)
Takes an Fluid Container Item, tries to empty it into the fluid handler, and stows it in the given inventory.
|
static FluidActionResult |
tryFillContainer(ItemStack container,
IFluidHandler fluidSource,
int maxAmount,
PlayerEntity player,
boolean doFill)
Fill a container from the given fluidSource.
|
static FluidActionResult |
tryFillContainerAndStow(ItemStack container,
IFluidHandler fluidSource,
IItemHandler inventory,
int maxAmount,
PlayerEntity player,
boolean doFill)
Takes an Fluid Container Item and tries to fill it from the given tank.
|
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.
|
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.
|
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.
|
static FluidActionResult |
tryPickUpFluid(ItemStack emptyContainer,
PlayerEntity playerIn,
World worldIn,
BlockPos pos,
Direction side)
Attempts to pick up a fluid in the world and put it in an empty container item.
|
static boolean |
tryPlaceFluid(PlayerEntity player,
World world,
Hand hand,
BlockPos pos,
IFluidHandler fluidSource,
FluidStack resource)
Tries to place a fluid resource into the world as a block and drains the fluidSource.
|
static FluidActionResult |
tryPlaceFluid(PlayerEntity player,
World world,
Hand hand,
BlockPos pos,
ItemStack container,
FluidStack resource)
ItemStack version of
#tryPlaceFluid(PlayerEntity, World, BlockPos, IFluidHandler, FluidStack) . |
public static boolean interactWithFluidHandler(@Nonnull PlayerEntity player, @Nonnull Hand hand, @Nonnull World world, @Nonnull BlockPos pos, @Nullable Direction side)
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.world
- The world that contains the fluid handler block.pos
- The position of the fluid handler block in the world.side
- The side of the block to interact with. May be null.public static boolean interactWithFluidHandler(@Nonnull PlayerEntity player, @Nonnull Hand hand, @Nonnull IFluidHandler handler)
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.@Nonnull public static FluidActionResult tryFillContainer(@Nonnull ItemStack container, IFluidHandler fluidSource, int maxAmount, @Nullable PlayerEntity player, boolean doFill)
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, PlayerEntity, 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.FluidActionResult
holding the filled container if successful.@Nonnull public static FluidActionResult tryEmptyContainer(@Nonnull ItemStack container, IFluidHandler fluidDestination, int maxAmount, @Nullable PlayerEntity player, boolean doDrain)
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, PlayerEntity, 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.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.@Nonnull public static FluidActionResult tryFillContainerAndStow(@Nonnull ItemStack container, IFluidHandler fluidSource, IItemHandler inventory, int maxAmount, @Nullable PlayerEntity player, boolean doFill)
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 frominventory
- An inventory where any additionally created item (filled container if multiple empty are present) are putmaxAmount
- 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.FluidActionResult
holding the result and the resulting container. The resulting container is empty on failure.@Nonnull public static FluidActionResult tryEmptyContainerAndStow(@Nonnull ItemStack container, IFluidHandler fluidDestination, IItemHandler inventory, int maxAmount, @Nullable PlayerEntity player, boolean doDrain)
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 putmaxAmount
- 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.FluidActionResult
holding the result and the resulting container. The resulting container is empty on failure.@Nonnull public static FluidStack tryFluidTransfer(IFluidHandler fluidDestination, IFluidHandler fluidSource, int maxAmount, boolean doTransfer)
tryFluidTransfer(IFluidHandler, IFluidHandler, FluidStack, boolean)
To transfer as much as possible, use Integer.MAX_VALUE
for maxAmount.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.@Nonnull public static FluidStack tryFluidTransfer(IFluidHandler fluidDestination, IFluidHandler fluidSource, FluidStack resource, boolean doTransfer)
tryFluidTransfer(IFluidHandler, IFluidHandler, int, boolean)
To transfer as much as possible, use Integer.MAX_VALUE
for resource.amount.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.@Nonnull private static FluidStack tryFluidTransfer_Internal(IFluidHandler fluidDestination, IFluidHandler fluidSource, FluidStack drainable, boolean doTransfer)
tryFluidTransfer(IFluidHandler, IFluidHandler, FluidStack, boolean)
or tryFluidTransfer(IFluidHandler, IFluidHandler, int, boolean)
.public static LazyOptional<IFluidHandlerItem> getFluidHandler(@Nonnull ItemStack itemStack)
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.public static LazyOptional<FluidStack> getFluidContained(@Nonnull ItemStack container)
public static LazyOptional<IFluidHandler> getFluidHandler(World world, BlockPos blockPos, @Nullable Direction side)
@Nonnull public static FluidActionResult tryPickUpFluid(@Nonnull ItemStack emptyContainer, @Nullable PlayerEntity playerIn, World worldIn, BlockPos pos, Direction side)
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.worldIn
- The world the fluid is in.pos
- The position of the fluid in the world.side
- The side of the fluid that is being drained.FluidActionResult
holding the result and the resulting container.@Nonnull public static FluidActionResult tryPlaceFluid(@Nullable PlayerEntity player, World world, Hand hand, BlockPos pos, @Nonnull ItemStack container, FluidStack resource)
#tryPlaceFluid(PlayerEntity, World, BlockPos, IFluidHandler, FluidStack)
.
Use the returned FluidActionResult
to update the container ItemStack.player
- Player who places the fluid. May be null for blocks like dispensers.world
- World to place the fluid inhand
- pos
- The position in the world to place the fluid blockcontainer
- The fluid container holding the fluidStack to placeresource
- The fluidStack to placepublic static boolean tryPlaceFluid(@Nullable PlayerEntity player, World world, Hand hand, BlockPos pos, IFluidHandler fluidSource, FluidStack resource)
ItemBucket#tryPlaceContainedLiquid(PlayerEntity, World, BlockPos)
player
- Player who places the fluid. May be null for blocks like dispensers.world
- World to place the fluid inhand
- pos
- The position in the world to place the fluid blockfluidSource
- The fluid source holding the fluidStack to placeresource
- The fluidStack to place.private static IFluidHandler getFluidBlockHandler(Fluid fluid, World world, BlockPos pos)
#tryPlaceFluid(PlayerEntity, World, BlockPos, ItemStack, FluidStack)
or #tryPlaceFluid(PlayerEntity, World, BlockPos, IFluidHandler, FluidStack)
public static void destroyBlockOnFluidPlacement(World world, BlockPos pos)
ItemBucket#tryPlaceContainedLiquid(PlayerEntity, World, BlockPos)
This is a helper method for implementing IFluidBlock#place(World, BlockPos, FluidStack, boolean)
.world
- the world that the fluid will be placed inpos
- the location that the fluid will be placed@Nonnull public static ItemStack getFilledBucket(@Nonnull FluidStack fluidStack)
fluidStack
- contents used to fill the bucket.
FluidStack is used instead of Fluid to preserve fluid NBT, the amount is ignored.