1. FluidStack
与 ItemStack 相仿,FluidStack
代表特定数量的特定流体,有时也会持有特定 NBT 数据。和 ItemStack
不一样的地方在于,FluidStack
持有的 Fluid
引用不能是 null
。FluidStack
可以是 null
,代表空流体。
// null 代表空流体。
FluidStack someFluid = null;
// 1000 mB 的水。
FluidStack anotherFluid = new FluidStack(FluidRegistry.WATER, 1000);
// 会抛出 IllegalArgumentException。
// 使用没有注册的流体也会导致其抛出 IllegalArgumentException。请务必使用注册过的流体,不论注册成功与否。
// FluidStack error = new FluidStack(null, 1000); // ERROR
// 获取流体类型的访问器。
Fluid theType = anotherFluid.getFluid();
// 出于某种原因,流体数量没有访问器,这个字段是公有的。
int size = anotherFluid.amount;
1.1. 不寻常的 equals
FluidStack
覆写了 Object.equals
和 Object.hashCode
方法,但这两个方法只比较 Fluid
和 NBT 数据,不比较数量。换言之,FluidStack
本身可用作 HashMap
的键,这个键相当于 Fluid
和 NBTTagCompound
组成的二元组。
需要比较数量的话,可以使用 FluidStack#isFluidStackIdentical
这个方法。
另外,FluidStack
覆写的 Object.equals
实际上是代理给了 FluidStack.isFluidEqual
。