package buildcraft.robotics.render; import java.util.HashMap; import org.lwjgl.opengl.GL11; import net.minecraft.block.material.MapColor; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import buildcraft.core.lib.block.BlockBuildCraft; import buildcraft.core.lib.render.DynamicTextureBC; import buildcraft.core.lib.render.FakeIcon; import buildcraft.core.lib.render.RenderEntityBlock; import buildcraft.robotics.TileZonePlan; public class RenderZonePlan extends TileEntitySpecialRenderer { private static final float Z_OFFSET = 2049 / 2048.0F; private static final HashMap<TileZonePlan, DynamicTextureBC> TEXTURES = new HashMap<TileZonePlan, DynamicTextureBC>(); @Override public void renderTileEntityAt(TileEntity tile, double tx, double ty, double tz, float partialTicks) { boolean rendered = true; TileZonePlan zonePlan = (TileZonePlan) tile; if (!TEXTURES.containsKey(zonePlan)) { DynamicTextureBC textureBC = new DynamicTextureBC(16, 16); TEXTURES.put(zonePlan, textureBC); rendered = false; } DynamicTextureBC textureBC = TEXTURES.get(zonePlan); FakeIcon fakeIcon = new FakeIcon(0, 1, 0, 1, 16, 16); byte[] previewColors = zonePlan.getPreviewTexture(!rendered); if (previewColors != null) { for (int y = 0; y < 8; y++) { for (int x = 0; x < 10; x++) { int col = MapColor.mapColorArray[previewColors[y * 10 + x]].colorValue; if ((x & 1) != (y & 1)) { int ocol = col; col = (ocol & 0xFF) * 15 / 16 | (((ocol & 0xFF00) >> 8) * 15 / 16) << 8 | (((ocol & 0xFF0000) >> 16) * 15 / 16) << 16; } textureBC.setColor(x + 3, y + 3, 0xFF000000 | col); } } } GL11.glPushMatrix(); GL11.glPushAttrib(GL11.GL_COLOR_BUFFER_BIT); GL11.glTranslatef((float) tx + 0.5F, (float) ty + 0.5F, (float) tz + 0.5F); GL11.glScalef(Z_OFFSET, Z_OFFSET, Z_OFFSET); GL11.glTranslatef(-0.5F, -0.5F, -0.5F); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); textureBC.updateTexture(); RenderEntityBlock.RenderInfo renderBox = new RenderEntityBlock.RenderInfo(); renderBox.setRenderSingleSide(((BlockBuildCraft) zonePlan.getBlockType()).getFrontSide(zonePlan.getBlockMetadata())); renderBox.texture = fakeIcon; renderBox.light = 15; RenderEntityBlock.INSTANCE.renderBlock(renderBox); GL11.glPopAttrib(); GL11.glPopMatrix(); } }