SNBT Serialization now implemented
This commit is contained in:
parent
84b37f8b04
commit
daf9cb7376
16 changed files with 54 additions and 28 deletions
|
@ -383,6 +383,8 @@ class StringBuilder {
|
||||||
|
|
||||||
StringBuilder();
|
StringBuilder();
|
||||||
|
|
||||||
|
bool get isEmpty => _buffer.isEmpty;
|
||||||
|
|
||||||
void append(String value) {
|
void append(String value) {
|
||||||
_buffer += value;
|
_buffer += value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,7 +85,7 @@ abstract class Tag {
|
||||||
static void writeStringifiedNamedTag(
|
static void writeStringifiedNamedTag(
|
||||||
Tag tag, StringBuilder builder, int indents) {
|
Tag tag, StringBuilder builder, int indents) {
|
||||||
if (tag.getType() != 0) {
|
if (tag.getType() != 0) {
|
||||||
if (builder != "") {
|
if (!builder.isEmpty) {
|
||||||
// Write name
|
// Write name
|
||||||
if (tag.shouldQuoteName()) {
|
if (tag.shouldQuoteName()) {
|
||||||
builder.append("${"".padLeft(indents, "\t")}\"${tag.getKey()}\": ");
|
builder.append("${"".padLeft(indents, "\t")}\"${tag.getKey()}\": ");
|
||||||
|
@ -93,7 +93,7 @@ abstract class Tag {
|
||||||
builder.append("${"".padLeft(indents, '\t')}${tag.getKey()}: ");
|
builder.append("${"".padLeft(indents, '\t')}${tag.getKey()}: ");
|
||||||
}
|
}
|
||||||
|
|
||||||
tag.writeStringifiedValue(builder, indents + 1);
|
tag.writeStringifiedValue(builder, indents + 1, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ abstract class Tag {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent);
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList);
|
||||||
|
|
||||||
bool equals(dynamic object) {
|
bool equals(dynamic object) {
|
||||||
if (object == null || object is! Tag) return false;
|
if (object == null || object is! Tag) return false;
|
||||||
|
|
|
@ -48,7 +48,8 @@ class ByteArrayTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
builder.append("[B; ${value.join("B, ")}B]");
|
builder.append(
|
||||||
|
"${isList ? "".padLeft(indent, '\t') : ""}[B; ${value.join("B, ")}B]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ class ByteTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
builder.append("${value}b");
|
builder.append("${value}b");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,9 +87,9 @@ class CompoundTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
Iterator<Tag> it = value.values.iterator;
|
Iterator<Tag> it = value.values.iterator;
|
||||||
builder.append("{\n");
|
builder.append("${isList ? "".padLeft(indent - 1, '\t') : ""}{\n");
|
||||||
|
|
||||||
bool firstEntry = true;
|
bool firstEntry = true;
|
||||||
while (it.moveNext()) {
|
while (it.moveNext()) {
|
||||||
|
@ -101,6 +101,6 @@ class CompoundTag extends Tag {
|
||||||
}
|
}
|
||||||
Tag.writeStringifiedNamedTag(t, builder, indent);
|
Tag.writeStringifiedNamedTag(t, builder, indent);
|
||||||
}
|
}
|
||||||
builder.append("\n${"".padLeft(indent - 1, '\t')}}\n");
|
builder.append("\n${"".padLeft(indent - 1, '\t')}}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ class DoubleTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
builder.append("${value}d");
|
builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}d");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,5 +21,5 @@ class EndTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {}
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ class FloatTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
builder.append("${value}f");
|
builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}f");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,8 @@ class IntArrayTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
builder.append("[I; ${value.join('I, ')}I]");
|
builder.append(
|
||||||
|
"${isList ? "".padLeft(indent, '\t') : ""}[I; ${value.join('I, ')}I]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ class IntTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
builder.append("${value}i");
|
builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}i");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,20 @@ class ListTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
builder.append("[\n");
|
builder.append("${isList ? "".padLeft(indent - 1, '\t') : ""}[\n");
|
||||||
|
Iterator<Tag> it = value.iterator;
|
||||||
|
bool firstTag = true;
|
||||||
|
while (it.moveNext()) {
|
||||||
|
Tag tag = it.current;
|
||||||
|
if (firstTag)
|
||||||
|
firstTag = !firstTag;
|
||||||
|
else {
|
||||||
|
builder.append(",\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
tag.writeStringifiedValue(builder, indent + 1, true);
|
||||||
|
}
|
||||||
|
builder.append("\n${"".padLeft(indent - 1, '\t')}]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,8 @@ class LongArrayTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
builder.append("[L; ${value.join('L, ')}L]");
|
builder.append(
|
||||||
|
"${isList ? "".padLeft(indent, '\t') : ""}[L; ${value.join('L, ')}L]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ class LongTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
builder.append("${value}L");
|
builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}L");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ class ShortTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
builder.append("${value}S");
|
builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}S");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ class StringTag extends Tag {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeStringifiedValue(StringBuilder builder, int indent) {
|
void writeStringifiedValue(StringBuilder builder, int indent, bool isList) {
|
||||||
builder.append("\"${value}\"");
|
builder.append("${isList ? "".padLeft(indent, '\t') : ""}\"${value}\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,4 +65,12 @@ void main() {
|
||||||
Tag.writeStringifiedNamedTag(ct, sb, 0);
|
Tag.writeStringifiedNamedTag(ct, sb, 0);
|
||||||
print(sb.toString());
|
print(sb.toString());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("Read BigTest, Output to SNBT", () async {
|
||||||
|
CompoundTag ct =
|
||||||
|
await NbtIo.read("${Directory.current.path}/test/bigtest.nbt");
|
||||||
|
StringBuilder sb = StringBuilder();
|
||||||
|
Tag.writeStringifiedNamedTag(ct, sb, 0);
|
||||||
|
print(sb.toString());
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue