Fix fluid rendering in GUI. Thanks to BoogieMonster1O1

This commit is contained in:
BoogieMonster1O1 2022-02-26 00:39:53 +05:30 committed by GitHub
parent 0ece1d570c
commit ff56edb2c3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -91,12 +91,15 @@ public class RenderUtil {
int renderAmount = (int) Math.max(Math.min(height, amount.getRawValue() * height / capacity.getRawValue()), 1); int renderAmount = (int) Math.max(Math.min(height, amount.getRawValue() * height / capacity.getRawValue()), 1);
int posY = (int) (y + height - renderAmount); int posY = (int) (y + height - renderAmount);
RenderUtil.bindBlockTexture(); bindBlockTexture();
int color = 0; int color = FluidRenderHandlerRegistry.INSTANCE.get(fluid.getFluid()).getFluidColor(null, null, fluid.getFluid().getDefaultState());
// FIXME 1.17 what is the input range of the shader? 255.0F or 1.0F? float r = (float) (color >> 16 & 0xFF) / 255.0F;
RenderSystem.setShaderColor((byte) (color >> 16 & 0xFF), (byte) (color >> 8 & 0xFF), (byte) (color & 0xFF), 1.0F); float g = (float) (color >> 8 & 0xFF) / 255.0F;
float b = (float) (color & 0xFF) / 255.0F;
RenderSystem.setShaderColor(r, g, b, 1.0F);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderLayer.getTranslucent().startDrawing();
for (int i = 0; i < width; i += 16) { for (int i = 0; i < width; i += 16) {
for (int j = 0; j < renderAmount; j += 16) { for (int j = 0; j < renderAmount; j += 16) {
int drawWidth = (int) Math.min(width - i, 16); int drawWidth = (int) Math.min(width - i, 16);
@ -112,16 +115,35 @@ public class RenderUtil {
Tessellator tessellator = Tessellator.getInstance(); Tessellator tessellator = Tessellator.getInstance();
BufferBuilder tes = tessellator.getBuffer(); BufferBuilder tes = tessellator.getBuffer();
tes.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR); tes.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL);
tes.vertex(drawX, drawY + drawHeight, 0).texture(minU, minV + (maxV - minV) * drawHeight / 16F).next(); tes.vertex(drawX, drawY + drawHeight, 0)
.color(r, g, b, 1.0F)
.texture(minU, minV + (maxV - minV) * drawHeight / 16F)
.light(LightmapTextureManager.MAX_LIGHT_COORDINATE)
.normal(0, 1, 0)
.next();
tes.vertex(drawX + drawWidth, drawY + drawHeight, 0) tes.vertex(drawX + drawWidth, drawY + drawHeight, 0)
.texture(minU + (maxU - minU) * drawWidth / 16F, minV + (maxV - minV) * drawHeight / 16F) .color(r, g, b, 1.0F)
.next(); .texture(minU + (maxU - minU) * drawWidth / 16F, minV + (maxV - minV) * drawHeight / 16F)
tes.vertex(drawX + drawWidth, drawY, 0).texture(minU + (maxU - minU) * drawWidth / 16F, minV).next(); .light(LightmapTextureManager.MAX_LIGHT_COORDINATE)
tes.vertex(drawX, drawY, 0).texture(minU, minV).next(); .normal(0, 1, 0)
.next();
tes.vertex(drawX + drawWidth, drawY, 0)
.color(r, g, b, 1.0F)
.texture(minU + (maxU - minU) * drawWidth / 16F, minV)
.light(LightmapTextureManager.MAX_LIGHT_COORDINATE)
.normal(0, 1, 0)
.next();
tes.vertex(drawX, drawY, 0)
.color(r, g, b, 1.0F)
.texture(minU, minV)
.light(LightmapTextureManager.MAX_LIGHT_COORDINATE)
.normal(0, 1, 0)
.next();
tessellator.draw(); tessellator.draw();
} }
} }
RenderLayer.getTranslucent().endDrawing();
RenderSystem.disableBlend(); RenderSystem.disableBlend();
} }