    001    package net.minecraft.src;
    002
    003    import cpw.mods.fml.common.Side;
    004    import cpw.mods.fml.common.asm.SideOnly;
    005    import java.awt.image.BufferedImage;
    006    import java.util.Iterator;
    007    import org.lwjgl.opengl.GL11;
    008
    009    @SideOnly(Side.CLIENT)
    010    public class MapItemRenderer
    011    {
    012        private int[] intArray = new int[16384];
    013        private int bufferedImage;
    014        private GameSettings gameSettings;
    015        private FontRenderer fontRenderer;
    016
    017        public MapItemRenderer(FontRenderer par1FontRenderer, GameSettings par2GameSettings, RenderEngine par3RenderEngine)
    018        {
    019            this.gameSettings = par2GameSettings;
    020            this.fontRenderer = par1FontRenderer;
    021            this.bufferedImage = par3RenderEngine.allocateAndSetupTexture(new BufferedImage(128, 128, 2));
    022
    023            for (int var4 = 0; var4 < 16384; ++var4)
    024            {
    025                this.intArray[var4] = 0;
    026            }
    027        }
    028
    029        public void renderMap(EntityPlayer par1EntityPlayer, RenderEngine par2RenderEngine, MapData par3MapData)
    030        {
    031            for (int var4 = 0; var4 < 16384; ++var4)
    032            {
    033                byte var5 = par3MapData.colors[var4];
    034
    035                if (var5 / 4 == 0)
    036                {
    037                    this.intArray[var4] = (var4 + var4 / 128 & 1) * 8 + 16 << 24;
    038                }
    039                else
    040                {
    041                    int var6 = MapColor.mapColorArray[var5 / 4].colorValue;
    042                    int var7 = var5 & 3;
    043                    short var8 = 220;
    044
    045                    if (var7 == 2)
    046                    {
    047                        var8 = 255;
    048                    }
    049
    050                    if (var7 == 0)
    051                    {
    052                        var8 = 180;
    053                    }
    054
    055                    int var9 = (var6 >> 16 & 255) * var8 / 255;
    056                    int var10 = (var6 >> 8 & 255) * var8 / 255;
    057                    int var11 = (var6 & 255) * var8 / 255;
    058
    059                    if (this.gameSettings.anaglyph)
    060                    {
    061                        int var12 = (var9 * 30 + var10 * 59 + var11 * 11) / 100;
    062                        int var13 = (var9 * 30 + var10 * 70) / 100;
    063                        int var14 = (var9 * 30 + var11 * 70) / 100;
    064                        var9 = var12;
    065                        var10 = var13;
    066                        var11 = var14;
    067                    }
    068
    069                    this.intArray[var4] = -16777216 | var9 << 16 | var10 << 8 | var11;
    070                }
    071            }
    072
    073            par2RenderEngine.createTextureFromBytes(this.intArray, 128, 128, this.bufferedImage);
    074            byte var15 = 0;
    075            byte var16 = 0;
    076            Tessellator var17 = Tessellator.instance;
    077            float var18 = 0.0F;
    078            GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.bufferedImage);
    079            GL11.glEnable(GL11.GL_BLEND);
    080            GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
    081            GL11.glDisable(GL11.GL_ALPHA_TEST);
    082            var17.startDrawingQuads();
    083            var17.addVertexWithUV((double)((float)(var15 + 0) + var18), (double)((float)(var16 + 128) - var18), -0.009999999776482582D, 0.0D, 1.0D);
    084            var17.addVertexWithUV((double)((float)(var15 + 128) - var18), (double)((float)(var16 + 128) - var18), -0.009999999776482582D, 1.0D, 1.0D);
    085            var17.addVertexWithUV((double)((float)(var15 + 128) - var18), (double)((float)(var16 + 0) + var18), -0.009999999776482582D, 1.0D, 0.0D);
    086            var17.addVertexWithUV((double)((float)(var15 + 0) + var18), (double)((float)(var16 + 0) + var18), -0.009999999776482582D, 0.0D, 0.0D);
    087            var17.draw();
    088            GL11.glEnable(GL11.GL_ALPHA_TEST);
    089            GL11.glDisable(GL11.GL_BLEND);
    090            par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/misc/mapicons.png"));
    091            Iterator var19 = par3MapData.playersVisibleOnMap.iterator();
    092
    093            while (var19.hasNext())
    094            {
    095                MapCoord var20 = (MapCoord)var19.next();
    096                GL11.glPushMatrix();
    097                GL11.glTranslatef((float)var15 + (float)var20.centerX / 2.0F + 64.0F, (float)var16 + (float)var20.centerZ / 2.0F + 64.0F, -0.02F);
    098                GL11.glRotatef((float)(var20.iconRotation * 360) / 16.0F, 0.0F, 0.0F, 1.0F);
    099                GL11.glScalef(4.0F, 4.0F, 3.0F);
    100                GL11.glTranslatef(-0.125F, 0.125F, 0.0F);
    101                float var21 = (float)(var20.iconSize % 4 + 0) / 4.0F;
    102                float var23 = (float)(var20.iconSize / 4 + 0) / 4.0F;
    103                float var22 = (float)(var20.iconSize % 4 + 1) / 4.0F;
    104                float var24 = (float)(var20.iconSize / 4 + 1) / 4.0F;
    105                var17.startDrawingQuads();
    106                var17.addVertexWithUV(-1.0D, 1.0D, 0.0D, (double)var21, (double)var23);
    107                var17.addVertexWithUV(1.0D, 1.0D, 0.0D, (double)var22, (double)var23);
    108                var17.addVertexWithUV(1.0D, -1.0D, 0.0D, (double)var22, (double)var24);
    109                var17.addVertexWithUV(-1.0D, -1.0D, 0.0D, (double)var21, (double)var24);
    110                var17.draw();
    111                GL11.glPopMatrix();
    112            }
    113
    114            GL11.glPushMatrix();
    115            GL11.glTranslatef(0.0F, 0.0F, -0.04F);
    116            GL11.glScalef(1.0F, 1.0F, 1.0F);
    117            this.fontRenderer.drawString(par3MapData.mapName, var15, var16, -16777216);
    118            GL11.glPopMatrix();
    119        }
    120    }