diff --git a/lib/consts.dart b/lib/consts.dart index 38461ee..185c20e 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -1,3 +1,4 @@ class Constants { - static const VERSION = "1.3.010625+1127"; + static const VERSION = "1.3.012225+0304"; + static const NBT_REVISION = "1.3.012225+0304"; } diff --git a/lib/nbt/Stream.dart b/lib/nbt/Stream.dart index abcc65f..cb25227 100644 --- a/lib/nbt/Stream.dart +++ b/lib/nbt/Stream.dart @@ -537,7 +537,8 @@ class StringReader { // Read a number (int or double) String readNumber() { StringBuffer result = StringBuffer(); - while (canRead && (isDigit(peek()) || peek() == '.' || peek() == '-')) { + while (canRead && + (isDigit(peek()) || peek() == '.' || peek() == '-' || peek() == "+")) { result.write(next()); } return result.toString(); diff --git a/lib/nbt/Tag.dart b/lib/nbt/Tag.dart index fd9e4e3..cc87972 100644 --- a/lib/nbt/Tag.dart +++ b/lib/nbt/Tag.dart @@ -73,6 +73,10 @@ enum TagType { break; } + if (val == "-" || val == "+") { + reader.next(); + } + if (val == '{') { ret = TagType.Compound; // Detected a CompoundTag reader.next(); // Consume '{' diff --git a/lib/nbt/impl/DoubleTag.dart b/lib/nbt/impl/DoubleTag.dart index b1ecde4..461689f 100644 --- a/lib/nbt/impl/DoubleTag.dart +++ b/lib/nbt/impl/DoubleTag.dart @@ -1,3 +1,5 @@ +import 'package:intl/intl.dart'; + import '../Stream.dart'; import '../Tag.dart'; @@ -41,13 +43,16 @@ class DoubleTag extends Tag { @override void prettyPrint(int indent, bool recurse) { + NumberFormat nf = NumberFormat("###.##", "en_US"); print( - "${"".padLeft(indent, '\t')}${Tag.getCanonicalName(getTagType())}: $value"); + "${"".padLeft(indent, '\t')}${Tag.getCanonicalName(getTagType())}: ${nf.format(value)}"); } @override void writeStringifiedValue(StringBuilder builder, int indent, bool isList) { - builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}d"); + NumberFormat nf = NumberFormat("###.##", "en_US"); + builder.append( + "${isList ? "".padLeft(indent, '\t') : ""}${nf.format(value)}d"); } @override diff --git a/lib/nbt/impl/FloatTag.dart b/lib/nbt/impl/FloatTag.dart index 22802de..c05cba6 100644 --- a/lib/nbt/impl/FloatTag.dart +++ b/lib/nbt/impl/FloatTag.dart @@ -1,3 +1,5 @@ +import 'package:intl/intl.dart'; + import '../Stream.dart'; import '../Tag.dart'; @@ -40,13 +42,16 @@ class FloatTag extends Tag { @override void prettyPrint(int indent, bool recurse) { + NumberFormat nf = NumberFormat("###.##", "en_US"); print( - "${"".padLeft(indent, '\t')}${Tag.getCanonicalName(getTagType())}: $value"); + "${"".padLeft(indent, '\t')}${Tag.getCanonicalName(getTagType())}: ${nf.format(value)}"); } @override void writeStringifiedValue(StringBuilder builder, int indent, bool isList) { - builder.append("${isList ? "".padLeft(indent, '\t') : ""}${value}f"); + NumberFormat nf = NumberFormat("###.##", "en_US"); + builder.append( + "${isList ? "".padLeft(indent, '\t') : ""}${nf.format(value)}f"); } @override diff --git a/pubspec.yaml b/pubspec.yaml index 183561b..ee74a5c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: libac_dart description: "Aria's Creations code library" -version: 1.3.010625+1127 +version: 1.3.012225+0304 homepage: "https://zontreck.com" environment: @@ -11,6 +11,7 @@ dependencies: crypto: ^3.0.3 dio: ^5.5.0+1 encrypt: ^5.0.3 + intl: ^0.20.1 # path: ^1.8.0 dev_dependencies: diff --git a/test/nbt_test.dart b/test/nbt_test.dart index 2768913..1612f38 100644 --- a/test/nbt_test.dart +++ b/test/nbt_test.dart @@ -144,4 +144,12 @@ void main() { CompoundTag CT = await SnbtIo.readFromFile("test/displayLoreTest.snbt") as CompoundTag; }, timeout: Timeout(Duration(minutes: 10))); + + test("Test negative numbers from SNBT", () async { + String snbt = "{test: -932.0d}"; + + CompoundTag ct = await SnbtIo.readFromString(snbt) as CompoundTag; + expect(ct["test"]!.getTagType(), TagType.Double); + expect(ct["test"]!.asDouble(), -932.0); + }); }