aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/ScoreboardSaveData.h
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/ScoreboardSaveData.h')
-rw-r--r--Minecraft.World/ScoreboardSaveData.h189
1 files changed, 189 insertions, 0 deletions
diff --git a/Minecraft.World/ScoreboardSaveData.h b/Minecraft.World/ScoreboardSaveData.h
new file mode 100644
index 00000000..4a59b45e
--- /dev/null
+++ b/Minecraft.World/ScoreboardSaveData.h
@@ -0,0 +1,189 @@
+#pragma once
+
+// 4J Not converted
+#if 0
+class ScoreboardSaveData extends SavedData {
+ public static final String FILE_ID = "scoreboard";
+
+ private Scoreboard scoreboard;
+ private CompoundTag delayLoad;
+
+ public ScoreboardSaveData() {
+ this(FILE_ID);
+ }
+
+ public ScoreboardSaveData(String id) {
+ super(id);
+ }
+
+ public void setScoreboard(Scoreboard scoreboard) {
+ this.scoreboard = scoreboard;
+
+ if (delayLoad != null) {
+ load(delayLoad);
+ }
+ }
+
+ @Override
+ public void load(CompoundTag tag) {
+ if (scoreboard == null) {
+ delayLoad = tag;
+ return;
+ }
+
+ loadObjectives((ListTag<CompoundTag>) tag.getList("Objectives"));
+ loadPlayerScores((ListTag<CompoundTag>) tag.getList("PlayerScores"));
+
+ if (tag.contains("DisplaySlots")) {
+ loadDisplaySlots(tag.getCompound("DisplaySlots"));
+ }
+
+ if (tag.contains("Teams")) {
+ loadTeams((ListTag<CompoundTag>) tag.getList("Teams"));
+ }
+ }
+
+ protected void loadTeams(ListTag<CompoundTag> list) {
+ for (int i = 0; i < list.size(); i++) {
+ CompoundTag tag = list.get(i);
+
+ PlayerTeam team = scoreboard.addPlayerTeam(tag.getString("Name"));
+ team.setDisplayName(tag.getString("DisplayName"));
+ team.setPrefix(tag.getString("Prefix"));
+ team.setSuffix(tag.getString("Suffix"));
+ if (tag.contains("AllowFriendlyFire")) team.setAllowFriendlyFire(tag.getBoolean("AllowFriendlyFire"));
+ if (tag.contains("SeeFriendlyInvisibles")) team.setSeeFriendlyInvisibles(tag.getBoolean("SeeFriendlyInvisibles"));
+
+ loadTeamPlayers(team, (ListTag<StringTag>) tag.getList("Players"));
+ }
+ }
+
+ protected void loadTeamPlayers(PlayerTeam team, ListTag<StringTag> list) {
+ for (int i = 0; i < list.size(); i++) {
+ scoreboard.addPlayerToTeam(list.get(i).data, team);
+ }
+ }
+
+ protected void loadDisplaySlots(CompoundTag tag) {
+ for (int i = 0; i < Scoreboard.DISPLAY_SLOTS; i++) {
+ if (tag.contains("slot_" + i)) {
+ String name = tag.getString("slot_" + i);
+ Objective objective = scoreboard.getObjective(name);
+ scoreboard.setDisplayObjective(i, objective);
+ }
+ }
+ }
+
+ protected void loadObjectives(ListTag<CompoundTag> list) {
+ for (int i = 0; i < list.size(); i++) {
+ CompoundTag tag = list.get(i);
+
+ ObjectiveCriteria criteria = ObjectiveCriteria.CRITERIA_BY_NAME.get(tag.getString("CriteriaName"));
+ Objective objective = scoreboard.addObjective(tag.getString("Name"), criteria);
+ objective.setDisplayName(tag.getString("DisplayName"));
+ }
+ }
+
+ protected void loadPlayerScores(ListTag<CompoundTag> list) {
+ for (int i = 0; i < list.size(); i++) {
+ CompoundTag tag = list.get(i);
+
+ Objective objective = scoreboard.getObjective(tag.getString("Objective"));
+ Score score = scoreboard.getPlayerScore(tag.getString("Name"), objective);
+ score.setScore(tag.getInt("Score"));
+ }
+ }
+
+ @Override
+ public void save(CompoundTag tag) {
+ if (scoreboard == null) {
+ MinecraftServer.getInstance().getLogger().warning("Tried to save scoreboard without having a scoreboard...");
+ return;
+ }
+
+ tag.put("Objectives", saveObjectives());
+ tag.put("PlayerScores", savePlayerScores());
+ tag.put("Teams", saveTeams());
+
+ saveDisplaySlots(tag);
+ }
+
+ protected ListTag<CompoundTag> saveTeams() {
+ ListTag<CompoundTag> list = new ListTag<CompoundTag>();
+ Collection<PlayerTeam> teams = scoreboard.getPlayerTeams();
+
+ for (PlayerTeam team : teams) {
+ CompoundTag tag = new CompoundTag();
+
+ tag.putString("Name", team.getName());
+ tag.putString("DisplayName", team.getDisplayName());
+ tag.putString("Prefix", team.getPrefix());
+ tag.putString("Suffix", team.getSuffix());
+ tag.putBoolean("AllowFriendlyFire", team.isAllowFriendlyFire());
+ tag.putBoolean("SeeFriendlyInvisibles", team.canSeeFriendlyInvisibles());
+
+ ListTag<StringTag> playerList = new ListTag<StringTag>();
+
+ for (String player : team.getPlayers()) {
+ playerList.add(new StringTag("", player));
+ }
+
+ tag.put("Players", playerList);
+
+ list.add(tag);
+ }
+
+ return list;
+ }
+
+ protected void saveDisplaySlots(CompoundTag tag) {
+ CompoundTag slots = new CompoundTag();
+ boolean hasDisplaySlot = false;
+
+ for (int i = 0; i < Scoreboard.DISPLAY_SLOTS; i++) {
+ Objective objective = scoreboard.getDisplayObjective(i);
+
+ if (objective != null) {
+ slots.putString("slot_" + i, objective.getName());
+ hasDisplaySlot = true;
+ }
+ }
+
+ if (hasDisplaySlot) tag.putCompound("DisplaySlots", slots);
+ }
+
+ protected ListTag<CompoundTag> saveObjectives() {
+ ListTag<CompoundTag> list = new ListTag<CompoundTag>();
+ Collection<Objective> objectives = scoreboard.getObjectives();
+
+ for (Objective objective : objectives) {
+ CompoundTag tag = new CompoundTag();
+
+ tag.putString("Name", objective.getName());
+ tag.putString("CriteriaName", objective.getCriteria().getName());
+ tag.putString("DisplayName", objective.getDisplayName());
+
+ list.add(tag);
+ }
+
+ return list;
+ }
+
+ protected ListTag<CompoundTag> savePlayerScores() {
+ ListTag<CompoundTag> list = new ListTag<CompoundTag>();
+ Collection<Score> scores = scoreboard.getScores();
+
+ for (Score score : scores) {
+ CompoundTag tag = new CompoundTag();
+
+ tag.putString("Name", score.getOwner());
+ tag.putString("Objective", score.getObjective().getName());
+ tag.putInt("Score", score.getScore());
+
+ list.add(tag);
+ }
+
+ return list;
+ }
+};
+#endif \ No newline at end of file