From b01b60272865b815d547a7f91bed7c6c98838b88 Mon Sep 17 00:00:00 2001 From: Sen Date: Wed, 28 May 2025 18:12:28 +0200 Subject: [PATCH] formatting for compressed data tree --- common/src/main/java/common/tags/Tag.java | 6 +++- common/src/main/java/common/tags/TagBool.java | 2 +- common/src/main/java/common/tags/TagByte.java | 2 +- .../main/java/common/tags/TagByteArray.java | 2 +- common/src/main/java/common/tags/TagChar.java | 2 +- .../src/main/java/common/tags/TagDouble.java | 2 +- .../src/main/java/common/tags/TagFloat.java | 2 +- common/src/main/java/common/tags/TagInt.java | 2 +- .../main/java/common/tags/TagIntArray.java | 2 +- common/src/main/java/common/tags/TagList.java | 16 +++++++-- common/src/main/java/common/tags/TagLong.java | 2 +- .../src/main/java/common/tags/TagObject.java | 36 +++++++++++++++++-- .../src/main/java/common/tags/TagShort.java | 2 +- .../src/main/java/common/tags/TagString.java | 2 +- .../main/java/common/tags/TagStringArray.java | 15 +++++++- .../server/command/commands/CommandSeed.java | 2 +- 16 files changed, 78 insertions(+), 19 deletions(-) diff --git a/common/src/main/java/common/tags/Tag.java b/common/src/main/java/common/tags/Tag.java index 401c857..fffc364 100755 --- a/common/src/main/java/common/tags/Tag.java +++ b/common/src/main/java/common/tags/Tag.java @@ -8,8 +8,12 @@ abstract class Tag { abstract void write(DataOutput output) throws IOException; abstract void read(DataInput input, int depth, SizeTracker tracker) throws IOException; public abstract String toString(); - protected abstract TagType getType(); + abstract TagType getType(); public abstract Tag copy(); + + String toString(int indent, int depth) { + return this.toString(); + } public boolean equals(Object other) { return other instanceof Tag && this.getType() == ((Tag)other).getType(); diff --git a/common/src/main/java/common/tags/TagBool.java b/common/src/main/java/common/tags/TagBool.java index 062b9e1..2ee2a80 100644 --- a/common/src/main/java/common/tags/TagBool.java +++ b/common/src/main/java/common/tags/TagBool.java @@ -23,7 +23,7 @@ class TagBool extends Tag { this.data = input.readBoolean(); } - protected TagType getType() { + TagType getType() { return TagType.BOOLEAN; } diff --git a/common/src/main/java/common/tags/TagByte.java b/common/src/main/java/common/tags/TagByte.java index a93cf11..12f86ec 100755 --- a/common/src/main/java/common/tags/TagByte.java +++ b/common/src/main/java/common/tags/TagByte.java @@ -23,7 +23,7 @@ class TagByte extends Tag { this.data = input.readByte(); } - protected TagType getType() { + TagType getType() { return TagType.BYTE; } diff --git a/common/src/main/java/common/tags/TagByteArray.java b/common/src/main/java/common/tags/TagByteArray.java index 5a5959a..e619211 100755 --- a/common/src/main/java/common/tags/TagByteArray.java +++ b/common/src/main/java/common/tags/TagByteArray.java @@ -28,7 +28,7 @@ class TagByteArray extends Tag { input.readFully(this.data); } - protected TagType getType() { + TagType getType() { return TagType.BYTE_ARRAY; } diff --git a/common/src/main/java/common/tags/TagChar.java b/common/src/main/java/common/tags/TagChar.java index 8a0ee36..ec281f8 100644 --- a/common/src/main/java/common/tags/TagChar.java +++ b/common/src/main/java/common/tags/TagChar.java @@ -23,7 +23,7 @@ class TagChar extends Tag { this.data = input.readChar(); } - protected TagType getType() { + TagType getType() { return TagType.CHAR; } diff --git a/common/src/main/java/common/tags/TagDouble.java b/common/src/main/java/common/tags/TagDouble.java index b155968..a4b3ed1 100755 --- a/common/src/main/java/common/tags/TagDouble.java +++ b/common/src/main/java/common/tags/TagDouble.java @@ -23,7 +23,7 @@ class TagDouble extends Tag { this.data = input.readDouble(); } - protected TagType getType() { + TagType getType() { return TagType.DOUBLE; } diff --git a/common/src/main/java/common/tags/TagFloat.java b/common/src/main/java/common/tags/TagFloat.java index 9122edf..0aae9f3 100755 --- a/common/src/main/java/common/tags/TagFloat.java +++ b/common/src/main/java/common/tags/TagFloat.java @@ -23,7 +23,7 @@ class TagFloat extends Tag { this.data = input.readFloat(); } - protected TagType getType() { + TagType getType() { return TagType.FLOAT; } diff --git a/common/src/main/java/common/tags/TagInt.java b/common/src/main/java/common/tags/TagInt.java index 75e355b..0d3a6b3 100755 --- a/common/src/main/java/common/tags/TagInt.java +++ b/common/src/main/java/common/tags/TagInt.java @@ -23,7 +23,7 @@ class TagInt extends Tag { this.data = input.readInt(); } - protected TagType getType() { + TagType getType() { return TagType.INT; } diff --git a/common/src/main/java/common/tags/TagIntArray.java b/common/src/main/java/common/tags/TagIntArray.java index 1ef8c82..6259e5d 100755 --- a/common/src/main/java/common/tags/TagIntArray.java +++ b/common/src/main/java/common/tags/TagIntArray.java @@ -32,7 +32,7 @@ class TagIntArray extends Tag { } } - protected TagType getType() { + TagType getType() { return TagType.INT_ARRAY; } diff --git a/common/src/main/java/common/tags/TagList.java b/common/src/main/java/common/tags/TagList.java index 3a52bcd..86a9899 100644 --- a/common/src/main/java/common/tags/TagList.java +++ b/common/src/main/java/common/tags/TagList.java @@ -5,6 +5,7 @@ import java.io.DataOutput; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import common.util.Util; class TagList extends Tag { private List list; @@ -37,7 +38,7 @@ class TagList extends Tag { } } - protected TagType getType() { + TagType getType() { return TagType.LIST; } @@ -46,11 +47,22 @@ class TagList extends Tag { for(int z = 0; z < this.list.size(); z++) { if(z != 0) sb.append(','); - sb.append(z).append(':').append(this.list.get(z)); + sb.append(this.list.get(z).toString()); } return sb.append(']').toString(); } + String toString(int indent, int depth) { + StringBuilder sb = new StringBuilder("["); + String prefix = Util.repeatString(' ', indent * (depth + 1)); + for(int z = 0; z < this.list.size(); z++) { + if(z != 0) + sb.append(','); + sb.append('\n').append(prefix).append(this.list.get(z).toString(indent, depth + 1)); + } + return sb.append('\n').append(Util.repeatString(' ', indent * depth)).append('}').toString(); + } + public Tag copy() { TagList list = new TagList(new ArrayList(this.list.size())); for(TagObject tag : this.list) { diff --git a/common/src/main/java/common/tags/TagLong.java b/common/src/main/java/common/tags/TagLong.java index b5648c6..ac2d2b3 100755 --- a/common/src/main/java/common/tags/TagLong.java +++ b/common/src/main/java/common/tags/TagLong.java @@ -23,7 +23,7 @@ class TagLong extends Tag { this.data = input.readLong(); } - protected TagType getType() { + TagType getType() { return TagType.LONG; } diff --git a/common/src/main/java/common/tags/TagObject.java b/common/src/main/java/common/tags/TagObject.java index 3f01be2..3a8f344 100755 --- a/common/src/main/java/common/tags/TagObject.java +++ b/common/src/main/java/common/tags/TagObject.java @@ -10,14 +10,18 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import common.collect.Lists; import common.collect.Maps; +import common.util.Util; import java.util.Set; +import java.util.function.Function; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; @@ -60,7 +64,7 @@ public class TagObject extends Tag { return this.tags.keySet(); } - protected TagType getType() { + TagType getType() { return TagType.OBJECT; } @@ -248,17 +252,39 @@ public class TagObject extends Tag { public void remove(String key) { this.tags.remove(key); } + + private List> getSortedEntries() { + List> list = Lists.newArrayList(this.tags.entrySet()); + Collections.sort(list, (e1, e2) -> e1.getValue().getType() == TagType.OBJECT && e2.getValue().getType() != TagType.OBJECT ? 1 : ( + e2.getValue().getType() == TagType.OBJECT && e1.getValue().getType() != TagType.OBJECT ? -1 : ( + (e1.getValue().getType() == TagType.LIST || e1.getValue().getType() == TagType.STRING_ARRAY) && + e2.getValue().getType() != TagType.LIST && e2.getValue().getType() != TagType.STRING_ARRAY ? 1 : ( + (e2.getValue().getType() == TagType.LIST || e2.getValue().getType() == TagType.STRING_ARRAY) && + e1.getValue().getType() != TagType.LIST && e1.getValue().getType() != TagType.STRING_ARRAY ? -1 : e1.getKey().compareTo(e2.getKey()))))); + return list; + } public String toString() { StringBuilder sb = new StringBuilder("{"); - for(Entry entry : this.tags.entrySet()) { + for(Entry entry : this.getSortedEntries()) { if(sb.length() != 1) sb.append(','); - sb.append(entry.getKey()).append(':').append(entry.getValue()); + sb.append(entry.getKey()).append(':').append(entry.getValue().toString()); } return sb.append('}').toString(); } + String toString(int indent, int depth) { + StringBuilder sb = new StringBuilder("{"); + String prefix = Util.repeatString(' ', indent * (depth + 1)); + for(Entry entry : this.getSortedEntries()) { + if(sb.length() != 1) + sb.append(','); + sb.append('\n').append(prefix).append(entry.getKey()).append(": ").append(entry.getValue().toString(indent, depth + 1)); + } + return sb.append('\n').append(Util.repeatString(' ', indent * depth)).append('}').toString(); + } + public boolean isEmpty() { return this.tags.isEmpty(); } @@ -301,6 +327,10 @@ public class TagObject extends Tag { } } } + + public String format(int indent) { + return indent == 0 ? this.toString() : this.toString(indent, 0); + } public static void write(TagObject tag, DataOutput out) throws IOException { tag.write(out); diff --git a/common/src/main/java/common/tags/TagShort.java b/common/src/main/java/common/tags/TagShort.java index 321eef6..15ed3e2 100755 --- a/common/src/main/java/common/tags/TagShort.java +++ b/common/src/main/java/common/tags/TagShort.java @@ -23,7 +23,7 @@ class TagShort extends Tag { this.data = input.readShort(); } - protected TagType getType() { + TagType getType() { return TagType.SHORT; } diff --git a/common/src/main/java/common/tags/TagString.java b/common/src/main/java/common/tags/TagString.java index 4f11bd0..bb0b814 100755 --- a/common/src/main/java/common/tags/TagString.java +++ b/common/src/main/java/common/tags/TagString.java @@ -27,7 +27,7 @@ class TagString extends Tag { tracker.read(2 * this.data.length()); } - protected TagType getType() { + TagType getType() { return TagType.STRING; } diff --git a/common/src/main/java/common/tags/TagStringArray.java b/common/src/main/java/common/tags/TagStringArray.java index 7adb7d3..eefd2b2 100644 --- a/common/src/main/java/common/tags/TagStringArray.java +++ b/common/src/main/java/common/tags/TagStringArray.java @@ -5,6 +5,8 @@ import java.io.DataOutput; import java.io.IOException; import java.util.Arrays; +import common.util.Util; + class TagStringArray extends Tag { private String[] data; @@ -32,7 +34,7 @@ class TagStringArray extends Tag { } } - protected TagType getType() { + TagType getType() { return TagType.STRING_ARRAY; } @@ -46,6 +48,17 @@ class TagStringArray extends Tag { return sb.append("]").toString(); } + String toString(int indent, int depth) { + StringBuilder sb = new StringBuilder("["); + String prefix = Util.repeatString(' ', indent * (depth + 1)); + for(int z = 0; z < this.data.length; z++) { + if(z != 0) + sb.append(','); + sb.append('\n').append(prefix).append("\"" + this.data[z].replace("\"", "\\\"") + "\""); + } + return sb.append('\n').append(Util.repeatString(' ', indent * depth)).append("]").toString(); + } + public Tag copy() { String[] data = new String[this.data.length]; System.arraycopy(this.data, 0, data, 0, this.data.length); diff --git a/server/src/main/java/server/command/commands/CommandSeed.java b/server/src/main/java/server/command/commands/CommandSeed.java index 0e8ebbe..536594a 100644 --- a/server/src/main/java/server/command/commands/CommandSeed.java +++ b/server/src/main/java/server/command/commands/CommandSeed.java @@ -16,7 +16,7 @@ public class CommandSeed extends Command { public Object exec(CommandEnvironment env, Executor exec, WorldServer world, boolean dump) { if(dump) - exec.logConsole("Daten: %s", world.dimension.dumpTags().toString()); + exec.logConsole("Daten: %s", world.dimension.dumpTags().format(4)); exec.logConsole("Startwert von %s: %d", world.dimension.getFormattedName(false), world.dimension.getSeed()); return world.dimension.getSeed(); }