001package net.minecraft.scoreboard; 002 003import java.util.Collection; 004import java.util.Iterator; 005import net.minecraft.nbt.NBTTagCompound; 006import net.minecraft.nbt.NBTTagList; 007import net.minecraft.nbt.NBTTagString; 008import net.minecraft.server.MinecraftServer; 009import net.minecraft.world.WorldSavedData; 010 011public class ScoreboardSaveData extends WorldSavedData 012{ 013 private Scoreboard field_96507_a; 014 private NBTTagCompound field_96506_b; 015 016 public ScoreboardSaveData() 017 { 018 this("scoreboard"); 019 } 020 021 public ScoreboardSaveData(String par1Str) 022 { 023 super(par1Str); 024 } 025 026 public void func_96499_a(Scoreboard par1Scoreboard) 027 { 028 this.field_96507_a = par1Scoreboard; 029 030 if (this.field_96506_b != null) 031 { 032 this.readFromNBT(this.field_96506_b); 033 } 034 } 035 036 /** 037 * reads in data from the NBTTagCompound into this MapDataBase 038 */ 039 public void readFromNBT(NBTTagCompound par1NBTTagCompound) 040 { 041 if (this.field_96507_a == null) 042 { 043 this.field_96506_b = par1NBTTagCompound; 044 } 045 else 046 { 047 this.func_96501_b(par1NBTTagCompound.getTagList("Objectives")); 048 this.func_96500_c(par1NBTTagCompound.getTagList("PlayerScores")); 049 050 if (par1NBTTagCompound.hasKey("DisplaySlots")) 051 { 052 this.func_96504_c(par1NBTTagCompound.getCompoundTag("DisplaySlots")); 053 } 054 055 if (par1NBTTagCompound.hasKey("Teams")) 056 { 057 this.func_96498_a(par1NBTTagCompound.getTagList("Teams")); 058 } 059 } 060 } 061 062 protected void func_96498_a(NBTTagList par1NBTTagList) 063 { 064 for (int i = 0; i < par1NBTTagList.tagCount(); ++i) 065 { 066 NBTTagCompound nbttagcompound = (NBTTagCompound)par1NBTTagList.tagAt(i); 067 ScorePlayerTeam scoreplayerteam = this.field_96507_a.func_96527_f(nbttagcompound.getString("Name")); 068 scoreplayerteam.func_96664_a(nbttagcompound.getString("DisplayName")); 069 scoreplayerteam.func_96666_b(nbttagcompound.getString("Prefix")); 070 scoreplayerteam.func_96662_c(nbttagcompound.getString("Suffix")); 071 072 if (nbttagcompound.hasKey("AllowFriendlyFire")) 073 { 074 scoreplayerteam.func_96660_a(nbttagcompound.getBoolean("AllowFriendlyFire")); 075 } 076 077 if (nbttagcompound.hasKey("SeeFriendlyInvisibles")) 078 { 079 scoreplayerteam.func_98300_b(nbttagcompound.getBoolean("SeeFriendlyInvisibles")); 080 } 081 082 this.func_96502_a(scoreplayerteam, nbttagcompound.getTagList("Players")); 083 } 084 } 085 086 protected void func_96502_a(ScorePlayerTeam par1ScorePlayerTeam, NBTTagList par2NBTTagList) 087 { 088 for (int i = 0; i < par2NBTTagList.tagCount(); ++i) 089 { 090 this.field_96507_a.func_96521_a(((NBTTagString)par2NBTTagList.tagAt(i)).data, par1ScorePlayerTeam); 091 } 092 } 093 094 protected void func_96504_c(NBTTagCompound par1NBTTagCompound) 095 { 096 for (int i = 0; i < 3; ++i) 097 { 098 if (par1NBTTagCompound.hasKey("slot_" + i)) 099 { 100 String s = par1NBTTagCompound.getString("slot_" + i); 101 ScoreObjective scoreobjective = this.field_96507_a.func_96518_b(s); 102 this.field_96507_a.func_96530_a(i, scoreobjective); 103 } 104 } 105 } 106 107 protected void func_96501_b(NBTTagList par1NBTTagList) 108 { 109 for (int i = 0; i < par1NBTTagList.tagCount(); ++i) 110 { 111 NBTTagCompound nbttagcompound = (NBTTagCompound)par1NBTTagList.tagAt(i); 112 ScoreObjectiveCriteria scoreobjectivecriteria = (ScoreObjectiveCriteria)ScoreObjectiveCriteria.field_96643_a.get(nbttagcompound.getString("CriteriaName")); 113 ScoreObjective scoreobjective = this.field_96507_a.func_96535_a(nbttagcompound.getString("Name"), scoreobjectivecriteria); 114 scoreobjective.func_96681_a(nbttagcompound.getString("DisplayName")); 115 } 116 } 117 118 protected void func_96500_c(NBTTagList par1NBTTagList) 119 { 120 for (int i = 0; i < par1NBTTagList.tagCount(); ++i) 121 { 122 NBTTagCompound nbttagcompound = (NBTTagCompound)par1NBTTagList.tagAt(i); 123 ScoreObjective scoreobjective = this.field_96507_a.func_96518_b(nbttagcompound.getString("Objective")); 124 Score score = this.field_96507_a.func_96529_a(nbttagcompound.getString("Name"), scoreobjective); 125 score.func_96647_c(nbttagcompound.getInteger("Score")); 126 } 127 } 128 129 /** 130 * write data to NBTTagCompound from this MapDataBase, similar to Entities and TileEntities 131 */ 132 public void writeToNBT(NBTTagCompound par1NBTTagCompound) 133 { 134 if (this.field_96507_a == null) 135 { 136 MinecraftServer.getServer().func_98033_al().func_98236_b("Tried to save scoreboard without having a scoreboard..."); 137 } 138 else 139 { 140 par1NBTTagCompound.setTag("Objectives", this.func_96505_b()); 141 par1NBTTagCompound.setTag("PlayerScores", this.func_96503_e()); 142 par1NBTTagCompound.setTag("Teams", this.func_96496_a()); 143 this.func_96497_d(par1NBTTagCompound); 144 } 145 } 146 147 protected NBTTagList func_96496_a() 148 { 149 NBTTagList nbttaglist = new NBTTagList(); 150 Collection collection = this.field_96507_a.func_96525_g(); 151 Iterator iterator = collection.iterator(); 152 153 while (iterator.hasNext()) 154 { 155 ScorePlayerTeam scoreplayerteam = (ScorePlayerTeam)iterator.next(); 156 NBTTagCompound nbttagcompound = new NBTTagCompound(); 157 nbttagcompound.setString("Name", scoreplayerteam.func_96661_b()); 158 nbttagcompound.setString("DisplayName", scoreplayerteam.func_96669_c()); 159 nbttagcompound.setString("Prefix", scoreplayerteam.func_96668_e()); 160 nbttagcompound.setString("Suffix", scoreplayerteam.func_96663_f()); 161 nbttagcompound.setBoolean("AllowFriendlyFire", scoreplayerteam.func_96665_g()); 162 nbttagcompound.setBoolean("SeeFriendlyInvisibles", scoreplayerteam.func_98297_h()); 163 NBTTagList nbttaglist1 = new NBTTagList(); 164 Iterator iterator1 = scoreplayerteam.func_96670_d().iterator(); 165 166 while (iterator1.hasNext()) 167 { 168 String s = (String)iterator1.next(); 169 nbttaglist1.appendTag(new NBTTagString("", s)); 170 } 171 172 nbttagcompound.setTag("Players", nbttaglist1); 173 nbttaglist.appendTag(nbttagcompound); 174 } 175 176 return nbttaglist; 177 } 178 179 protected void func_96497_d(NBTTagCompound par1NBTTagCompound) 180 { 181 NBTTagCompound nbttagcompound1 = new NBTTagCompound(); 182 boolean flag = false; 183 184 for (int i = 0; i < 3; ++i) 185 { 186 ScoreObjective scoreobjective = this.field_96507_a.func_96539_a(i); 187 188 if (scoreobjective != null) 189 { 190 nbttagcompound1.setString("slot_" + i, scoreobjective.func_96679_b()); 191 flag = true; 192 } 193 } 194 195 if (flag) 196 { 197 par1NBTTagCompound.setCompoundTag("DisplaySlots", nbttagcompound1); 198 } 199 } 200 201 protected NBTTagList func_96505_b() 202 { 203 NBTTagList nbttaglist = new NBTTagList(); 204 Collection collection = this.field_96507_a.func_96514_c(); 205 Iterator iterator = collection.iterator(); 206 207 while (iterator.hasNext()) 208 { 209 ScoreObjective scoreobjective = (ScoreObjective)iterator.next(); 210 NBTTagCompound nbttagcompound = new NBTTagCompound(); 211 nbttagcompound.setString("Name", scoreobjective.func_96679_b()); 212 nbttagcompound.setString("CriteriaName", scoreobjective.func_96680_c().func_96636_a()); 213 nbttagcompound.setString("DisplayName", scoreobjective.func_96678_d()); 214 nbttaglist.appendTag(nbttagcompound); 215 } 216 217 return nbttaglist; 218 } 219 220 protected NBTTagList func_96503_e() 221 { 222 NBTTagList nbttaglist = new NBTTagList(); 223 Collection collection = this.field_96507_a.func_96528_e(); 224 Iterator iterator = collection.iterator(); 225 226 while (iterator.hasNext()) 227 { 228 Score score = (Score)iterator.next(); 229 NBTTagCompound nbttagcompound = new NBTTagCompound(); 230 nbttagcompound.setString("Name", score.func_96653_e()); 231 nbttagcompound.setString("Objective", score.func_96645_d().func_96679_b()); 232 nbttagcompound.setInteger("Score", score.func_96652_c()); 233 nbttaglist.appendTag(nbttagcompound); 234 } 235 236 return nbttaglist; 237 } 238}