Add support for fluid blocks to BlocksComponent
This commit is contained in:
parent
1b129b279e
commit
0b031c0733
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue