Skip to content

Commit 5f8b057

Browse files
committed
Use fabric FluidRenderHandler to setup sprites
1 parent 9633965 commit 5f8b057

File tree

2 files changed

+32
-33
lines changed

2 files changed

+32
-33
lines changed

src/main/java/net/vulkanmod/render/chunk/build/LiquidRenderer.java

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
package net.vulkanmod.render.chunk.build;
22

3+
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandler;
4+
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry;
35
import net.minecraft.client.Minecraft;
4-
import net.minecraft.client.renderer.BiomeColors;
56
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
6-
import net.minecraft.client.resources.model.ModelBakery;
77
import net.minecraft.core.BlockPos;
88
import net.minecraft.core.Direction;
99
import net.minecraft.tags.FluidTags;
1010
import net.minecraft.util.Mth;
1111
import net.minecraft.world.level.BlockAndTintGetter;
1212
import net.minecraft.world.level.BlockGetter;
13-
import net.minecraft.world.level.block.Block;
14-
import net.minecraft.world.level.block.Blocks;
15-
import net.minecraft.world.level.block.HalfTransparentBlock;
16-
import net.minecraft.world.level.block.LeavesBlock;
1713
import net.minecraft.world.level.block.state.BlockState;
1814
import net.minecraft.world.level.material.Fluid;
1915
import net.minecraft.world.level.material.FluidState;
16+
import net.minecraft.world.level.material.Fluids;
2017
import net.minecraft.world.phys.Vec3;
2118
import net.minecraft.world.phys.shapes.Shapes;
2219
import net.minecraft.world.phys.shapes.VoxelShape;
@@ -34,9 +31,6 @@
3431

