package de.sanandrew.core.manpack.util.client; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.world.IBlockAccess; import org.lwjgl.opengl.GL11; @SideOnly( Side.CLIENT ) public class RenderBlockGlowOverlay implements ISimpleBlockRenderingHandler { public static int renderID = 0; @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { Tessellator tessellator = Tessellator.instance; IGlowBlockOverlay blockOverlay = (block instanceof IGlowBlockOverlay) ? (IGlowBlockOverlay) block : null; block.setBlockBoundsForItemRender(); renderer.setRenderBoundsFromBlock(block); GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); GL11.glTranslatef(-0.5F, -0.5F, -0.5F); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, -1.0F, 0.0F); renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 0, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 1.0F, 0.0F); renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 1, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 0.0F, -1.0F); renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 2, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 0.0F, 1.0F); renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 3, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(-1.0F, 0.0F, 0.0F); renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 4, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(1.0F, 0.0F, 0.0F); renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 5, metadata)); tessellator.draw(); if( blockOverlay != null ) { float lastBrightX = OpenGlHelper.lastBrightnessX; float lastBrightY = OpenGlHelper.lastBrightnessY; char bright = 0x000F0; float brightX = bright % 65536; float brightY = bright / 65536; OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, brightX, brightY); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, -1.0F, 0.0F); renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, blockOverlay.getOverlayInvTexture(0, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 1.0F, 0.0F); renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, blockOverlay.getOverlayInvTexture(1, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 0.0F, -1.0F); renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, blockOverlay.getOverlayInvTexture(2, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 0.0F, 1.0F); renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, blockOverlay.getOverlayInvTexture(3, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(-1.0F, 0.0F, 0.0F); renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, blockOverlay.getOverlayInvTexture(4, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(1.0F, 0.0F, 0.0F); renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, blockOverlay.getOverlayInvTexture(5, metadata)); tessellator.draw(); OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lastBrightX, lastBrightY); } GL11.glTranslatef(0.5F, 0.5F, 0.5F); } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { renderer.renderStandardBlockWithColorMultiplier(block, x, y, z, 1F, 1F, 1F); if( block instanceof IGlowBlockOverlay ) { IGlowBlockOverlay icn = (IGlowBlockOverlay) block; Tessellator.instance.setBrightness(240); Tessellator.instance.setColorOpaque(255, 255, 255); // render the overlaying block START renderer.renderFaceYNeg(block, x, y, z, icn.getOverlayTexture(world, x, y, z, 0)); renderer.renderFaceYPos(block, x, y, z, icn.getOverlayTexture(world, x, y, z, 1)); renderer.renderFaceZNeg(block, x, y, z, icn.getOverlayTexture(world, x, y, z, 2)); renderer.renderFaceZPos(block, x, y, z, icn.getOverlayTexture(world, x, y, z, 3)); renderer.renderFaceXNeg(block, x, y, z, icn.getOverlayTexture(world, x, y, z, 4)); renderer.renderFaceXPos(block, x, y, z, icn.getOverlayTexture(world, x, y, z, 5)); // render the overlaying block END Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); } return true; } @Override public boolean shouldRender3DInInventory(int modelId) { return true; } @Override public int getRenderId() { return 0; } }