package net.minecraft.world.storage; import java.util.Iterator; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; public class MapInfo { /** Reference for EntityPlayer object in MapInfo */ public final EntityPlayer entityplayerObj; public int[] field_76209_b; public int[] field_76210_c; /** * updated by x = mod(x*11,128) +1 x-1 is used to index field_76209_b and field_76210_c */ private int currentRandomNumber; private int ticksUntilPlayerLocationMapUpdate; /** * a cache of the result from getPlayersOnMap so that it is not resent when nothing changes */ private byte[] lastPlayerLocationOnMap; public int field_82569_d; private boolean field_82570_i; /** reference in MapInfo to MapData object */ final MapData mapDataObj; public MapInfo(MapData par1MapData, EntityPlayer par2EntityPlayer) { this.mapDataObj = par1MapData; this.field_76209_b = new int[128]; this.field_76210_c = new int[128]; this.currentRandomNumber = 0; this.ticksUntilPlayerLocationMapUpdate = 0; this.field_82570_i = false; this.entityplayerObj = par2EntityPlayer; for (int i = 0; i < this.field_76209_b.length; ++i) { this.field_76209_b[i] = 0; this.field_76210_c[i] = 127; } } /** * returns a 1+players*3 array, of x,y, and color . the name of this function may be partially wrong, as there is a * second branch to the code here */ public byte[] getPlayersOnMap(ItemStack par1ItemStack) { byte[] abyte; if (!this.field_82570_i) { abyte = new byte[] {(byte)2, this.mapDataObj.scale}; this.field_82570_i = true; return abyte; } else { int i; int j; if (--this.ticksUntilPlayerLocationMapUpdate < 0) { this.ticksUntilPlayerLocationMapUpdate = 4; abyte = new byte[this.mapDataObj.playersVisibleOnMap.size() * 3 + 1]; abyte[0] = 1; i = 0; for (Iterator iterator = this.mapDataObj.playersVisibleOnMap.values().iterator(); iterator.hasNext(); ++i) { MapCoord mapcoord = (MapCoord)iterator.next(); abyte[i * 3 + 1] = (byte)(mapcoord.iconSize << 4 | mapcoord.iconRotation & 15); abyte[i * 3 + 2] = mapcoord.centerX; abyte[i * 3 + 3] = mapcoord.centerZ; } boolean flag = !par1ItemStack.isOnItemFrame(); if (this.lastPlayerLocationOnMap != null && this.lastPlayerLocationOnMap.length == abyte.length) { for (j = 0; j < abyte.length; ++j) { if (abyte[j] != this.lastPlayerLocationOnMap[j]) { flag = false; break; } } } else { flag = false; } if (!flag) { this.lastPlayerLocationOnMap = abyte; return abyte; } } for (int k = 0; k < 1; ++k) { i = this.currentRandomNumber++ * 11 % 128; if (this.field_76209_b[i] >= 0) { int l = this.field_76210_c[i] - this.field_76209_b[i] + 1; j = this.field_76209_b[i]; byte[] abyte1 = new byte[l + 3]; abyte1[0] = 0; abyte1[1] = (byte)i; abyte1[2] = (byte)j; for (int i1 = 0; i1 < abyte1.length - 3; ++i1) { abyte1[i1 + 3] = this.mapDataObj.colors[(i1 + j) * 128 + i]; } this.field_76210_c[i] = -1; this.field_76209_b[i] = -1; return abyte1; } } return null; } } }