Skip to content

Commit a51883b

Browse files
committed
Handle null view, pos in fluid compat handler
Fixes #258
1 parent a4c3605 commit a51883b

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/fluid/FluidRendererCompat.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandler;
44
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry;
5+
import net.minecraft.client.Minecraft;
56
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
67
import net.minecraft.core.BlockPos;
78
import net.minecraft.core.registries.BuiltInRegistries;
@@ -20,6 +21,7 @@
2021
import java.util.Arrays;
2122
import java.util.HashMap;
2223
import java.util.Map;
24+
import java.util.Objects;
2325

2426
public final class FluidRendererCompat {
2527

@@ -38,15 +40,22 @@ public static void onClientSetup(FMLClientSetupEvent event) {
3840
}
3941

4042
private record ForgeFluidRenderHandler(FluidType fluidType) implements FluidRenderHandler {
43+
// view and pos are nullable here, but Neo does not allow null values
44+
// We take a "best effort" approach and replace them with dummies if necessary
45+
// Don't worry, this shouldn't break anything :)
4146
@Override
4247
public TextureAtlasSprite[] getFluidSprites(@Nullable BlockAndTintGetter view, @Nullable BlockPos pos, FluidState state) {
43-
TextureAtlasSprite[] forgeSprites = FluidSpriteCache.getFluidSprites(view, pos, state);
48+
BlockAndTintGetter actualView = Objects.requireNonNullElseGet(view, () -> Minecraft.getInstance().level);
49+
BlockPos actualPos = Objects.requireNonNullElse(pos, BlockPos.ZERO);
50+
TextureAtlasSprite[] forgeSprites = FluidSpriteCache.getFluidSprites(actualView, actualPos, state);
4451
return forgeSprites[2] == null ? Arrays.copyOfRange(forgeSprites, 0, 2) : forgeSprites;
4552
}
4653

4754
@Override
4855
public int getFluidColor(@Nullable BlockAndTintGetter view, @Nullable BlockPos pos, FluidState state) {
49-
int color = IClientFluidTypeExtensions.of(this.fluidType).getTintColor(state, view, pos);
56+
BlockAndTintGetter actualView = Objects.requireNonNullElseGet(view, () -> Minecraft.getInstance().level);
57+
BlockPos actualPos = Objects.requireNonNullElse(pos, BlockPos.ZERO);
58+
int color = IClientFluidTypeExtensions.of(this.fluidType).getTintColor(state, actualView, actualPos);
5059
return 0x00FFFFFF & color;
5160
}
5261
}

0 commit comments

Comments
 (0)