package choonster.testmod3.fluids; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.IFluidHandlerItem; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Objects; /** * An implementation of {@link IFluidHandlerItem} that stores its contents as a {@link FluidStack} in memory rather than * storing them in the vanilla {@link ItemStack} NBT. * * @author Choonster */ public class FluidTankItem extends FluidTank implements IFluidHandlerItem { private final ItemStack container; public FluidTankItem(ItemStack container, int capacity) { super(capacity); this.container = container; } public FluidTankItem(ItemStack container, @Nullable FluidStack fluidStack, int capacity) { super(fluidStack, capacity); this.container = container; } public FluidTankItem(ItemStack container, Fluid fluid, int amount, int capacity) { super(fluid, amount, capacity); this.container = container; } /** * Get the container currently acted on by this fluid handler. * The ItemStack may be different from its initial state, in the case of fluid containers that have different items * for their filled and empty states. * May be an empty item if the container was drained and is consumable. */ @Nonnull @Override public ItemStack getContainer() { return container; } @Override public boolean equals(@Nullable final Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; final FluidTank that = ((FluidTank) obj); return Objects.equals(getFluid(), that.getFluid()); } @Override public int hashCode() { return fluid != null ? fluid.hashCode() : 0; } }