001 package net.minecraft.src; 002 003 import java.util.Iterator; 004 005 public class MapInfo 006 { 007 /** Reference for EntityPlayer object in MapInfo */ 008 public final EntityPlayer entityplayerObj; 009 public int[] field_76209_b; 010 public int[] field_76210_c; 011 012 /** 013 * updated by x = mod(x*11,128) +1 x-1 is used to index field_76209_b and field_76210_c 014 */ 015 private int currentRandomNumber; 016 private int ticksUntilPlayerLocationMapUpdate; 017 018 /** 019 * a cache of the result from getPlayersOnMap so that it is not resent when nothing changes 020 */ 021 private byte[] lastPlayerLocationOnMap; 022 public int field_82569_d; 023 private boolean field_82570_i; 024 025 /** reference in MapInfo to MapData object */ 026 final MapData mapDataObj; 027 028 public MapInfo(MapData par1MapData, EntityPlayer par2EntityPlayer) 029 { 030 this.mapDataObj = par1MapData; 031 this.field_76209_b = new int[128]; 032 this.field_76210_c = new int[128]; 033 this.currentRandomNumber = 0; 034 this.ticksUntilPlayerLocationMapUpdate = 0; 035 this.field_82570_i = false; 036 this.entityplayerObj = par2EntityPlayer; 037 038 for (int var3 = 0; var3 < this.field_76209_b.length; ++var3) 039 { 040 this.field_76209_b[var3] = 0; 041 this.field_76210_c[var3] = 127; 042 } 043 } 044 045 /** 046 * returns a 1+players*3 array, of x,y, and color . the name of this function may be partially wrong, as there is a 047 * second branch to the code here 048 */ 049 public byte[] getPlayersOnMap(ItemStack par1ItemStack) 050 { 051 byte[] var2; 052 053 if (!this.field_82570_i) 054 { 055 var2 = new byte[] {(byte)2, this.mapDataObj.scale}; 056 this.field_82570_i = true; 057 return var2; 058 } 059 else 060 { 061 int var3; 062 int var10; 063 064 if (--this.ticksUntilPlayerLocationMapUpdate < 0) 065 { 066 this.ticksUntilPlayerLocationMapUpdate = 4; 067 var2 = new byte[this.mapDataObj.playersVisibleOnMap.size() * 3 + 1]; 068 var2[0] = 1; 069 var3 = 0; 070 071 for (Iterator var4 = this.mapDataObj.playersVisibleOnMap.values().iterator(); var4.hasNext(); ++var3) 072 { 073 MapCoord var5 = (MapCoord)var4.next(); 074 var2[var3 * 3 + 1] = (byte)(var5.iconSize << 4 | var5.iconRotation & 15); 075 var2[var3 * 3 + 2] = var5.centerX; 076 var2[var3 * 3 + 3] = var5.centerZ; 077 } 078 079 boolean var9 = !par1ItemStack.isOnItemFrame(); 080 081 if (this.lastPlayerLocationOnMap != null && this.lastPlayerLocationOnMap.length == var2.length) 082 { 083 for (var10 = 0; var10 < var2.length; ++var10) 084 { 085 if (var2[var10] != this.lastPlayerLocationOnMap[var10]) 086 { 087 var9 = false; 088 break; 089 } 090 } 091 } 092 else 093 { 094 var9 = false; 095 } 096 097 if (!var9) 098 { 099 this.lastPlayerLocationOnMap = var2; 100 return var2; 101 } 102 } 103 104 for (int var8 = 0; var8 < 1; ++var8) 105 { 106 var3 = this.currentRandomNumber++ * 11 % 128; 107 108 if (this.field_76209_b[var3] >= 0) 109 { 110 int var11 = this.field_76210_c[var3] - this.field_76209_b[var3] + 1; 111 var10 = this.field_76209_b[var3]; 112 byte[] var6 = new byte[var11 + 3]; 113 var6[0] = 0; 114 var6[1] = (byte)var3; 115 var6[2] = (byte)var10; 116 117 for (int var7 = 0; var7 < var6.length - 3; ++var7) 118 { 119 var6[var7 + 3] = this.mapDataObj.colors[(var7 + var10) * 128 + var3]; 120 } 121 122 this.field_76210_c[var3] = -1; 123 this.field_76209_b[var3] = -1; 124 return var6; 125 } 126 } 127 128 return null; 129 } 130 } 131 }