package net.minecraft.client.renderer.texturefx; import cpw.mods.fml.client.FMLTextureFX; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import net.minecraft.client.Minecraft; import net.minecraft.item.Item; import net.minecraft.util.ChunkCoordinates; @SideOnly(Side.CLIENT) public class TextureCompassFX extends FMLTextureFX { /** A reference to the Minecraft object. */ private Minecraft mc; /** Holds the image of the compass from items.png in rgb format. */ private int[] compassIconImageData = new int[256]; public double field_76868_i; public double field_76866_j; public static TextureCompassFX field_82391_c; public static int stileSizeBase = 16; public static int stileSizeSquare = 256; public static int stileSizeMask = 15; public static int stileSizeSquareMask = 255; public TextureCompassFX(Minecraft par1Minecraft) { super(Item.compass.getIconFromDamage(0)); this.mc = par1Minecraft; this.tileImage = 1; setup(); } @Override public void setup() { super.setup(); stileSizeBase = tileSizeBase; stileSizeSquare = tileSizeSquare; stileSizeMask = tileSizeMask; stileSizeSquareMask = tileSizeSquareMask; compassIconImageData = new int[tileSizeSquare]; try { BufferedImage var2 = ImageIO.read(mc.texturePackList.getSelectedTexturePack().getResourceAsStream("/gui/items.png")); int var3 = this.iconIndex % 16 * tileSizeBase; int var4 = this.iconIndex / 16 * tileSizeBase; var2.getRGB(var3, var4, tileSizeBase, tileSizeBase, this.compassIconImageData, 0, tileSizeBase); } catch (IOException var5) { var5.printStackTrace(); } field_82391_c = this; } public void onTick() { if (this.mc.theWorld != null && this.mc.thePlayer != null) { func_82390_a(this.mc.thePlayer.posX, this.mc.thePlayer.posZ, (double)this.mc.thePlayer.rotationYaw, false, false); } else { func_82390_a(0.0D, 0.0D, 0.0D, true, false); } } public static void func_82390_a(double par0, double par2, double par4, boolean par6, boolean par7) { int[] var8 = field_82391_c.compassIconImageData; byte[] var9 = field_82391_c.imageData; int var17; int var16; for (int var10 = 0; var10 < stileSizeSquare; ++var10) { int var11 = var8[var10] >> 24 & 255; int var12 = var8[var10] >> 16 & 255; int var13 = var8[var10] >> 8 & 255; int var14 = var8[var10] >> 0 & 255; if (field_82391_c.anaglyphEnabled) { int var15 = (var12 * 30 + var13 * 59 + var14 * 11) / 100; var16 = (var12 * 30 + var13 * 70) / 100; var17 = (var12 * 30 + var14 * 70) / 100; var12 = var15; var13 = var16; var14 = var17; } var9[var10 * 4 + 0] = (byte)var12; var9[var10 * 4 + 1] = (byte)var13; var9[var10 * 4 + 2] = (byte)var14; var9[var10 * 4 + 3] = (byte)var11; } double var27 = 0.0D; if (field_82391_c.mc.theWorld != null && !par6) { ChunkCoordinates var29 = field_82391_c.mc.theWorld.getSpawnPoint(); double var28 = (double)var29.posX - par0; double var32 = (double)var29.posZ - par2; var27 = (par4 - 90.0D) * Math.PI / 180.0D - Math.atan2(var32, var28); if (!field_82391_c.mc.theWorld.provider.isSurfaceWorld()) { var27 = Math.random() * Math.PI * 2.0D; } } double var30; if (par7) { field_82391_c.field_76868_i = var27; } else { for (var30 = var27 - field_82391_c.field_76868_i; var30 < -Math.PI; var30 += (Math.PI * 2D)) { ; } while (var30 >= Math.PI) { var30 -= (Math.PI * 2D); } if (var30 < -1.0D) { var30 = -1.0D; } if (var30 > 1.0D) { var30 = 1.0D; } field_82391_c.field_76866_j += var30 * 0.1D; field_82391_c.field_76866_j *= 0.8D; field_82391_c.field_76868_i += field_82391_c.field_76866_j; } var30 = Math.sin(field_82391_c.field_76868_i); double var31 = Math.cos(field_82391_c.field_76868_i); int var19; int var18; int var21; int var20; short var23; int var22; int var25; int var24; int var26; for (var16 = -(stileSizeBase >> 2); var16 <= (stileSizeBase >> 2); ++var16) { var17 = (int)((stileSizeBase >> 1) + 0.5D + var31 * (double)var16 * 0.3D); var18 = (int)((stileSizeBase >> 1) - 0.5D - var30 * (double)var16 * 0.3D * 0.5D); var19 = var18 * stileSizeBase + var17; var20 = 100; var21 = 100; var22 = 100; var23 = 255; if (field_82391_c.anaglyphEnabled) { var24 = (var20 * 30 + var21 * 59 + var22 * 11) / 100; var25 = (var20 * 30 + var21 * 70) / 100; var26 = (var20 * 30 + var22 * 70) / 100; var20 = var24; var21 = var25; var22 = var26; } var9[var19 * 4 + 0] = (byte)var20; var9[var19 * 4 + 1] = (byte)var21; var9[var19 * 4 + 2] = (byte)var22; var9[var19 * 4 + 3] = (byte)var23; } for (var16 = -(stileSizeBase>>2); var16 <= stileSizeBase; ++var16) { var17 = (int)((stileSizeBase >> 1) + 0.5D + var30 * (double)var16 * 0.3D); var18 = (int)((stileSizeBase >> 1) - 0.5D + var31 * (double)var16 * 0.3D * 0.5D); var19 = var18 * stileSizeBase + var17; var20 = var16 >= 0 ? 255 : 100; var21 = var16 >= 0 ? 20 : 100; var22 = var16 >= 0 ? 20 : 100; var23 = 255; if (field_82391_c.anaglyphEnabled) { var24 = (var20 * 30 + var21 * 59 + var22 * 11) / 100; var25 = (var20 * 30 + var21 * 70) / 100; var26 = (var20 * 30 + var22 * 70) / 100; var20 = var24; var21 = var25; var22 = var26; } var9[var19 * 4 + 0] = (byte)var20; var9[var19 * 4 + 1] = (byte)var21; var9[var19 * 4 + 2] = (byte)var22; var9[var19 * 4 + 3] = (byte)var23; } } }