Class FluidStack

java.lang.Object
net.neoforged.neoforge.fluids.FluidStack
All Implemented Interfaces:
DataComponentHolder, IDataComponentHolderExtension, MutableDataComponentHolder

public final class FluidStack extends Object implements MutableDataComponentHolder
ItemStack equivalent for fluids. The main difference is that a fluid stack is always required to have an amount, while an item stack defaults to 1. Another difference is that the component prototype of a fluid stack is currently always empty, while an item stack gets its component prototype from the item.

Most methods in this class are adapted from ItemStack.

  • Field Details

    • FLUID_NON_EMPTY_CODEC

      public static final com.mojang.serialization.Codec<Holder<Fluid>> FLUID_NON_EMPTY_CODEC
    • CODEC

      public static final com.mojang.serialization.Codec<FluidStack> CODEC
      A standard codec for fluid stacks that does not accept empty stacks.
    • OPTIONAL_CODEC

      public static final com.mojang.serialization.Codec<FluidStack> OPTIONAL_CODEC
      A standard codec for fluid stacks that accepts empty stacks, serializing them as {}.
    • OPTIONAL_STREAM_CODEC

      public static final StreamCodec<RegistryFriendlyByteBuf,FluidStack> OPTIONAL_STREAM_CODEC
      A stream codec for fluid stacks that accepts empty stacks.
    • STREAM_CODEC

      public static final StreamCodec<RegistryFriendlyByteBuf,FluidStack> STREAM_CODEC
      A stream codec for fluid stacks that does not accept empty stacks.
    • LOGGER

      private static final org.slf4j.Logger LOGGER
    • EMPTY

      public static final FluidStack EMPTY
    • amount

      private int amount
    • fluid

      private final Fluid fluid
    • components

      private final PatchedDataComponentMap components
  • Constructor Details

  • Method Details

    • fixedAmountCodec

      public static com.mojang.serialization.Codec<FluidStack> fixedAmountCodec(int amount)
      A standard codec for fluid stacks that always deserializes with a fixed amount, and does not accept empty stacks.

      Fluid equivalent of ItemStack.SINGLE_ITEM_CODEC.

    • getComponents

      public PatchedDataComponentMap getComponents()
      Specified by:
      getComponents in interface DataComponentHolder
    • getComponentsPatch

      public DataComponentPatch getComponentsPatch()
    • isComponentsPatchEmpty

      public boolean isComponentsPatchEmpty()
    • parse

      public static Optional<FluidStack> parse(HolderLookup.Provider lookupProvider, Tag tag)
      Tries to parse a fluid stack. Empty stacks cannot be parsed with this method.
    • parseOptional

      public static FluidStack parseOptional(HolderLookup.Provider lookupProvider, CompoundTag tag)
      Tries to parse a fluid stack, defaulting to EMPTY on parsing failure.
    • isEmpty

      public boolean isEmpty()
      Checks if this fluid stack is empty.
    • split

      public FluidStack split(int amount)
      Splits off a stack of the given amount of this stack and reduces this stack by the amount.
    • copyAndClear

      public FluidStack copyAndClear()
      Creates a copy of this stack with 0 amount.
    • getFluid

      public Fluid getFluid()
      Returns the fluid in this stack, or Fluids.EMPTY if this stack is empty.
    • getFluidHolder

      public Holder<Fluid> getFluidHolder()
    • is

      public boolean is(TagKey<Fluid> tag)
    • is

      public boolean is(Fluid fluid)
    • is

      public boolean is(Predicate<Holder<Fluid>> holderPredicate)
    • is

      public boolean is(Holder<Fluid> holder)
    • is

      public boolean is(HolderSet<Fluid> holderSet)
    • getTags

      public Stream<TagKey<Fluid>> getTags()
    • save

      public Tag save(HolderLookup.Provider lookupProvider, Tag prefix)
      Saves this stack to a tag, directly writing the keys into the passed tag.
      Throws:
      IllegalStateException - if this stack is empty
    • save

      public Tag save(HolderLookup.Provider lookupProvider)
      Saves this stack to a new tag.
      Throws:
      IllegalStateException - if this stack is empty
    • saveOptional

      public Tag saveOptional(HolderLookup.Provider lookupProvider)
      Saves this stack to a new tag. Empty stacks are supported and will be saved as an empty tag.
    • copy

      public FluidStack copy()
      Creates a copy of this fluid stack.
    • copyWithAmount

      public FluidStack copyWithAmount(int amount)
      Creates a copy of this fluid stack with the given amount.
    • matches

      public static boolean matches(FluidStack first, FluidStack second)
      Checks if the two fluid stacks are equal. This checks the fluid, amount, and components.
      Returns:
      true if the two fluid stacks have equal fluid, amount, and components
    • isSameFluid

      public static boolean isSameFluid(FluidStack first, FluidStack second)
      Checks if the two fluid stacks have the same fluid. Ignores amount and components.
      Returns:
      true if the two fluid stacks have the same fluid
    • isSameFluidSameComponents

      public static boolean isSameFluidSameComponents(FluidStack first, FluidStack second)
      Checks if the two fluid stacks have the same fluid and components. Ignores amount.
      Returns:
      true if the two fluid stacks have the same fluid and components
    • lenientOtionalFieldOf

      public static com.mojang.serialization.MapCodec<FluidStack> lenientOtionalFieldOf(String fieldName)
    • hashFluidAndComponents

      public static int hashFluidAndComponents(@Nullable @Nullable FluidStack stack)
      Hashes the fluid and components of this stack, ignoring the amount.
    • getDescriptionId

      public String getDescriptionId()
      Returns the description id of this stack.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • set

      @Nullable public <T> T set(DataComponentType<? super T> type, @Nullable T component)
      Sets a data component.
      Specified by:
      set in interface MutableDataComponentHolder
    • remove

      @Nullable public <T> T remove(DataComponentType<? extends T> type)
      Removes a data component.
      Specified by:
      remove in interface MutableDataComponentHolder
    • applyComponents

      public void applyComponents(DataComponentPatch patch)
      Applies a set of component changes to this stack.
      Specified by:
      applyComponents in interface MutableDataComponentHolder
    • applyComponents

      public void applyComponents(DataComponentMap components)
      Applies a set of component changes to this stack.
      Specified by:
      applyComponents in interface MutableDataComponentHolder
    • getHoverName

      public Component getHoverName()
      Returns the hover name of this stack.
    • getAmount

      public int getAmount()
      Returns the amount of this stack.
    • setAmount

      public void setAmount(int amount)
      Sets the amount of this stack.
    • limitSize

      public void limitSize(int amount)
      Limits the amount of this stack is at most the given amount.
    • grow

      public void grow(int addedAmount)
      Adds the given amount to this stack.
    • shrink

      public void shrink(int removedAmount)
      Removes the given amount from this stack.
    • getFluidType

      public FluidType getFluidType()
      Returns the fluid type of this stack.
    • is

      public boolean is(FluidType fluidType)
      Check if the fluid type of this stack is equal to the given fluid type.
    • getDisplayName

      @Deprecated(forRemoval=true, since="1.20.5") public Component getDisplayName()
      Deprecated, for removal: This API element is subject to removal in a future version.
      Use getHoverName() instead.
    • getTranslationKey

      @Deprecated(forRemoval=true, since="1.20.5") public String getTranslationKey()
      Deprecated, for removal: This API element is subject to removal in a future version.
    • isFluidEqual

      @Deprecated(forRemoval=true, since="1.20.5") public boolean isFluidEqual(FluidStack other)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Determines if the fluid and the components are equal. This does not check amounts.
    • areFluidStackTagsEqual

      @Deprecated(forRemoval=true, since="1.20.5") public static boolean areFluidStackTagsEqual(FluidStack first, FluidStack second)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Determines if components are equal.
    • containsFluid

      @Deprecated(forRemoval=true, since="1.20.5") public boolean containsFluid(FluidStack other)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Determines if Fluids are equal and this stack is larger.
      Returns:
      true if this FluidStack contains the other FluidStack (same fluid, same components and >= amount)
    • isFluidStackIdentical

      @Deprecated(forRemoval=true, since="1.20.5") public boolean isFluidStackIdentical(FluidStack other)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Determines if Fluids, Amounts, and components are all equal.
    • isFluidEqual

      @Deprecated(forRemoval=true, since="1.20.5") public boolean isFluidEqual(ItemStack other)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Determines if the FluidIDs and components are equal compared to a container item stack. This does not check amounts.