|
@@ -26,14 +26,22 @@ import me.shedaniel.architectury.utils.Fraction;
|
|
import me.shedaniel.architectury.utils.NbtType;
|
|
import me.shedaniel.architectury.utils.NbtType;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import net.fabricmc.api.Environment;
|
|
|
|
+import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandler;
|
|
|
|
+import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry;
|
|
|
|
+import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
|
|
|
+import net.minecraft.core.BlockPos;
|
|
import net.minecraft.core.Registry;
|
|
import net.minecraft.core.Registry;
|
|
import net.minecraft.nbt.CompoundTag;
|
|
import net.minecraft.nbt.CompoundTag;
|
|
import net.minecraft.network.FriendlyByteBuf;
|
|
import net.minecraft.network.FriendlyByteBuf;
|
|
import net.minecraft.network.chat.Component;
|
|
import net.minecraft.network.chat.Component;
|
|
import net.minecraft.network.chat.TranslatableComponent;
|
|
import net.minecraft.network.chat.TranslatableComponent;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
|
|
+import net.minecraft.world.level.BlockAndTintGetter;
|
|
import net.minecraft.world.level.material.Fluid;
|
|
import net.minecraft.world.level.material.Fluid;
|
|
|
|
+import net.minecraft.world.level.material.FluidState;
|
|
import net.minecraft.world.level.material.Fluids;
|
|
import net.minecraft.world.level.material.Fluids;
|
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
|
|
+import org.jetbrains.annotations.Nullable;
|
|
|
|
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
|
|
|
|
@@ -103,4 +111,86 @@ public class FluidStackHooksImpl {
|
|
public static Fraction bucketAmount() {
|
|
public static Fraction bucketAmount() {
|
|
return Fraction.ofWhole(1);
|
|
return Fraction.ofWhole(1);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Environment(EnvType.CLIENT)
|
|
|
|
+ @Nullable
|
|
|
|
+ public static TextureAtlasSprite getStillTexture(@Nullable BlockAndTintGetter level, @Nullable BlockPos pos, @NotNull FluidState state) {
|
|
|
|
+ if (state.getType() == Fluids.EMPTY) return null;
|
|
|
|
+ TextureAtlasSprite[] sprites = FluidRenderHandlerRegistry.INSTANCE.get(state.getType()).getFluidSprites(level, pos, state);
|
|
|
|
+ if (sprites == null) return null;
|
|
|
|
+ return sprites[0];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Environment(EnvType.CLIENT)
|
|
|
|
+ @Nullable
|
|
|
|
+ public static TextureAtlasSprite getStillTexture(@NotNull FluidStack stack) {
|
|
|
|
+ if (stack.getFluid() == Fluids.EMPTY) return null;
|
|
|
|
+ TextureAtlasSprite[] sprites = FluidRenderHandlerRegistry.INSTANCE.get(stack.getFluid()).getFluidSprites(null, null, stack.getFluid().defaultFluidState());
|
|
|
|
+ if (sprites == null) return null;
|
|
|
|
+ return sprites[0];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Environment(EnvType.CLIENT)
|
|
|
|
+ @Nullable
|
|
|
|
+ public static TextureAtlasSprite getStillTexture(@NotNull Fluid fluid) {
|
|
|
|
+ if (fluid == Fluids.EMPTY) return null;
|
|
|
|
+ TextureAtlasSprite[] sprites = FluidRenderHandlerRegistry.INSTANCE.get(fluid).getFluidSprites(null, null, fluid.defaultFluidState());
|
|
|
|
+ if (sprites == null) return null;
|
|
|
|
+ return sprites[0];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Environment(EnvType.CLIENT)
|
|
|
|
+ @Nullable
|
|
|
|
+ public static TextureAtlasSprite getFlowingTexture(@Nullable BlockAndTintGetter level, @Nullable BlockPos pos, @NotNull FluidState state) {
|
|
|
|
+ if (state.getType() == Fluids.EMPTY) return null;
|
|
|
|
+ FluidRenderHandler handler = FluidRenderHandlerRegistry.INSTANCE.get(state.getType());
|
|
|
|
+ if (handler == null) return null;
|
|
|
|
+ TextureAtlasSprite[] sprites = handler.getFluidSprites(level, pos, state);
|
|
|
|
+ if (sprites == null) return null;
|
|
|
|
+ return sprites[1];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Environment(EnvType.CLIENT)
|
|
|
|
+ @Nullable
|
|
|
|
+ public static TextureAtlasSprite getFlowingTexture(@NotNull FluidStack stack) {
|
|
|
|
+ if (stack.getFluid() == Fluids.EMPTY) return null;
|
|
|
|
+ FluidRenderHandler handler = FluidRenderHandlerRegistry.INSTANCE.get(stack.getFluid());
|
|
|
|
+ if (handler == null) return null;
|
|
|
|
+ TextureAtlasSprite[] sprites = handler.getFluidSprites(null, null, stack.getFluid().defaultFluidState());
|
|
|
|
+ if (sprites == null) return null;
|
|
|
|
+ return sprites[1];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Environment(EnvType.CLIENT)
|
|
|
|
+ @Nullable
|
|
|
|
+ public static TextureAtlasSprite getFlowingTexture(@NotNull Fluid fluid) {
|
|
|
|
+ if (fluid == Fluids.EMPTY) return null;
|
|
|
|
+ TextureAtlasSprite[] sprites = FluidRenderHandlerRegistry.INSTANCE.get(fluid).getFluidSprites(null, null, fluid.defaultFluidState());
|
|
|
|
+ if (sprites == null) return null;
|
|
|
|
+ return sprites[1];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Environment(EnvType.CLIENT)
|
|
|
|
+ public static int getColor(@Nullable BlockAndTintGetter level, @Nullable BlockPos pos, @NotNull FluidState state) {
|
|
|
|
+ if (state.getType() == Fluids.EMPTY) return -1;
|
|
|
|
+ FluidRenderHandler handler = FluidRenderHandlerRegistry.INSTANCE.get(state.getType());
|
|
|
|
+ if (handler == null) return -1;
|
|
|
|
+ return handler.getFluidColor(level, pos, state);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Environment(EnvType.CLIENT)
|
|
|
|
+ public static int getColor(@NotNull FluidStack stack) {
|
|
|
|
+ if (stack.getFluid() == Fluids.EMPTY) return -1;
|
|
|
|
+ FluidRenderHandler handler = FluidRenderHandlerRegistry.INSTANCE.get(stack.getFluid());
|
|
|
|
+ if (handler == null) return -1;
|
|
|
|
+ return handler.getFluidColor(null, null, stack.getFluid().defaultFluidState());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Environment(EnvType.CLIENT)
|
|
|
|
+ public static int getColor(@NotNull Fluid fluid) {
|
|
|
|
+ if (fluid == Fluids.EMPTY) return -1;
|
|
|
|
+ FluidRenderHandler handler = FluidRenderHandlerRegistry.INSTANCE.get(fluid);
|
|
|
|
+ if (handler == null) return -1;
|
|
|
|
+ return handler.getFluidColor(null, null, fluid.defaultFluidState());
|
|
|
|
+ }
|
|
}
|
|
}
|