package net.minecraft.server;
import java.util.Collection;
import java.util.Iterator;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class PersistentScoreboard extends PersistentBase {
private static final Logger b = LogManager.getLogger();
private Scoreboard c;
private NBTTagCompound d;
public PersistentScoreboard() {
this("scoreboard");
}
public PersistentScoreboard(String s) {
super(s);
}
public void a(Scoreboard scoreboard) {
this.c = scoreboard;
if (this.d != null) {
this.a(this.d);
}
}
public void a(NBTTagCompound nbttagcompound) {
if (this.c == null) {
this.d = nbttagcompound;
} else {
this.b(nbttagcompound.getList("Objectives", 10));
this.c(nbttagcompound.getList("PlayerScores", 10));
if (nbttagcompound.hasKeyOfType("DisplaySlots", 10)) {
this.c(nbttagcompound.getCompound("DisplaySlots"));
}
if (nbttagcompound.hasKeyOfType("Teams", 9)) {
this.a(nbttagcompound.getList("Teams", 10));
}
}
}
protected void a(NBTTagList nbttaglist) {
for (int i = 0; i < nbttaglist.size(); ++i) {
NBTTagCompound nbttagcompound = nbttaglist.get(i);
String s = nbttagcompound.getString("Name");
if (s.length() > 16) {
s = s.substring(0, 16);
}
ScoreboardTeam scoreboardteam = this.c.createTeam(s);
String s1 = nbttagcompound.getString("DisplayName");
if (s1.length() > 32) {
s1 = s1.substring(0, 32);
}
scoreboardteam.setDisplayName(s1);
if (nbttagcompound.hasKeyOfType("TeamColor", 8)) {
scoreboardteam.a(EnumChatFormat.b(nbttagcompound.getString("TeamColor")));
}
scoreboardteam.setPrefix(nbttagcompound.getString("Prefix"));
scoreboardteam.setSuffix(nbttagcompound.getString("Suffix"));
if (nbttagcompound.hasKeyOfType("AllowFriendlyFire", 99)) {
scoreboardteam.setAllowFriendlyFire(nbttagcompound.getBoolean("AllowFriendlyFire"));
}
if (nbttagcompound.hasKeyOfType("SeeFriendlyInvisibles", 99)) {
scoreboardteam.setCanSeeFriendlyInvisibles(nbttagcompound.getBoolean("SeeFriendlyInvisibles"));
}
ScoreboardTeamBase.EnumNameTagVisibility scoreboardteambase_enumnametagvisibility;
if (nbttagcompound.hasKeyOfType("NameTagVisibility", 8)) {
scoreboardteambase_enumnametagvisibility = ScoreboardTeamBase.EnumNameTagVisibility.a(nbttagcompound.getString("NameTagVisibility"));
if (scoreboardteambase_enumnametagvisibility != null) {
scoreboardteam.setNameTagVisibility(scoreboardteambase_enumnametagvisibility);
}
}
if (nbttagcompound.hasKeyOfType("DeathMessageVisibility", 8)) {
scoreboardteambase_enumnametagvisibility = ScoreboardTeamBase.EnumNameTagVisibility.a(nbttagcompound.getString("DeathMessageVisibility"));
if (scoreboardteambase_enumnametagvisibility != null) {
scoreboardteam.setDeathMessageVisibility(scoreboardteambase_enumnametagvisibility);
}
}
if (nbttagcompound.hasKeyOfType("CollisionRule", 8)) {
ScoreboardTeamBase.EnumTeamPush scoreboardteambase_enumteampush = ScoreboardTeamBase.EnumTeamPush.a(nbttagcompound.getString("CollisionRule"));
if (scoreboardteambase_enumteampush != null) {
scoreboardteam.setCollisionRule(scoreboardteambase_enumteampush);
}
}
this.a(scoreboardteam, nbttagcompound.getList("Players", 8));
}
}
protected void a(ScoreboardTeam scoreboardteam, NBTTagList nbttaglist) {
for (int i = 0; i < nbttaglist.size(); ++i) {
this.c.addPlayerToTeam(nbttaglist.getString(i), scoreboardteam.getName());
}
}
protected void c(NBTTagCompound nbttagcompound) {
for (int i = 0; i < 19; ++i) {
if (nbttagcompound.hasKeyOfType("slot_" + i, 8)) {
String s = nbttagcompound.getString("slot_" + i);
ScoreboardObjective scoreboardobjective = this.c.getObjective(s);
this.c.setDisplaySlot(i, scoreboardobjective);
}
}
}
protected void b(NBTTagList nbttaglist) {
for (int i = 0; i < nbttaglist.size(); ++i) {
NBTTagCompound nbttagcompound = nbttaglist.get(i);
IScoreboardCriteria iscoreboardcriteria = (IScoreboardCriteria) IScoreboardCriteria.criteria.get(nbttagcompound.getString("CriteriaName"));
if (iscoreboardcriteria != null) {
String s = nbttagcompound.getString("Name");
if (s.length() > 16) {
s = s.substring(0, 16);
}
ScoreboardObjective scoreboardobjective = this.c.registerObjective(s, iscoreboardcriteria);
scoreboardobjective.setDisplayName(nbttagcompound.getString("DisplayName"));
scoreboardobjective.a(IScoreboardCriteria.EnumScoreboardHealthDisplay.a(nbttagcompound.getString("RenderType")));
}
}
}
protected void c(NBTTagList nbttaglist) {
for (int i = 0; i < nbttaglist.size(); ++i) {
NBTTagCompound nbttagcompound = nbttaglist.get(i);
ScoreboardObjective scoreboardobjective = this.c.getObjective(nbttagcompound.getString("Objective"));
String s = nbttagcompound.getString("Name");
if (s.length() > 40) {
s = s.substring(0, 40);
}
ScoreboardScore scoreboardscore = this.c.getPlayerScoreForObjective(s, scoreboardobjective);
scoreboardscore.setScore(nbttagcompound.getInt("Score"));
if (nbttagcompound.hasKey("Locked")) {
scoreboardscore.a(nbttagcompound.getBoolean("Locked"));
}
}
}
public NBTTagCompound b(NBTTagCompound nbttagcompound) {
if (this.c == null) {
PersistentScoreboard.b.warn("Tried to save scoreboard without having a scoreboard...");
return nbttagcompound;
} else {
nbttagcompound.set("Objectives", this.b());
nbttagcompound.set("PlayerScores", this.e());
nbttagcompound.set("Teams", this.a());
this.d(nbttagcompound);
return nbttagcompound;
}
}
protected NBTTagList a() {
NBTTagList nbttaglist = new NBTTagList();
Collection collection = this.c.getTeams();
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
ScoreboardTeam scoreboardteam = (ScoreboardTeam) iterator.next();
if (!com.destroystokyo.paper.PaperConfig.saveEmptyScoreboardTeams && scoreboardteam.getPlayerNameSet().isEmpty()) continue; // Paper
NBTTagCompound nbttagcompound = new NBTTagCompound();
nbttagcompound.setString("Name", scoreboardteam.getName());
nbttagcompound.setString("DisplayName", scoreboardteam.getDisplayName());
if (scoreboardteam.m().b() >= 0) {
nbttagcompound.setString("TeamColor", scoreboardteam.m().e());
}
nbttagcompound.setString("Prefix", scoreboardteam.getPrefix());
nbttagcompound.setString("Suffix", scoreboardteam.getSuffix());
nbttagcompound.setBoolean("AllowFriendlyFire", scoreboardteam.allowFriendlyFire());
nbttagcompound.setBoolean("SeeFriendlyInvisibles", scoreboardteam.canSeeFriendlyInvisibles());
nbttagcompound.setString("NameTagVisibility", scoreboardteam.getNameTagVisibility().e);
nbttagcompound.setString("DeathMessageVisibility", scoreboardteam.getDeathMessageVisibility().e);
nbttagcompound.setString("CollisionRule", scoreboardteam.getCollisionRule().e);
NBTTagList nbttaglist1 = new NBTTagList();
Iterator iterator1 = scoreboardteam.getPlayerNameSet().iterator();
while (iterator1.hasNext()) {
String s = (String) iterator1.next();
nbttaglist1.add(new NBTTagString(s));
}
nbttagcompound.set("Players", nbttaglist1);
nbttaglist.add(nbttagcompound);
}
return nbttaglist;
}
protected void d(NBTTagCompound nbttagcompound) {
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
boolean flag = false;
for (int i = 0; i < 19; ++i) {
ScoreboardObjective scoreboardobjective = this.c.getObjectiveForSlot(i);
if (scoreboardobjective != null) {
nbttagcompound1.setString("slot_" + i, scoreboardobjective.getName());
flag = true;
}
}
if (flag) {
nbttagcompound.set("DisplaySlots", nbttagcompound1);
}
}
protected NBTTagList b() {
NBTTagList nbttaglist = new NBTTagList();
Collection collection = this.c.getObjectives();
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
ScoreboardObjective scoreboardobjective = (ScoreboardObjective) iterator.next();
if (scoreboardobjective.getCriteria() != null) {
NBTTagCompound nbttagcompound = new NBTTagCompound();
nbttagcompound.setString("Name", scoreboardobjective.getName());
nbttagcompound.setString("CriteriaName", scoreboardobjective.getCriteria().getName());
nbttagcompound.setString("DisplayName", scoreboardobjective.getDisplayName());
nbttagcompound.setString("RenderType", scoreboardobjective.e().a());
nbttaglist.add(nbttagcompound);
}
}
return nbttaglist;
}
protected NBTTagList e() {
NBTTagList nbttaglist = new NBTTagList();
Collection collection = this.c.getScores();
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
ScoreboardScore scoreboardscore = (ScoreboardScore) iterator.next();
if (scoreboardscore.getObjective() != null) {
NBTTagCompound nbttagcompound = new NBTTagCompound();
nbttagcompound.setString("Name", scoreboardscore.getPlayerName());
nbttagcompound.setString("Objective", scoreboardscore.getObjective().getName());
nbttagcompound.setInt("Score", scoreboardscore.getScore());
nbttagcompound.setBoolean("Locked", scoreboardscore.g());
nbttaglist.add(nbttagcompound);
}
}
return nbttaglist;
}
}