Merge pull request #75 from rafern/master

Add support for fluid blocks to BlocksComponent
This commit is contained in:
noil 2021-08-07 20:22:47 -04:00 committed by GitHub
commit ee2e43769b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 6 deletions

4
.gitignore vendored
View File

@ -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

View File

@ -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;