package buildcraft.core.lib.render; import org.lwjgl.opengl.GL11; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import buildcraft.BuildCraftCore; import buildcraft.core.lib.block.BlockBuildCraft; public class RenderBlockComplex implements ISimpleBlockRenderingHandler { private static final int[] Y_ROTATE = {3, 0, 1, 2}; @Override public void renderInventoryBlock(Block block, int meta, int modelId, RenderBlocks renderer) { GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); GL11.glTranslatef(-0.5F, -0.5F, -0.5F); BlockBuildCraft bcBlock = (BlockBuildCraft) block; int pass = 0; while (bcBlock.canRenderInPassBC(pass)) { renderPassInventory(pass, bcBlock, meta, renderer); pass++; } GL11.glTranslatef(0.5F, 0.5F, 0.5F); } private void renderPassInventory(int pass, BlockBuildCraft block, int meta, RenderBlocks renderer) { if (block.isRotatable()) { renderer.uvRotateTop = Y_ROTATE[block.getFrontSide(meta) - 2]; renderer.uvRotateBottom = Y_ROTATE[block.getFrontSide(meta) - 2]; } RenderUtils.drawBlockItem(renderer, Tessellator.instance, block, meta); renderer.uvRotateTop = 0; renderer.uvRotateBottom = 0; } private void renderPassWorld(int pass, BlockBuildCraft block, int meta, RenderBlocks renderer, IBlockAccess world, int x, int y, int z) { if (block.isRotatable()) { renderer.uvRotateTop = Y_ROTATE[block.getFrontSide(meta) - 2]; renderer.uvRotateBottom = Y_ROTATE[block.getFrontSide(meta) - 2]; } double pDouble = (pass > 0 ? 1 : 0) / 512.0; renderer.setRenderBounds(block.getBlockBoundsMinX() - pDouble, block.getBlockBoundsMinY() - pDouble, block.getBlockBoundsMinZ() - pDouble, block.getBlockBoundsMaxX() + pDouble, block.getBlockBoundsMaxY() + pDouble, block.getBlockBoundsMaxZ() + pDouble); renderer.renderStandardBlock(block, x, y, z); renderer.uvRotateTop = 0; renderer.uvRotateBottom = 0; } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { BlockBuildCraft bcBlock = (BlockBuildCraft) block; int meta = world.getBlockMetadata(x, y, z); int pass = bcBlock.getCurrentRenderPass(); while (bcBlock.canRenderInPassBC(pass)) { renderPassWorld(pass, bcBlock, meta, renderer, world, x, y, z); pass++; } return true; } @Override public boolean shouldRender3DInInventory(int modelId) { return true; } @Override public int getRenderId() { return BuildCraftCore.complexBlockModel; } }