From 815c52e5d7b2d6afb915ef09ddb1a7d935b03640 Mon Sep 17 00:00:00 2001 From: Sen Date: Wed, 28 May 2025 17:07:33 +0200 Subject: [PATCH] further compressed data tree cleanup --- .../main/java/common/dimension/Dimension.java | 4 + .../main/java/common/tags/TagByteArray.java | 6 +- .../main/java/common/tags/TagInterpreter.java | 423 +++++++++--------- common/src/main/java/common/tags/TagList.java | 4 +- common/src/main/java/common/tags/TagNull.java | 26 -- .../src/main/java/common/tags/TagObject.java | 6 +- common/src/main/java/common/tags/TagType.java | 30 +- .../server/command/commands/CommandSeed.java | 6 +- 8 files changed, 240 insertions(+), 265 deletions(-) delete mode 100755 common/src/main/java/common/tags/TagNull.java diff --git a/common/src/main/java/common/dimension/Dimension.java b/common/src/main/java/common/dimension/Dimension.java index 65d1afe..03c1c1a 100755 --- a/common/src/main/java/common/dimension/Dimension.java +++ b/common/src/main/java/common/dimension/Dimension.java @@ -1086,6 +1086,10 @@ public abstract class Dimension extends Nameable implements Comparable stack = new Stack(); - for (int j = 0; j < p_150310_0_.length(); ++j) + for (int z = 0; z < str.length(); z++) { - char c0 = p_150310_0_.charAt(j); + char ch = str.charAt(z); - if (c0 == 34) + if (ch == '"') { - if (func_179271_b(p_150310_0_, j)) + if (isEscaped(str, z)) { - if (!flag) + if (!quote) { - throw new TagException("Illegal use of \\\": " + p_150310_0_); + throw new TagException("Illegal use of \\\": " + str); } } else { - flag = !flag; + quote = !quote; } } - else if (!flag) + else if (!quote) { - if (c0 != 123 && c0 != 91) + if (ch != '{' && ch != '[') { - if (c0 == 125 && (stack.isEmpty() || ((Character)stack.pop()).charValue() != 123)) + if (ch == '}' && (stack.isEmpty() || ((Character)stack.pop()).charValue() != '{')) { - throw new TagException("Unbalanced curly brackets {}: " + p_150310_0_); + throw new TagException("Unbalanced curly brackets {}: " + str); } - if (c0 == 93 && (stack.isEmpty() || ((Character)stack.pop()).charValue() != 91)) + if (ch == ']' && (stack.isEmpty() || ((Character)stack.pop()).charValue() != '[')) { - throw new TagException("Unbalanced square brackets []: " + p_150310_0_); + throw new TagException("Unbalanced square brackets []: " + str); } } else { if (stack.isEmpty()) { - ++i; + ++count; } - stack.push(Character.valueOf(c0)); + stack.push(Character.valueOf(ch)); } } } - if (flag) + if (quote) { - throw new TagException("Unbalanced quotation: " + p_150310_0_); + throw new TagException("Unbalanced quotation: " + str); } else if (!stack.isEmpty()) { - throw new TagException("Unbalanced brackets: " + p_150310_0_); + throw new TagException("Unbalanced brackets: " + str); } else { - if (i == 0 && !p_150310_0_.isEmpty()) + if (count == 0 && !str.isEmpty()) { - i = 1; + count = 1; } - return i; + return count; } } - static TagInterpreter.Any func_150316_a(String p_150316_0_, String p_150316_1_) throws TagException + static TagInterpreter.Parser parseSection(String id, String str) throws TagException { - p_150316_1_ = p_150316_1_.trim(); + str = str.trim(); - if (p_150316_1_.startsWith("{")) + if (str.startsWith("{")) { - p_150316_1_ = p_150316_1_.substring(1, p_150316_1_.length() - 1); + str = str.substring(1, str.length() - 1); TagInterpreter.Compound tag; - String s1; + String section; - for (tag = new TagInterpreter.Compound(p_150316_0_); p_150316_1_.length() > 0; p_150316_1_ = p_150316_1_.substring(s1.length() + 1)) + for (tag = new TagInterpreter.Compound(id); str.length() > 0; str = str.substring(section.length() + 1)) { - s1 = func_150314_a(p_150316_1_, true); + section = splitSection(str, true); - if (s1.length() > 0) + if (section.length() > 0) { - boolean flag1 = false; - tag.field_150491_b.add(func_179270_a(s1, flag1)); + tag.parsers.add(parseSubsection(section, false)); } - if (p_150316_1_.length() < s1.length() + 1) + if (str.length() < section.length() + 1) { break; } - char c1 = p_150316_1_.charAt(s1.length()); + char ch = str.charAt(section.length()); - if (c1 != 44 && c1 != 123 && c1 != 125 && c1 != 91 && c1 != 93) + if (ch != ',' && ch != '{' && ch != '}' && ch != '[' && ch != ']') { - throw new TagException("Unexpected token \'" + c1 + "\' at: " + p_150316_1_.substring(s1.length())); + throw new TagException("Unexpected token \'" + ch + "\' at: " + str.substring(section.length())); } } return tag; } - else if (p_150316_1_.startsWith("[") && !PATTERN.matcher(p_150316_1_).matches()) + else if (str.startsWith("[") && !INT_BYTE_ARRAY.matcher(str).matches() && !BYTE_ARRAY.matcher(str).matches()) { - p_150316_1_ = p_150316_1_.substring(1, p_150316_1_.length() - 1); + str = str.substring(1, str.length() - 1); TagInterpreter.List list; - String s; + String section; - for (list = new TagInterpreter.List(p_150316_0_); p_150316_1_.length() > 0; p_150316_1_ = p_150316_1_.substring(s.length() + 1)) + for (list = new TagInterpreter.List(id); str.length() > 0; str = str.substring(section.length() + 1)) { - s = func_150314_a(p_150316_1_, false); + section = splitSection(str, false); - if (s.length() > 0) + if (section.length() > 0) { - boolean flag = true; - list.data.add(func_179270_a(s, flag)); + list.parsers.add(parseSubsection(section, true)); } - if (p_150316_1_.length() < s.length() + 1) + if (str.length() < section.length() + 1) { break; } - char c0 = p_150316_1_.charAt(s.length()); + char ch = str.charAt(section.length()); - if (c0 != 44 && c0 != 123 && c0 != 125 && c0 != 91 && c0 != 93) + if (ch != ',' && ch != '{' && ch != '}' && ch != '[' && ch != ']') { - throw new TagException("Unexpected token \'" + c0 + "\' at: " + p_150316_1_.substring(s.length())); + throw new TagException("Unexpected token \'" + ch + "\' at: " + str.substring(section.length())); } } @@ -163,202 +162,202 @@ class TagInterpreter } else { - return new TagInterpreter.Primitive(p_150316_0_, p_150316_1_); + return new TagInterpreter.Primitive(id, str); } } - private static TagInterpreter.Any func_179270_a(String p_179270_0_, boolean p_179270_1_) throws TagException + private static TagInterpreter.Parser parseSubsection(String str, boolean list) throws TagException { - String s = func_150313_b(p_179270_0_, p_179270_1_); - String s1 = func_150311_c(p_179270_0_, p_179270_1_); - return func_150316_a(s, s1); + String key = getKey(str, list); + String value = getValue(str, list); + return parseSection(key, value); } - private static String func_150314_a(String p_150314_0_, boolean p_150314_1_) throws TagException + private static String splitSection(String str, boolean noList) throws TagException { - int i = func_150312_a(p_150314_0_, ':'); - int j = func_150312_a(p_150314_0_, ','); + int colon = findSeparator(str, ':'); + int comma = findSeparator(str, ','); - if (p_150314_1_) + if (noList) { - if (i == -1) + if (colon == -1) { - throw new TagException("Unable to locate name/value separator for string: " + p_150314_0_); + throw new TagException("Unable to locate name/value separator for string: " + str); } - if (j != -1 && j < i) + if (comma != -1 && comma < colon) { - throw new TagException("Name error at: " + p_150314_0_); + throw new TagException("Name error at: " + str); } } - else if (i == -1 || i > j) + else if (colon == -1 || colon > comma) { - i = -1; + colon = -1; } - return func_179269_a(p_150314_0_, i); + return split(str, colon); } - private static String func_179269_a(String p_179269_0_, int p_179269_1_) throws TagException + private static String split(String str, int index) throws TagException { Stack stack = new Stack(); - int i = p_179269_1_ + 1; - boolean flag = false; - boolean flag1 = false; - boolean flag2 = false; + int idx = index + 1; + boolean quote = false; + boolean quoteFirst = false; + boolean printable = false; - for (int j = 0; i < p_179269_0_.length(); ++i) + for (int quoteEnd = 0; idx < str.length(); ++idx) { - char c0 = p_179269_0_.charAt(i); + char ch = str.charAt(idx); - if (c0 == 34) + if (ch == '"') { - if (func_179271_b(p_179269_0_, i)) + if (isEscaped(str, idx)) { - if (!flag) + if (!quote) { - throw new TagException("Illegal use of \\\": " + p_179269_0_); + throw new TagException("Illegal use of \\\": " + str); } } else { - flag = !flag; + quote = !quote; - if (flag && !flag2) + if (quote && !printable) { - flag1 = true; + quoteFirst = true; } - if (!flag) + if (!quote) { - j = i; + quoteEnd = idx; } } } - else if (!flag) + else if (!quote) { - if (c0 != 123 && c0 != 91) + if (ch != '{' && ch != '[') { - if (c0 == 125 && (stack.isEmpty() || ((Character)stack.pop()).charValue() != 123)) + if (ch == '}' && (stack.isEmpty() || ((Character)stack.pop()).charValue() != '{')) { - throw new TagException("Unbalanced curly brackets {}: " + p_179269_0_); + throw new TagException("Unbalanced curly brackets {}: " + str); } - if (c0 == 93 && (stack.isEmpty() || ((Character)stack.pop()).charValue() != 91)) + if (ch == ']' && (stack.isEmpty() || ((Character)stack.pop()).charValue() != '[')) { - throw new TagException("Unbalanced square brackets []: " + p_179269_0_); + throw new TagException("Unbalanced square brackets []: " + str); } - if (c0 == 44 && stack.isEmpty()) + if (ch == ',' && stack.isEmpty()) { - return p_179269_0_.substring(0, i); + return str.substring(0, idx); } } else { - stack.push(Character.valueOf(c0)); + stack.push(Character.valueOf(ch)); } } - if (!Character.isWhitespace(c0)) + if (!Character.isWhitespace(ch)) { - if (!flag && flag1 && j != i) + if (!quote && quoteFirst && quoteEnd != idx) { - return p_179269_0_.substring(0, j + 1); + return str.substring(0, quoteEnd + 1); } - flag2 = true; + printable = true; } } - return p_179269_0_.substring(0, i); + return str.substring(0, idx); } - private static String func_150313_b(String p_150313_0_, boolean p_150313_1_) throws TagException + private static String getKey(String str, boolean list) throws TagException { - if (p_150313_1_) + if (list) { - p_150313_0_ = p_150313_0_.trim(); + str = str.trim(); - if (p_150313_0_.startsWith("{") || p_150313_0_.startsWith("[")) + if (str.startsWith("{") || str.startsWith("[")) { return ""; } } - int i = func_150312_a(p_150313_0_, ':'); + int colon = findSeparator(str, ':'); - if (i == -1) + if (colon == -1) { - if (p_150313_1_) + if (list) { return ""; } else { - throw new TagException("Unable to locate name/value separator for string: " + p_150313_0_); + throw new TagException("Unable to locate name/value separator for string: " + str); } } else { - return p_150313_0_.substring(0, i).trim(); + return str.substring(0, colon).trim(); } } - private static String func_150311_c(String p_150311_0_, boolean p_150311_1_) throws TagException + private static String getValue(String str, boolean list) throws TagException { - if (p_150311_1_) + if (list) { - p_150311_0_ = p_150311_0_.trim(); + str = str.trim(); - if (p_150311_0_.startsWith("{") || p_150311_0_.startsWith("[")) + if (str.startsWith("{") || str.startsWith("[")) { - return p_150311_0_; + return str; } } - int i = func_150312_a(p_150311_0_, ':'); + int colon = findSeparator(str, ':'); - if (i == -1) + if (colon == -1) { - if (p_150311_1_) + if (list) { - return p_150311_0_; + return str; } else { - throw new TagException("Unable to locate name/value separator for string: " + p_150311_0_); + throw new TagException("Unable to locate name/value separator for string: " + str); } } else { - return p_150311_0_.substring(i + 1).trim(); + return str.substring(colon + 1).trim(); } } - private static int func_150312_a(String p_150312_0_, char p_150312_1_) + private static int findSeparator(String str, char separator) { - int i = 0; + int idx = 0; - for (boolean flag = true; i < p_150312_0_.length(); ++i) + for (boolean noQuote = true; idx < str.length(); idx++) { - char c0 = p_150312_0_.charAt(i); + char ch = str.charAt(idx); - if (c0 == 34) + if (ch == '"') { - if (!func_179271_b(p_150312_0_, i)) + if (!isEscaped(str, idx)) { - flag = !flag; + noQuote = !noQuote; } } - else if (flag) + else if (noQuote) { - if (c0 == p_150312_1_) + if (ch == separator) { - return i; + return idx; } - if (c0 == 123 || c0 == 91) + if (ch == '{' || ch == '[') { return -1; } @@ -368,47 +367,47 @@ class TagInterpreter return -1; } - private static boolean func_179271_b(String p_179271_0_, int p_179271_1_) + private static boolean isEscaped(String str, int index) { - return p_179271_1_ > 0 && p_179271_0_.charAt(p_179271_1_ - 1) == 92 && !func_179271_b(p_179271_0_, p_179271_1_ - 1); + return index > 0 && str.charAt(index - 1) == '\\' && !isEscaped(str, index - 1); } - abstract static class Any + abstract static class Parser { - protected String json; + protected String section; public abstract Tag parse() throws TagException; } - static class Compound extends TagInterpreter.Any + static class Compound extends TagInterpreter.Parser { - protected java.util.List field_150491_b = Lists.newArrayList(); + protected java.util.List parsers = Lists.newArrayList(); - public Compound(String p_i45137_1_) + public Compound(String section) { - this.json = p_i45137_1_; + this.section = section; } public Tag parse() throws TagException { TagObject tag = new TagObject(); - for (TagInterpreter.Any any : this.field_150491_b) + for (TagInterpreter.Parser any : this.parsers) { - tag.set(any.json, any.parse()); + tag.set(any.section, any.parse()); } return tag; } } - static class List extends TagInterpreter.Any + static class List extends TagInterpreter.Parser { - protected java.util.List data = Lists.newArrayList(); + protected java.util.List parsers = Lists.newArrayList(); - public List(String json) + public List(String section) { - this.json = json; + this.section = section; } public Tag parse() throws TagException @@ -416,25 +415,25 @@ class TagInterpreter TagList list = null; java.util.List strs = null; - for (TagInterpreter.Any any : this.data) + for (TagInterpreter.Parser any : this.parsers) { Tag tag = any.parse(); if(tag.getType() == TagType.STRING) { if(list != null) - throw new TagException("Cannot use mixed types for list: " + any.json); + throw new TagException("Cannot use mixed types for list: " + any.section); if(strs == null) - strs = new ArrayList(this.data.size()); + strs = new ArrayList(this.parsers.size()); strs.add(((TagString)tag).getString()); } else if(tag.getType() == TagType.OBJECT) { if(strs != null) - throw new TagException("Cannot use mixed types for list: " + any.json); + throw new TagException("Cannot use mixed types for list: " + any.section); if(list == null) - list = new TagList(new ArrayList(this.data.size())); + list = new TagList(new ArrayList(this.parsers.size())); list.getList().add(((TagObject)tag)); } else { - throw new TagException("Type cannot be put in a list: " + any.json); + throw new TagException("Type cannot be put in a list: " + any.section); } } @@ -442,7 +441,7 @@ class TagInterpreter } } - static class Primitive extends TagInterpreter.Any + static class Primitive extends TagInterpreter.Parser { private static final Pattern DOUBLE = Pattern.compile("[-+]?[0-9]*\\.?[0-9]+[d|D]"); private static final Pattern FLOAT = Pattern.compile("[-+]?[0-9]*\\.?[0-9]+[f|F]"); @@ -451,133 +450,143 @@ class TagInterpreter private static final Pattern SHORT = Pattern.compile("[-+]?[0-9]+[s|S]"); private static final Pattern INTEGER = Pattern.compile("[-+]?[0-9]+"); private static final Pattern DOUBLE_UNTYPED = Pattern.compile("[-+]?[0-9]*\\.?[0-9]+"); -// private static final Splitter SPLITTER = Splitter.on(',').omitEmptyStrings(); - protected String jsonValue; + + protected String value; - public Primitive(String p_i45139_1_, String p_i45139_2_) + public Primitive(String section, String value) { - this.json = p_i45139_1_; - this.jsonValue = p_i45139_2_; + this.section = section; + this.value = value; } public Tag parse() throws TagException { try { - if (DOUBLE.matcher(this.jsonValue).matches()) + if (DOUBLE.matcher(this.value).matches()) { - return new TagDouble(Double.parseDouble(this.jsonValue.substring(0, this.jsonValue.length() - 1))); + return new TagDouble(Double.parseDouble(this.value.substring(0, this.value.length() - 1))); } - if (FLOAT.matcher(this.jsonValue).matches()) + if (FLOAT.matcher(this.value).matches()) { - return new TagFloat(Float.parseFloat(this.jsonValue.substring(0, this.jsonValue.length() - 1))); + return new TagFloat(Float.parseFloat(this.value.substring(0, this.value.length() - 1))); } - if (BYTE.matcher(this.jsonValue).matches()) + if (BYTE.matcher(this.value).matches()) { - return new TagByte(Byte.parseByte(this.jsonValue.substring(0, this.jsonValue.length() - 1))); + return new TagByte(Byte.parseByte(this.value.substring(0, this.value.length() - 1))); } - if (LONG.matcher(this.jsonValue).matches()) + if (LONG.matcher(this.value).matches()) { - return new TagLong(Long.parseLong(this.jsonValue.substring(0, this.jsonValue.length() - 1))); + return new TagLong(Long.parseLong(this.value.substring(0, this.value.length() - 1))); } - if (SHORT.matcher(this.jsonValue).matches()) + if (SHORT.matcher(this.value).matches()) { - return new TagShort(Short.parseShort(this.jsonValue.substring(0, this.jsonValue.length() - 1))); + return new TagShort(Short.parseShort(this.value.substring(0, this.value.length() - 1))); } - if (INTEGER.matcher(this.jsonValue).matches()) + if (INTEGER.matcher(this.value).matches()) { - return new TagInt(Integer.parseInt(this.jsonValue)); + return new TagInt(Integer.parseInt(this.value)); } - if (DOUBLE_UNTYPED.matcher(this.jsonValue).matches()) + if (DOUBLE_UNTYPED.matcher(this.value).matches()) { - return new TagDouble(Double.parseDouble(this.jsonValue)); + return new TagDouble(Double.parseDouble(this.value)); } - if (this.jsonValue.equalsIgnoreCase("true") || this.jsonValue.equalsIgnoreCase("false")) + if (this.value.equalsIgnoreCase("true") || this.value.equalsIgnoreCase("false")) { - return new TagBool(Boolean.parseBoolean(this.jsonValue)); + return new TagBool(Boolean.parseBoolean(this.value)); } } - catch (NumberFormatException var6) + catch (NumberFormatException e) { - this.jsonValue = this.jsonValue.replaceAll("\\\\\"", "\""); - return new TagString(this.jsonValue); + this.value = this.value.replaceAll("\\\\\"", "\""); + return new TagString(this.value); } - if (this.jsonValue.startsWith("[") && this.jsonValue.endsWith("]")) + if (this.value.startsWith("[") && this.value.endsWith("]")) { - String s = this.jsonValue.substring(1, this.jsonValue.length() - 1); - String[] astring = s.split(","); - + String str = this.value.substring(1, this.value.length() - 1); try { - int[] aint = new int[astring.length]; - - for (int j = 0; j < astring.length; ++j) - { - aint[j] = Integer.parseInt(astring[j].trim()); - } - - return new TagIntArray(aint); + if(str.startsWith("0x")) { + str = str.substring(2); + if((str.length() & 1) == 1) + str = "0" + str; + byte[] bytes = new byte[str.length() / 2]; + for (int z = 0; z < bytes.length; z++) + { + bytes[z] = (byte)Integer.parseUnsignedInt(str.substring(z * 2, (z + 1) * 2), 16); + } + return new TagByteArray(bytes); + } + else { + String[] elems = str.split(","); + int[] ints = new int[elems.length]; + for (int z = 0; z < elems.length; z++) + { + ints[z] = Integer.parseInt(elems[z].trim()); + } + return new TagIntArray(ints); + } } - catch (NumberFormatException var5) + catch (NumberFormatException e) { - return new TagString(this.jsonValue); + return new TagString(this.value); } } else { - if (this.jsonValue.startsWith("'") && this.jsonValue.endsWith("'")) + if (this.value.startsWith("'") && this.value.endsWith("'")) { - String s = this.jsonValue.substring(1, this.jsonValue.length() - 1); - if(s.length() == 1 && s.charAt(0) != '\\') { - return new TagChar(s.charAt(0)); + String str = this.value.substring(1, this.value.length() - 1); + if(str.length() == 1 && str.charAt(0) != '\\') { + return new TagChar(str.charAt(0)); } - else if(s.length() == 2 && s.charAt(0) == '\\') { - switch(s.charAt(1)) { + else if(str.length() == 2 && str.charAt(0) == '\\') { + switch(str.charAt(1)) { case '\\': return new TagChar('\\'); case 'n': return new TagChar('\n'); } } - else if((s.length() == 4 && s.startsWith("\\x")) || (s.length() == 6 && s.startsWith("\\u"))) { + else if((str.length() == 4 && str.startsWith("\\x")) || (str.length() == 6 && str.startsWith("\\u"))) { try { - return new TagChar((char)Integer.parseUnsignedInt(s.substring(2), 16)); + return new TagChar((char)Integer.parseUnsignedInt(str.substring(2), 16)); } catch(NumberFormatException e) { } } } - if (this.jsonValue.startsWith("\"") && this.jsonValue.endsWith("\"")) + if (this.value.startsWith("\"") && this.value.endsWith("\"")) { - this.jsonValue = this.jsonValue.substring(1, this.jsonValue.length() - 1); + this.value = this.value.substring(1, this.value.length() - 1); } - this.jsonValue = this.jsonValue.replaceAll("\\\\\"", "\""); - StringBuilder stringbuilder = new StringBuilder(); + this.value = this.value.replaceAll("\\\\\"", "\""); + StringBuilder sb = new StringBuilder(); - for (int i = 0; i < this.jsonValue.length(); ++i) + for (int z = 0; z < this.value.length(); z++) { - if (i < this.jsonValue.length() - 1 && this.jsonValue.charAt(i) == 92 && this.jsonValue.charAt(i + 1) == 92) + if (z < this.value.length() - 1 && this.value.charAt(z) == '\\' && this.value.charAt(z + 1) == '\\') { - stringbuilder.append('\\'); - ++i; + sb.append('\\'); + ++z; } else { - stringbuilder.append(this.jsonValue.charAt(i)); + sb.append(this.value.charAt(z)); } } - return new TagString(stringbuilder.toString()); + return new TagString(sb.toString()); } } } diff --git a/common/src/main/java/common/tags/TagList.java b/common/src/main/java/common/tags/TagList.java index 93d89da..3a52bcd 100644 --- a/common/src/main/java/common/tags/TagList.java +++ b/common/src/main/java/common/tags/TagList.java @@ -25,8 +25,8 @@ class TagList extends Tag { void read(DataInput input, int depth, SizeTracker tracker) throws IOException { tracker.read(36); - if(depth > 512) - throw new RuntimeException("Objekt ist zu komplex, die Tiefe ist größer als 512"); + if(depth > 256) + throw new IOException("Objekt ist zu komplex, die Tiefe ist größer als 256"); int len = input.readInt(); tracker.read(4 * len); this.list = new ArrayList(len); diff --git a/common/src/main/java/common/tags/TagNull.java b/common/src/main/java/common/tags/TagNull.java deleted file mode 100755 index eb9d27c..0000000 --- a/common/src/main/java/common/tags/TagNull.java +++ /dev/null @@ -1,26 +0,0 @@ -package common.tags; - -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; - -class TagNull extends Tag { - void read(DataInput input, int depth, SizeTracker tracker) throws IOException { - tracker.read(8); - } - - void write(DataOutput output) throws IOException { - } - - protected TagType getType() { - return TagType.NULL; - } - - public String toString() { - return "END"; - } - - public Tag copy() { - return new TagNull(); - } -} diff --git a/common/src/main/java/common/tags/TagObject.java b/common/src/main/java/common/tags/TagObject.java index c17085a..3f01be2 100755 --- a/common/src/main/java/common/tags/TagObject.java +++ b/common/src/main/java/common/tags/TagObject.java @@ -42,8 +42,8 @@ public class TagObject extends Tag { void read(DataInput input, int depth, SizeTracker tracker) throws IOException { tracker.read(48); - if(depth > 512) - throw new RuntimeException("Objekt ist zu komplex, die Tiefe ist größer als 512"); + if(depth > 256) + throw new IOException("Objekt ist zu komplex, die Tiefe ist größer als 256"); this.tags.clear(); byte id; while((id = input.readByte()) != 0) { @@ -52,7 +52,7 @@ public class TagObject extends Tag { Tag tag = TagType.create(id); tag.read(input, depth + 1, tracker); if(this.tags.put(key, tag) != null) - tracker.read(36); + throw new IOException("Objekt ist ungültig, Tag '" + key + "' ist mehrfach vorhanden"); } } diff --git a/common/src/main/java/common/tags/TagType.java b/common/src/main/java/common/tags/TagType.java index e0a27d1..c29db1d 100644 --- a/common/src/main/java/common/tags/TagType.java +++ b/common/src/main/java/common/tags/TagType.java @@ -1,13 +1,11 @@ package common.tags; -import java.io.DataInput; -import java.io.DataOutput; import java.io.IOException; enum TagType { NULL { // 0 protected Tag createTag() { - return new TagNull(); + return null; } }, OBJECT { // 1 @@ -89,28 +87,10 @@ enum TagType { TYPES = values(); } - static Tag create(byte id) { - return id >= 0 && id < TYPES.length ? TYPES[id].createTag() : new Tag() { - void write(DataOutput output) throws IOException { - throw new IOException("Kann keinen ungültigen Tag mit ID #" + id + " schreiben"); - } - - void read(DataInput input, int depth, SizeTracker tracker) throws IOException { - throw new IOException("Kann keinen ungültigen Tag mit ID #" + id + " lesen"); - } - - public String toString() { - return ""; - } - - protected TagType getType() { - return null; - } - - public Tag copy() { - return this; - } - }; + static Tag create(byte id) throws IOException { + if(id <= 0 || id >= TYPES.length) + throw new IOException("Kann keinen gültigen Tag mit ID #" + id + " lesen"); + return TYPES[id].createTag(); } private TagType() { diff --git a/server/src/main/java/server/command/commands/CommandSeed.java b/server/src/main/java/server/command/commands/CommandSeed.java index aa52527..0e8ebbe 100644 --- a/server/src/main/java/server/command/commands/CommandSeed.java +++ b/server/src/main/java/server/command/commands/CommandSeed.java @@ -10,9 +10,13 @@ public class CommandSeed extends Command { super("seed"); this.addWorld("dim", true); + + this.addFlag("dump", 'd'); } - public Object exec(CommandEnvironment env, Executor exec, WorldServer world) { + public Object exec(CommandEnvironment env, Executor exec, WorldServer world, boolean dump) { + if(dump) + exec.logConsole("Daten: %s", world.dimension.dumpTags().toString()); exec.logConsole("Startwert von %s: %d", world.dimension.getFormattedName(false), world.dimension.getSeed()); return world.dimension.getSeed(); }