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