3532
public class LiquidRenderer {
3633
private static final float MAX_FLUID_HEIGHT = 0.8888889F;
37-
private final TextureAtlasSprite[] lavaIcons = new TextureAtlasSprite[2];
38-
private final TextureAtlasSprite[] waterIcons = new TextureAtlasSprite[2];
39-
private TextureAtlasSprite waterOverlay;
4034

4135
private final BlockPos.MutableBlockPos mBlockPos = new BlockPos.MutableBlockPos();
4236

@@ -54,14 +48,6 @@ public void renderLiquid(BlockState blockState, FluidState fluidState, BlockPos
5448
tessellate(blockState, fluidState, blockPos, vertexConsumer);
5549
}
5650

57-
public void setupSprites() {
58-
this.lavaIcons[0] = Minecraft.getInstance().getModelManager().getBlockModelShaper().getBlockModel(Blocks.LAVA.defaultBlockState()).getParticleIcon();
59-
this.lavaIcons[1] = ModelBakery.LAVA_FLOW.sprite();
60-
this.waterIcons[0] = Minecraft.getInstance().getModelManager().getBlockModelShaper().getBlockModel(Blocks.WATER.defaultBlockState()).getParticleIcon();
61-
this.waterIcons[1] = ModelBakery.WATER_FLOW.sprite();
62-
this.waterOverlay = ModelBakery.WATER_OVERLAY.sprite();
63-
}
64-
6551
private boolean isFaceOccludedByState(BlockGetter blockGetter, float h, Direction direction, BlockPos blockPos, BlockState blockState) {
6652
mBlockPos.set(blockPos).offset(Direction.DOWN.getNormal());
6753

@@ -102,9 +88,11 @@ public BlockState getAdjBlockState(BlockAndTintGetter blockAndTintGetter, int x,
10288
public void tessellate(BlockState blockState, FluidState fluidState, BlockPos blockPos, TerrainBufferBuilder vertexConsumer) {
10389
BlockAndTintGetter region = this.resources.region;
10490

105-
boolean bl = fluidState.is(FluidTags.LAVA);
106-
TextureAtlasSprite[] sprites = bl ? this.lavaIcons : this.waterIcons;
107-
int color = bl ? 16777215 : BiomeColors.getAverageWaterColor(region, blockPos);
91+
final FluidRenderHandler handler = getFluidRenderHandler(fluidState);
92+
int color = handler.getFluidColor(region, blockPos, fluidState);
93+
94+
TextureAtlasSprite[] sprites = handler.getFluidSprites(region, blockPos, fluidState);
95+
10896
float r = ColorUtil.ARGB.unpackR(color);
10997
float g = ColorUtil.ARGB.unpackG(color);
11098
float b = ColorUtil.ARGB.unpackB(color);
@@ -333,20 +321,21 @@ public void tessellate(BlockState blockState, FluidState fluidState, BlockPos bl
333321
if (isFaceOccludedByState(region, Math.max(h1, h2), direction, blockPos, adjState))
334322
continue;
335323

336-
BlockPos blockPos2 = blockPos.relative(direction);
337-
TextureAtlasSprite sprite2 = sprites[1];
338-
if (!bl) {
339-
Block block = region.getBlockState(blockPos2).getBlock();
340-
if (block instanceof HalfTransparentBlock || block instanceof LeavesBlock) {
341-
sprite2 = this.waterOverlay;
324+
TextureAtlasSprite sprite = sprites[1];
325+
boolean isOverlay = false;
326+
327+
if (sprites.length > 2) {
328+
if (FluidRenderHandlerRegistry.INSTANCE.isBlockTransparent(adjState.getBlock())) {
329+
sprite = sprites[2];
330+
isOverlay = true;
342331
}
343332
}
344333

345-
float u0 = sprite2.getU(0.0F);
346-
float u1 = sprite2.getU(0.5F);
347-
float v0 = sprite2.getV((1.0F - h1) * 0.5F);
348-
float v1 = sprite2.getV((1.0F - h2) * 0.5F);
349-
float v2 = sprite2.getV(0.5F);
334+
float u0 = sprite.getU(0.0F);
335+
float u1 = sprite.getU(0.5F);
336+
float v0 = sprite.getV((1.0F - h1) * 0.5F);
337+
float v1 = sprite.getV((1.0F - h2) * 0.5F);
338+
float v2 = sprite.getV(0.5F);
350339

351340
float brightness = region.getShade(direction, true);
352341

@@ -360,13 +349,24 @@ public void tessellate(BlockState blockState, FluidState fluidState, BlockPos bl
360349

361350
putQuad(modelQuad, vertexConsumer, x0, y0, z0, false);
362351

363-
if (sprite2 != this.waterOverlay) {
352+
if (!isOverlay) {
364353
putQuad(modelQuad, vertexConsumer, x0, y0, z0, true);
365354
}
366355

367356
}
368357
}
369358

359+
private static FluidRenderHandler getFluidRenderHandler(FluidState fluidState) {
360+
FluidRenderHandler handler = FluidRenderHandlerRegistry.INSTANCE.get(fluidState.getType());
361+
362+
// Fallback to water in case no handler was found
363+
if (handler == null) {
364+
handler = FluidRenderHandlerRegistry.INSTANCE.get(Fluids.WATER);
365+
}
366+
367+
return handler;
368+
}
369+
370370
private float calculateAverageHeight(BlockAndTintGetter blockAndTintGetter, Fluid fluid, float f, float g, float h, BlockPos blockPos) {
371371
if (!(h >= 1.0F) && !(g >= 1.0F)) {
372372
float[] fs = new float[2];

src/main/java/net/vulkanmod/render/chunk/build/task/BuildTask.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ private CompileResult compile(float camX, float camY, float camZ, BuilderResourc
9595
BlockRenderer blockRenderer = builderResources.blockRenderer;
9696

9797
LiquidRenderer liquidRenderer = builderResources.liquidRenderer;
98-
liquidRenderer.setupSprites();
9998

10099
BlockPos.MutableBlockPos blockPos = new BlockPos.MutableBlockPos();
101100

0 commit comments

Comments
 (0)