Posted February 28, 20223 yr I've been trying to render a fluid to the gui. And referenced here. But the result is this: public class LavaGeneratorScreen extends AbstractContainerScreen<LavaGeneratorMenu> { private final ResourceLocation GUI = new ResourceLocation(GeneratorMod.MODID, "textures/gui/lava_generator_gui.png"); public LavaGeneratorScreen(LavaGeneratorMenu menu, Inventory playerInv, Component title) { super(menu, playerInv, title); } @Override public void render(@NotNull PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { this.renderBackground(matrixStack); super.render(matrixStack, mouseX, mouseY, partialTicks); FluidStack fluid = menu.getFluid().copy(); int maxFluid = menu.getMaxFluidAmount(); renderFluid(matrixStack, fluid, maxFluid); this.renderTooltip(matrixStack, mouseX, mouseY); } private void renderFluid(@NotNull PoseStack matrixStack, FluidStack fluid, int maxFluid) { drawString(matrixStack, this.font, "fluid: " + fluid.getAmount() + " / " + maxFluid + " (" + fluid.getDisplayName().getString() + ")", 10, 20, 0xFFFFFF); if (!fluid.isEmpty() && this.minecraft != null) { FluidAttributes fluidAttributes = fluid.getFluid().getAttributes(); ResourceLocation fluidLoc = fluidAttributes.getFlowingTexture(fluid); TextureAtlasSprite fluidSprite = minecraft.getTextureAtlas(InventoryMenu.BLOCK_ATLAS).apply(fluidLoc); minecraft.getTextureManager().bindForSetup(new ResourceLocation(fluidLoc.getNamespace(), "textures/" + fluidLoc.getPath() + ".png")); int color = fluidAttributes.getColor(); GlStateManager._clearColor(((color >> 16) & 0xFF) / 255f, ((color >> 8) & 0xFF) / 255f, (color & 0xFF) / 255f, ((color >> 24) & 0xFF) / 255f); int scaledHeight = Tools.scaled(fluid.getAmount(), maxFluid, 48); blit(matrixStack, this.leftPos + 98, this.topPos + 66 - scaledHeight, 0, 16, scaledHeight, fluidSprite); } } @Override protected void renderBg(@NotNull PoseStack matrixStack, float partialTick, int mouseX, int mouseY) { RenderSystem.setShaderTexture(0, GUI); this.blit(matrixStack, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight); } } What's wrong? Edited March 1, 20223 yr by reasure
February 28, 20223 yr Author Rendering was successful, but it's a bit different from what I intended. And what I intend is this. in RenderFluid() FluidAttributes fluidAttributes = fluid.getFluid().getAttributes(); ResourceLocation fluidLoc = fluidAttributes.getStillTexture(fluid); RenderSystem.setShaderTexture(0, new ResourceLocation(fluidLoc.getNamespace(), "textures/" + fluidLoc.getPath() + ".png")); int color = fluidAttributes.getColor(); RenderSystem.setShaderColor(((color >> 16) & 0xFF) / 255f, ((color >> 8) & 0xFF) / 255f, (color & 0xFF) / 255f, ((color >> 24) & 0xFF) / 255f); int scaledHeight = Tools.scaled(fluid.getAmount(), maxFluid, 48); blit(matrixStack, this.leftPos + 98, this.topPos + 66 - scaledHeight, 0, 17, 16, scaledHeight); Tools.scaled public static int scaled(float value, float maxValue, int height) { if (value <= 0 || maxValue <= 0) { return 0; } return (int) (value / maxValue * height); }
February 28, 20223 yr Author How can I get fluid texture's height? Ah, I got. TextureAtlasSprite fluidSprite = minecraft.getTextureAtlas(InventoryMenu.BLOCK_ATLAS).apply(fluidLoc); int textureHeight = fluidSprite.getHeight(); Edited February 28, 20223 yr by reasure
March 1, 20223 yr Author It still renders the same. private void renderFluid(@NotNull PoseStack matrixStack, FluidStack fluid, int maxFluid) { drawString(matrixStack, this.font, "fluid: " + fluid.getAmount() + " / " + maxFluid + " (" + fluid.getDisplayName().getString() + ")", 10, 25, 0xFFFFFF); if (!fluid.isEmpty() && this.minecraft != null) { int scaledHeight = Tools.scaled(fluid.getAmount(), maxFluid, 48); if (scaledHeight > 0) { FluidAttributes fluidAttributes = fluid.getFluid().getAttributes(); ResourceLocation fluidLoc = fluidAttributes.getStillTexture(fluid); TextureAtlasSprite sprite = minecraft.getTextureAtlas(InventoryMenu.BLOCK_ATLAS).apply(fluidLoc); int color = fluidAttributes.getColor(); int yCount = scaledHeight / 16; int yRemainder = scaledHeight % 16; RenderSystem.setShaderTexture(0, new ResourceLocation(fluidLoc.getNamespace(), "textures/" + fluidLoc.getPath() + ".png")); RenderSystem.setShaderColor(((color >> 16) & 0xFF) / 255f, ((color >> 8) & 0xFF) / 255f, (color & 0xFF) / 255f, ((color >> 24) & 0xFF) / 255f); for (int i = 1; i <= yCount; i++) { blit(matrixStack, this.leftPos + 98, this.topPos + 66 - 16 * i, 0, 16, 16, sprite); } blit(matrixStack, this.leftPos + 98, this.topPos + 66 - 16 * yCount - yRemainder, 0, 16, yRemainder, sprite); // reset color RenderSystem.setShaderColor(1f, 1f, 1f, 1f); } } } (TextureAtlasSprite sprite = minecraft.getTextureAtlas(InventoryMenu.BLOCK_ATLAS).apply(fluidLoc); The sprite height is just 16.) Edited March 1, 20223 yr by reasure
March 1, 20223 yr Author 19 hours ago, diesieben07 said: You're binding the wrong texture. You have to bind the block atlas which you do with RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS) Ah, I should have bound InventoryMenu.BLOCK_ATLAS. Sorry.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.