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