Implement basic SNBT reader and testsuite

This commit is contained in:
zontreck 2024-06-06 14:14:13 -07:00
parent 396c660113
commit a0f372693b
17 changed files with 352 additions and 2 deletions

View file

@ -52,4 +52,16 @@ class ByteArrayTag extends Tag {
builder.append(
"${isList ? "".padLeft(indent, '\t') : ""}[B; ${value.join("B, ")}B]");
}
@override
void readStringifiedValue(StringReader reader) {
reader.expect("[");
while (reader.peek() != "]") {
value.add(int.parse(reader.readNumber()));
reader.expect("b");
if (reader.peek() == ",") reader.next();
}
reader.expect("]");
}
}

View file

@ -39,4 +39,12 @@ class ByteTag extends Tag {
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
builder.append("${value}b");
}
@override
void readStringifiedValue(StringReader reader) {
String val = reader.readNumber();
value = int.parse(val);
reader.expect("b");
}
}

View file

@ -190,4 +190,16 @@ class CompoundTag extends Tag implements Map<String, Tag> {
@override
Iterable<Tag> get values => value.values;
@override
void readStringifiedValue(StringReader reader) {
reader.expect("{");
while (reader.peek() != "}") {
Tag tag = Tag.readStringifiedNamedTag(reader);
put(tag.getKey(), tag);
}
reader.expect("}");
}
}

View file

@ -39,4 +39,12 @@ class DoubleTag extends Tag {
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}d");
}
@override
void readStringifiedValue(StringReader reader) {
double val = double.parse(reader.readNumber());
value = val;
reader.expect("d");
}
}

View file

@ -22,4 +22,7 @@ class EndTag extends Tag {
@override
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {}
@override
void readStringifiedValue(StringReader reader) {}
}

View file

@ -38,4 +38,12 @@ class FloatTag extends Tag {
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}f");
}
@override
void readStringifiedValue(StringReader reader) {
double val = double.parse(reader.readNumber());
value = val;
reader.expect("f");
}
}

View file

@ -51,4 +51,15 @@ class IntArrayTag extends Tag {
builder.append(
"${isList ? "".padLeft(indent, '\t') : ""}[I; ${value.join('I, ')}I]");
}
@override
void readStringifiedValue(StringReader reader) {
reader.expect("[");
while (reader.peek() != "]") {
value.add(int.parse(reader.readNumber()));
if (reader.peek() == ",") reader.next();
}
reader.expect("]");
}
}

View file

@ -38,4 +38,10 @@ class IntTag extends Tag {
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}i");
}
@override
void readStringifiedValue(StringReader reader) {
String val = reader.readNumber();
value = int.parse(val);
}
}

View file

@ -103,4 +103,15 @@ class ListTag extends Tag {
}
builder.append("\n${"".padLeft(indent - 1, '\t')}]");
}
@override
void readStringifiedValue(StringReader reader) {
reader.expect("[");
while (reader.peek() != "]") {
value.add(Tag.readStringifiedNamedTag(reader));
if (reader.peek() == ",") reader.next();
}
reader.expect("]");
}
}

View file

@ -55,4 +55,16 @@ class LongArrayTag extends Tag {
builder.append(
"${isList ? "".padLeft(indent, '\t') : ""}[L; ${value.join('L, ')}L]");
}
@override
void readStringifiedValue(StringReader reader) {
reader.expect("[");
while (reader.peek() != "]") {
value.add(int.parse(reader.readNumber()));
reader.expect("l");
if (reader.peek() == ",") reader.next();
}
reader.expect("]");
}
}

View file

@ -38,4 +38,12 @@ class LongTag extends Tag {
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}L");
}
@override
void readStringifiedValue(StringReader reader) {
int val = int.parse(reader.readNumber());
value = val;
reader.expect("l");
}
}

View file

@ -38,4 +38,12 @@ class ShortTag extends Tag {
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}S");
}
@override
void readStringifiedValue(StringReader reader) {
int val = int.parse(reader.readNumber());
value = val;
reader.expect("s");
}
}

View file

@ -38,4 +38,10 @@ class StringTag extends Tag {
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
builder.append("${isList ? "".padLeft(indent, '\t') : ""}\"${value}\"");
}
@override
void readStringifiedValue(StringReader reader) {
String str = reader.readString();
value = str;
}
}