From 1b129b279e2da02f3adef95b56bc9391a5d71b04 Mon Sep 17 00:00:00 2001 From: rafern Date: Sun, 1 Aug 2021 15:13:29 +0100 Subject: [PATCH 1/2] Ignore sublime text project files --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 3ebc722..8f29c84 100644 --- a/.gitignore +++ b/.gitignore @@ -186,3 +186,7 @@ hs_err_pid* # End of https://www.gitignore.io/api/java,eclipse,forgegradle,intellij+all /build/ /.gradle/ + +# Sublime Text +*.sublime-workspace +*.sublime-project From 0b031c0733fa067ae5710c9fa55ed2a19aa3ca02 Mon Sep 17 00:00:00 2001 From: rafern Date: Sun, 8 Aug 2021 00:26:17 +0100 Subject: [PATCH 2/2] Add support for fluid blocks to BlocksComponent --- .../gui/hud/component/BlocksComponent.java | 54 ++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/BlocksComponent.java b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/BlocksComponent.java index 8c35f81..7f54010 100644 --- a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/BlocksComponent.java +++ b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/BlocksComponent.java @@ -10,8 +10,16 @@ import net.minecraft.block.BlockLiquid; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.FluidRegistry; import org.apache.commons.lang3.CharUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -40,10 +48,10 @@ public final class BlocksComponent extends HudComponent { this.blocks.clear(); for (Block block : Block.REGISTRY) { - if ((block instanceof BlockAir) || (block instanceof BlockLiquid)) + if (block instanceof BlockAir) continue; - if (Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getItemModel(new ItemStack(block)) == Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getMissingModel()) { + if(!(block instanceof BlockLiquid || block instanceof IFluidBlock) && Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getItemModel(new ItemStack(block)) == Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getMissingModel()) { continue; } @@ -90,10 +98,44 @@ public final class BlocksComponent extends HudComponent { color = 0xFF3B005F; borderColor = 0xFF9900EE; } - final ItemStack itemStack = new ItemStack(block); - RenderUtil.drawBorderedRect(renderPaddingX + this.getX() + xOffset, renderPaddingY + this.getY() + yOffset, renderPaddingX + this.getX() + xOffset + 16, renderPaddingY + this.getY() + yOffset + 16, 0.5f, color, borderColor); - Minecraft.getMinecraft().getRenderItem().renderItemIntoGUI(itemStack, (int) renderPaddingX + (int) this.getX() + xOffset, (int) renderPaddingY + (int) this.getY() + yOffset); - Minecraft.getMinecraft().getRenderItem().renderItemOverlayIntoGUI(Minecraft.getMinecraft().fontRenderer, itemStack, (int) renderPaddingX + (int) this.getX() + xOffset, (int) renderPaddingY + (int) this.getY() + yOffset, null); + + final float rectX = renderPaddingX + this.getX() + xOffset; + final float rectY = renderPaddingY + this.getY() + yOffset; + RenderUtil.drawBorderedRect(rectX, rectY, rectX + 16, rectY + 16, 0.5f, color, borderColor); + if(block instanceof BlockLiquid || block instanceof IFluidBlock) { + final Fluid fluid = FluidRegistry.lookupFluidForBlock(block); + + final ResourceLocation fluidStill = fluid.getStill(); + final TextureAtlasSprite sprite; + if(fluidStill == null) { + sprite = Minecraft.getMinecraft().getTextureMapBlocks().getMissingSprite(); + } else { + // getTextureExtry (instead of getTextureEntry) is a forge typo, not a typo on our side + sprite = Minecraft.getMinecraft().getTextureMapBlocks().getTextureExtry(fluidStill.toString()); + } + + final int fluidColor = fluid.getColor(); + final float r = (float)(fluidColor >> 16 & 255) / 255.0F; + final float g = (float)(fluidColor >> 8 & 255) / 255.0F; + final float b = (float)(fluidColor & 255) / 255.0F; + GlStateManager.color(r, g, b, 1.0f); + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + final Tessellator tessellator = Tessellator.getInstance(); + final BufferBuilder bufferBuilder = tessellator.getBuffer(); + bufferBuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + // Note that fluids are a full quad; extra padding is added so that you can see the background to check whether the block is selected or not + bufferBuilder.pos((double)(rectX + 1), (double)(rectY + 15), 0d).tex((double)sprite.getMinU(), (double)sprite.getMaxV()).endVertex(); + bufferBuilder.pos((double)(rectX + 15), (double)(rectY + 15), 0d).tex((double)sprite.getMaxU(), (double)sprite.getMaxV()).endVertex(); + bufferBuilder.pos((double)(rectX + 15), (double)(rectY + 1), 0d).tex((double)sprite.getMaxU(), (double)sprite.getMinV()).endVertex(); + bufferBuilder.pos((double)(rectX + 1), (double)(rectY + 1), 0d).tex((double)sprite.getMinU(), (double)sprite.getMinV()).endVertex(); + tessellator.draw(); + + } else { + final ItemStack itemStack = new ItemStack(block); + Minecraft.getMinecraft().getRenderItem().renderItemIntoGUI(itemStack, (int) renderPaddingX + (int) this.getX() + xOffset, (int) renderPaddingY + (int) this.getY() + yOffset); + Minecraft.getMinecraft().getRenderItem().renderItemOverlayIntoGUI(Minecraft.getMinecraft().fontRenderer, itemStack, (int) renderPaddingX + (int) this.getX() + xOffset, (int) renderPaddingY + (int) this.getY() + yOffset, null); + } } xOffset += 18;