package net.minecraft.client.renderer.debug; import com.mojang.blaze3d.vertex.PoseStack; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.core.BlockPos; import net.minecraft.tags.FluidTags; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.AABB; @Environment(EnvType.CLIENT) public class WaterDebugRenderer implements DebugRenderer.SimpleDebugRenderer { private final Minecraft minecraft; public WaterDebugRenderer(Minecraft minecraft) { this.minecraft = minecraft; } @Override public void render(PoseStack poseStack, MultiBufferSource bufferSource, double camX, double camY, double camZ) { BlockPos blockPos = this.minecraft.player.blockPosition(); LevelReader levelReader = this.minecraft.player.level(); for (BlockPos blockPos2 : BlockPos.betweenClosed(blockPos.offset(-10, -10, -10), blockPos.offset(10, 10, 10))) { FluidState fluidState = levelReader.getFluidState(blockPos2); if (fluidState.is(FluidTags.WATER)) { double d = blockPos2.getY() + fluidState.getHeight(levelReader, blockPos2); DebugRenderer.renderFilledBox( poseStack, bufferSource, new AABB(blockPos2.getX() + 0.01F, blockPos2.getY() + 0.01F, blockPos2.getZ() + 0.01F, blockPos2.getX() + 0.99F, d, blockPos2.getZ() + 0.99F) .move(-camX, -camY, -camZ), 0.0F, 1.0F, 0.0F, 0.15F ); } } for (BlockPos blockPos2x : BlockPos.betweenClosed(blockPos.offset(-10, -10, -10), blockPos.offset(10, 10, 10))) { FluidState fluidState = levelReader.getFluidState(blockPos2x); if (fluidState.is(FluidTags.WATER)) { DebugRenderer.renderFloatingText( poseStack, bufferSource, String.valueOf(fluidState.getAmount()), blockPos2x.getX() + 0.5, (double)(blockPos2x.getY() + fluidState.getHeight(levelReader, blockPos2x)), blockPos2x.getZ() + 0.5, -16777216 ); } } } }