From 3d0f1eb2903a170bf923a5d22e91c436533fcbc3 Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Tue, 27 Aug 2024 20:07:47 +0200 Subject: [PATCH 1/5] Set compilation target to Java 8 --- build.gradle | 6 +++--- jitpack.yml | 6 +----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index e2f1da74..a2c9139b 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ plugins { group 'net.querz' version '7.0' -sourceCompatibility = JavaLanguageVersion.of(17) -targetCompatibility = JavaLanguageVersion.of(17) +sourceCompatibility = JavaLanguageVersion.of(8) +targetCompatibility = JavaLanguageVersion.of(8) repositories { mavenCentral() @@ -19,4 +19,4 @@ dependencies { test { useJUnitPlatform() -} \ No newline at end of file +} diff --git a/jitpack.yml b/jitpack.yml index 9aa1ea32..4c8fca1f 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,6 +1,2 @@ jdk: - - openjdk17 - -before_install: - - sdk install java 17.0.3-ms - - sdk use java 17.0.3-ms + - openjdk8 From 5bc085333227eae35a335ce378224a42557ec38b Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Tue, 27 Aug 2024 20:08:44 +0200 Subject: [PATCH 2/5] Remove sealed classes --- src/main/java/net/querz/nbt/ByteArrayTag.java | 2 +- src/main/java/net/querz/nbt/ByteTag.java | 2 +- src/main/java/net/querz/nbt/CollectionTag.java | 2 +- src/main/java/net/querz/nbt/CompoundTag.java | 2 +- src/main/java/net/querz/nbt/DoubleTag.java | 2 +- src/main/java/net/querz/nbt/EndTag.java | 2 +- src/main/java/net/querz/nbt/FloatTag.java | 2 +- src/main/java/net/querz/nbt/IntArrayTag.java | 2 +- src/main/java/net/querz/nbt/IntTag.java | 2 +- src/main/java/net/querz/nbt/ListTag.java | 2 +- src/main/java/net/querz/nbt/LongArrayTag.java | 2 +- src/main/java/net/querz/nbt/LongTag.java | 2 +- src/main/java/net/querz/nbt/NumberTag.java | 2 +- src/main/java/net/querz/nbt/ShortTag.java | 2 +- src/main/java/net/querz/nbt/StringTag.java | 2 +- src/main/java/net/querz/nbt/Tag.java | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/querz/nbt/ByteArrayTag.java b/src/main/java/net/querz/nbt/ByteArrayTag.java index 7d6cdf65..65554a05 100644 --- a/src/main/java/net/querz/nbt/ByteArrayTag.java +++ b/src/main/java/net/querz/nbt/ByteArrayTag.java @@ -6,7 +6,7 @@ import java.util.Arrays; import java.util.Objects; -public non-sealed class ByteArrayTag extends CollectionTag { +public class ByteArrayTag extends CollectionTag { private byte[] value; diff --git a/src/main/java/net/querz/nbt/ByteTag.java b/src/main/java/net/querz/nbt/ByteTag.java index 6bdb7bb6..a79446b0 100644 --- a/src/main/java/net/querz/nbt/ByteTag.java +++ b/src/main/java/net/querz/nbt/ByteTag.java @@ -4,7 +4,7 @@ import java.io.DataOutput; import java.io.IOException; -public non-sealed class ByteTag extends NumberTag { +public class ByteTag extends NumberTag { private final byte value; diff --git a/src/main/java/net/querz/nbt/CollectionTag.java b/src/main/java/net/querz/nbt/CollectionTag.java index 8f9e9998..f63b6cca 100644 --- a/src/main/java/net/querz/nbt/CollectionTag.java +++ b/src/main/java/net/querz/nbt/CollectionTag.java @@ -2,7 +2,7 @@ import java.util.AbstractList; -public sealed abstract class CollectionTag extends AbstractList implements Tag permits ByteArrayTag, IntArrayTag, ListTag, LongArrayTag { +public abstract class CollectionTag extends AbstractList implements Tag { public CollectionTag() {} diff --git a/src/main/java/net/querz/nbt/CompoundTag.java b/src/main/java/net/querz/nbt/CompoundTag.java index aad610d3..0c3605f1 100644 --- a/src/main/java/net/querz/nbt/CompoundTag.java +++ b/src/main/java/net/querz/nbt/CompoundTag.java @@ -7,7 +7,7 @@ import static net.querz.nbt.Tag.Type.*; -public non-sealed class CompoundTag implements Tag, Map, Iterable> { +public class CompoundTag implements Tag, Map, Iterable> { private final Map value; diff --git a/src/main/java/net/querz/nbt/DoubleTag.java b/src/main/java/net/querz/nbt/DoubleTag.java index 38eb79de..f1663908 100644 --- a/src/main/java/net/querz/nbt/DoubleTag.java +++ b/src/main/java/net/querz/nbt/DoubleTag.java @@ -4,7 +4,7 @@ import java.io.DataOutput; import java.io.IOException; -public non-sealed class DoubleTag extends NumberTag { +public class DoubleTag extends NumberTag { private final double value; diff --git a/src/main/java/net/querz/nbt/EndTag.java b/src/main/java/net/querz/nbt/EndTag.java index 6e66da01..2852923a 100644 --- a/src/main/java/net/querz/nbt/EndTag.java +++ b/src/main/java/net/querz/nbt/EndTag.java @@ -4,7 +4,7 @@ import java.io.DataOutput; import java.io.IOException; -public non-sealed class EndTag implements Tag { +public class EndTag implements Tag { public static final EndTag INSTANCE = new EndTag(); diff --git a/src/main/java/net/querz/nbt/FloatTag.java b/src/main/java/net/querz/nbt/FloatTag.java index 8d0df346..8477ddb2 100644 --- a/src/main/java/net/querz/nbt/FloatTag.java +++ b/src/main/java/net/querz/nbt/FloatTag.java @@ -4,7 +4,7 @@ import java.io.DataOutput; import java.io.IOException; -public non-sealed class FloatTag extends NumberTag { +public class FloatTag extends NumberTag { private final float value; diff --git a/src/main/java/net/querz/nbt/IntArrayTag.java b/src/main/java/net/querz/nbt/IntArrayTag.java index a651cfd6..fe961b0e 100644 --- a/src/main/java/net/querz/nbt/IntArrayTag.java +++ b/src/main/java/net/querz/nbt/IntArrayTag.java @@ -6,7 +6,7 @@ import java.util.Arrays; import java.util.Objects; -public non-sealed class IntArrayTag extends CollectionTag { +public class IntArrayTag extends CollectionTag { private int[] value; diff --git a/src/main/java/net/querz/nbt/IntTag.java b/src/main/java/net/querz/nbt/IntTag.java index 7ba5cb43..c3d2848a 100644 --- a/src/main/java/net/querz/nbt/IntTag.java +++ b/src/main/java/net/querz/nbt/IntTag.java @@ -4,7 +4,7 @@ import java.io.DataOutput; import java.io.IOException; -public non-sealed class IntTag extends NumberTag { +public class IntTag extends NumberTag { private final int value; diff --git a/src/main/java/net/querz/nbt/ListTag.java b/src/main/java/net/querz/nbt/ListTag.java index 7cb46a48..46c7f8a3 100644 --- a/src/main/java/net/querz/nbt/ListTag.java +++ b/src/main/java/net/querz/nbt/ListTag.java @@ -10,7 +10,7 @@ import static net.querz.nbt.Tag.Type.*; -public non-sealed class ListTag extends CollectionTag { +public class ListTag extends CollectionTag { private final List value; private Type type; diff --git a/src/main/java/net/querz/nbt/LongArrayTag.java b/src/main/java/net/querz/nbt/LongArrayTag.java index f4a138b4..a9fe87bb 100644 --- a/src/main/java/net/querz/nbt/LongArrayTag.java +++ b/src/main/java/net/querz/nbt/LongArrayTag.java @@ -6,7 +6,7 @@ import java.util.Arrays; import java.util.Objects; -public non-sealed class LongArrayTag extends CollectionTag { +public class LongArrayTag extends CollectionTag { private long[] value; diff --git a/src/main/java/net/querz/nbt/LongTag.java b/src/main/java/net/querz/nbt/LongTag.java index 3a9455d1..dbdb2260 100644 --- a/src/main/java/net/querz/nbt/LongTag.java +++ b/src/main/java/net/querz/nbt/LongTag.java @@ -4,7 +4,7 @@ import java.io.DataOutput; import java.io.IOException; -public non-sealed class LongTag extends NumberTag { +public class LongTag extends NumberTag { private final long value; diff --git a/src/main/java/net/querz/nbt/NumberTag.java b/src/main/java/net/querz/nbt/NumberTag.java index b9fdf1d4..1a00f12a 100644 --- a/src/main/java/net/querz/nbt/NumberTag.java +++ b/src/main/java/net/querz/nbt/NumberTag.java @@ -1,6 +1,6 @@ package net.querz.nbt; -public sealed abstract class NumberTag implements Tag permits ByteTag, DoubleTag, FloatTag, IntTag, LongTag, ShortTag { +public abstract class NumberTag implements Tag { public abstract byte asByte(); diff --git a/src/main/java/net/querz/nbt/ShortTag.java b/src/main/java/net/querz/nbt/ShortTag.java index f4d929d2..143daccb 100644 --- a/src/main/java/net/querz/nbt/ShortTag.java +++ b/src/main/java/net/querz/nbt/ShortTag.java @@ -4,7 +4,7 @@ import java.io.DataOutput; import java.io.IOException; -public non-sealed class ShortTag extends NumberTag { +public class ShortTag extends NumberTag { private final short value; diff --git a/src/main/java/net/querz/nbt/StringTag.java b/src/main/java/net/querz/nbt/StringTag.java index 98e8b006..18d02955 100644 --- a/src/main/java/net/querz/nbt/StringTag.java +++ b/src/main/java/net/querz/nbt/StringTag.java @@ -4,7 +4,7 @@ import java.io.DataOutput; import java.io.IOException; -public non-sealed class StringTag implements Tag { +public class StringTag implements Tag { private final String value; diff --git a/src/main/java/net/querz/nbt/Tag.java b/src/main/java/net/querz/nbt/Tag.java index 00e0f1b7..c680d631 100644 --- a/src/main/java/net/querz/nbt/Tag.java +++ b/src/main/java/net/querz/nbt/Tag.java @@ -5,7 +5,7 @@ import java.util.HashMap; import java.util.Map; -public sealed interface Tag permits CollectionTag, CompoundTag, EndTag, NumberTag, StringTag { +public interface Tag { int MAX_DEPTH = 512; From f9a5a5df8e2a3383d11af9f23e6b4a4f64fa7cf0 Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Tue, 27 Aug 2024 23:20:52 +0200 Subject: [PATCH 3/5] Desugar record types --- .../java/net/querz/mca/MCAFileHandle.java | 45 ++++++++++++++++++- .../net/querz/mca/parsers/BlockLocation.java | 40 ++++++++++++++++- .../net/querz/mca/parsers/EntityLocation.java | 40 ++++++++++++++++- .../querz/mca/parsers/HeightmapParser.java | 28 +++++++++++- src/main/java/net/querz/nbt/NamedTag.java | 34 +++++++++++++- .../net/querz/nbt/io/stream/TagSelector.java | 41 +++++++++++++++-- .../java/net/querz/nbt/io/stream/TagTree.java | 41 +++++++++++++++-- 7 files changed, 256 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/querz/mca/MCAFileHandle.java b/src/main/java/net/querz/mca/MCAFileHandle.java index 2540e59d..2b8da232 100644 --- a/src/main/java/net/querz/mca/MCAFileHandle.java +++ b/src/main/java/net/querz/mca/MCAFileHandle.java @@ -5,12 +5,55 @@ import java.io.File; import java.io.IOException; +import java.util.Objects; import java.util.function.Supplier; -public record MCAFileHandle(File directory, SeekableData seekableData, MCCFileHandler mccFileHandler, Supplier tagTypeVisitorSupplier) implements AutoCloseable { +public class MCAFileHandle implements AutoCloseable { + + private final File directory; + private final SeekableData seekableData; + private final MCCFileHandler mccFileHandler; + private final Supplier tagTypeVisitorSupplier; + + public MCAFileHandle(File directory, SeekableData seekableData, MCCFileHandler mccFileHandler, Supplier tagTypeVisitorSupplier) { + this.directory = directory; + this.seekableData = seekableData; + this.mccFileHandler = mccFileHandler; + this.tagTypeVisitorSupplier = tagTypeVisitorSupplier; + } @Override public void close() throws IOException { seekableData.close(); } + + public File directory() { + return directory; + } + + public SeekableData seekableData() { + return seekableData; + } + + public MCCFileHandler mccFileHandler() { + return mccFileHandler; + } + + public Supplier tagTypeVisitorSupplier() { + return tagTypeVisitorSupplier; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MCAFileHandle that = (MCAFileHandle) o; + return Objects.equals(directory, that.directory) && Objects.equals(seekableData, that.seekableData) && Objects.equals(mccFileHandler, that.mccFileHandler) && Objects.equals(tagTypeVisitorSupplier, that.tagTypeVisitorSupplier); + } + + @Override + public int hashCode() { + return Objects.hash(directory, seekableData, mccFileHandler, tagTypeVisitorSupplier); + } + } diff --git a/src/main/java/net/querz/mca/parsers/BlockLocation.java b/src/main/java/net/querz/mca/parsers/BlockLocation.java index 11027cd9..95f7a2c3 100644 --- a/src/main/java/net/querz/mca/parsers/BlockLocation.java +++ b/src/main/java/net/querz/mca/parsers/BlockLocation.java @@ -1,8 +1,46 @@ package net.querz.mca.parsers; -public record BlockLocation(int x, int y, int z) { +import java.util.Objects; + +public class BlockLocation { + + private final int x; + private final int y; + private final int z; + + public BlockLocation(int x, int y, int z) { + this.x = x; + this.y = y; + this.z = z; + } public BlockLocation() { this(0, 0, 0); } + + public int x() { + return x; + } + + public int y() { + return y; + } + + public int z() { + return z; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + BlockLocation that = (BlockLocation) o; + return x == that.x && y == that.y && z == that.z; + } + + @Override + public int hashCode() { + return Objects.hash(x, y, z); + } + } diff --git a/src/main/java/net/querz/mca/parsers/EntityLocation.java b/src/main/java/net/querz/mca/parsers/EntityLocation.java index 18527d7a..bf3c8270 100644 --- a/src/main/java/net/querz/mca/parsers/EntityLocation.java +++ b/src/main/java/net/querz/mca/parsers/EntityLocation.java @@ -1,8 +1,46 @@ package net.querz.mca.parsers; -public record EntityLocation(double x, double y, double z) { +import java.util.Objects; + +public class EntityLocation { + + private final double x; + private final double y; + private final double z; + + public EntityLocation(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + } public EntityLocation() { this(0, 0, 0); } + + public double x() { + return x; + } + + public double y() { + return y; + } + + public double z() { + return z; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + EntityLocation that = (EntityLocation) o; + return Double.compare(x, that.x) == 0 && Double.compare(y, that.y) == 0 && Double.compare(z, that.z) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(x, y, z); + } + } diff --git a/src/main/java/net/querz/mca/parsers/HeightmapParser.java b/src/main/java/net/querz/mca/parsers/HeightmapParser.java index 126ff19a..25d31ebd 100644 --- a/src/main/java/net/querz/mca/parsers/HeightmapParser.java +++ b/src/main/java/net/querz/mca/parsers/HeightmapParser.java @@ -1,5 +1,7 @@ package net.querz.mca.parsers; +import java.util.Arrays; + public interface HeightmapParser extends DataParser, CachedParser { HeightmapData getDataAt(int blockX, int blockZ); @@ -43,10 +45,34 @@ public int getID() { } } - record HeightmapData(int[] data) { + class HeightmapData { + + private final int[] data; + + public HeightmapData(int[] data) { + this.data = data; + } + + public int[] data() { + return data; + } public int getHeight(HeightmapType type) { return data[type.getID()]; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + HeightmapData that = (HeightmapData) o; + return Arrays.equals(data, that.data); + } + + @Override + public int hashCode() { + return Arrays.hashCode(data); + } + } } diff --git a/src/main/java/net/querz/nbt/NamedTag.java b/src/main/java/net/querz/nbt/NamedTag.java index de1dfb2d..d99e68e8 100644 --- a/src/main/java/net/querz/nbt/NamedTag.java +++ b/src/main/java/net/querz/nbt/NamedTag.java @@ -1,3 +1,35 @@ package net.querz.nbt; -public record NamedTag(String name, Tag tag) {} +import java.util.Objects; + +public class NamedTag { + private final String name; + private final Tag tag; + + public NamedTag(String name, Tag tag) { + this.name = name; + this.tag = tag; + } + + public String name() { + return name; + } + + public Tag tag() { + return tag; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + NamedTag namedTag = (NamedTag) o; + return Objects.equals(name, namedTag.name) && Objects.equals(tag, namedTag.tag); + } + + @Override + public int hashCode() { + return Objects.hash(name, tag); + } + +} diff --git a/src/main/java/net/querz/nbt/io/stream/TagSelector.java b/src/main/java/net/querz/nbt/io/stream/TagSelector.java index 1735ce4b..9f19421a 100644 --- a/src/main/java/net/querz/nbt/io/stream/TagSelector.java +++ b/src/main/java/net/querz/nbt/io/stream/TagSelector.java @@ -2,11 +2,18 @@ import net.querz.nbt.TagReader; import java.util.List; +import java.util.Objects; -public record TagSelector ( - List path, - String name, - TagReader type) { +public class TagSelector { + private final List path; + private final String name; + private final TagReader type; + + public TagSelector(List path, String name, TagReader type) { + this.path = path; + this.name = name; + this.type = type; + } public TagSelector(String name, TagReader reader) { this(List.of(), name, reader); @@ -19,4 +26,30 @@ public TagSelector(String p1, String name, TagReader reader) { public TagSelector(String p1, String p2, String name, TagReader reader) { this(List.of(p1, p2), name, reader); } + + public List path() { + return path; + } + + public String name() { + return name; + } + + public TagReader type() { + return type; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TagSelector that = (TagSelector) o; + return Objects.equals(path, that.path) && Objects.equals(name, that.name) && Objects.equals(type, that.type); + } + + @Override + public int hashCode() { + return Objects.hash(path, name, type); + } + } diff --git a/src/main/java/net/querz/nbt/io/stream/TagTree.java b/src/main/java/net/querz/nbt/io/stream/TagTree.java index 03934cc2..e4e6e5d2 100644 --- a/src/main/java/net/querz/nbt/io/stream/TagTree.java +++ b/src/main/java/net/querz/nbt/io/stream/TagTree.java @@ -3,11 +3,18 @@ import net.querz.nbt.TagReader; import java.util.HashMap; import java.util.Map; +import java.util.Objects; -public record TagTree( - int depth, - Map tree, - Map> selected) { +public class TagTree { + private final int depth; + private final Map tree; + private final Map> selected; + + public TagTree(int depth, Map tree, Map> selected) { + this.depth = depth; + this.tree = tree; + this.selected = selected; + } /** * Creates a new TagTree root element with {@code depth = 1}. @@ -41,4 +48,30 @@ public void addEntry(TagSelector selector) { public boolean isSelected(String name, TagReader reader) { return reader.equals(selected.get(name)); } + + public int depth() { + return depth; + } + + public Map tree() { + return tree; + } + + public Map> selected() { + return selected; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TagTree tagTree = (TagTree) o; + return depth == tagTree.depth && Objects.equals(tree, tagTree.tree) && Objects.equals(selected, tagTree.selected); + } + + @Override + public int hashCode() { + return Objects.hash(depth, tree, selected); + } + } From a7491871dcd936b192b21c2373030ddb17ff104c Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Tue, 27 Aug 2024 23:42:50 +0200 Subject: [PATCH 4/5] Desugar switch expressions --- .../querz/io/seekable/SeekableByteArray.java | 12 ++-- .../java/net/querz/mca/CompressionType.java | 18 ++--- src/main/java/net/querz/nbt/CompoundTag.java | 46 ++++++------ src/main/java/net/querz/nbt/ListTag.java | 41 +++++------ src/main/java/net/querz/nbt/NBTUtil.java | 8 +-- src/main/java/net/querz/nbt/io/NBTReader.java | 8 +-- src/test/java/net/querz/NBTTestCase.java | 72 +++++++++++-------- 7 files changed, 106 insertions(+), 99 deletions(-) diff --git a/src/main/java/net/querz/io/seekable/SeekableByteArray.java b/src/main/java/net/querz/io/seekable/SeekableByteArray.java index 45f66452..30c56601 100644 --- a/src/main/java/net/querz/io/seekable/SeekableByteArray.java +++ b/src/main/java/net/querz/io/seekable/SeekableByteArray.java @@ -152,15 +152,19 @@ public String readLine() throws IOException { while (!eol) { switch (c = read()) { - case '\n' -> eol = true; - case '\r' -> { + case '\n': + eol = true; + break; + case '\r': eol = true; long cur = getPointer(); if (read() != '\n') { seek(cur); } - } - default -> sb.append((char) c); + break; + default: + sb.append((char) c); + break; } } diff --git a/src/main/java/net/querz/mca/CompressionType.java b/src/main/java/net/querz/mca/CompressionType.java index 27a5392c..51023446 100644 --- a/src/main/java/net/querz/mca/CompressionType.java +++ b/src/main/java/net/querz/mca/CompressionType.java @@ -52,15 +52,15 @@ public int getID() { } public static CompressionType fromByte(int id) throws IOException { - return switch (id) { - case 0x0 -> NONE; - case 0x1 -> GZIP; - case 0x2 -> ZLIB; - case 0x80 -> NONE_EXT; - case 0x81 -> GZIP_EXT; - case 0x82 -> ZLIB_EXT; - default -> throw new IOException("invalid compression type " + id); - }; + switch (id) { + case 0x0: return NONE; + case 0x1: return GZIP; + case 0x2: return ZLIB; + case 0x80: return NONE_EXT; + case 0x81: return GZIP_EXT; + case 0x82: return ZLIB_EXT; + default: throw new IOException("invalid compression type " + id); + } } @FunctionalInterface diff --git a/src/main/java/net/querz/nbt/CompoundTag.java b/src/main/java/net/querz/nbt/CompoundTag.java index 0c3605f1..0afb63d2 100644 --- a/src/main/java/net/querz/nbt/CompoundTag.java +++ b/src/main/java/net/querz/nbt/CompoundTag.java @@ -475,21 +475,20 @@ public boolean partOf(CompoundTag other) { } Tag tag = entry.getValue(); switch (tag.getType()) { - case COMPOUND -> { - CompoundTag otherTag = other.getCompoundTag(entry.getKey()); - if (!((CompoundTag) tag).partOf(otherTag)) { + case COMPOUND: + CompoundTag otherCompound = other.getCompoundTag(entry.getKey()); + if (!((CompoundTag) tag).partOf(otherCompound)) { return false; } - } - case LIST -> { - ListTag otherTag = other.getListTag(entry.getKey()); - if (!((ListTag) tag).partOf(otherTag)) { + break; + case LIST: + ListTag otherList = other.getListTag(entry.getKey()); + if (!((ListTag) tag).partOf(otherList)) { return false; } - } - default -> { + break; + default: return tag.equals(other.get(entry.getKey())); - } } } return true; @@ -555,38 +554,35 @@ public TagTypeVisitor.ValueResult read(DataInput in, TagTypeVisitor visitor) thr if ((id = in.readByte()) != END.id) { TagReader reader = valueOf(id).reader; switch (visitor.visitEntry(reader)) { - case RETURN -> { + case RETURN: return TagTypeVisitor.ValueResult.RETURN; - } - case BREAK -> { + case BREAK: StringTag.skipUTF(in); reader.skip(in); - } - case SKIP -> { + break; + case SKIP: StringTag.skipUTF(in); reader.skip(in); continue; - } - default -> { + default: String name = in.readUTF(); switch (visitor.visitEntry(reader, name)) { - case RETURN -> { + case RETURN: return TagTypeVisitor.ValueResult.RETURN; - } - case BREAK -> reader.skip(in); - case SKIP -> { + case BREAK: + reader.skip(in); + break; + case SKIP: reader.skip(in); continue; - } - case ENTER -> { + case ENTER: if (reader.read(in, visitor) == TagTypeVisitor.ValueResult.RETURN) { return TagTypeVisitor.ValueResult.RETURN; } else { continue; } - } } - } + break; } } diff --git a/src/main/java/net/querz/nbt/ListTag.java b/src/main/java/net/querz/nbt/ListTag.java index 46c7f8a3..5ba5d703 100644 --- a/src/main/java/net/querz/nbt/ListTag.java +++ b/src/main/java/net/querz/nbt/ListTag.java @@ -76,7 +76,7 @@ public boolean partOf(ListTag other) { return false; } switch (type) { - case COMPOUND -> { + case COMPOUND: loop: for (CompoundTag tag : iterateType(CompoundTag.class)) { for (CompoundTag otherTag : other.iterateType(CompoundTag.class)) { @@ -86,8 +86,8 @@ public boolean partOf(ListTag other) { } return false; } - } - case LIST -> { + break; + case LIST: loop: for (ListTag tag : iterateType(ListTag.class)) { for (ListTag otherTag : other.iterateType(ListTag.class)) { @@ -97,8 +97,8 @@ public boolean partOf(ListTag other) { } return false; } - } - default -> { + break; + default: loop: for (Tag tag : this) { for (Tag otherTag : other) { @@ -108,7 +108,7 @@ public boolean partOf(ListTag other) { } return false; } - } + break; } return true; } @@ -476,36 +476,32 @@ public TagTypeVisitor.ValueResult read(DataInput in, TagTypeVisitor visitor) thr TagReader reader = valueOf(in.readByte()).reader; int length = in.readInt(); switch (visitor.visitList(reader, length)) { - case RETURN -> { + case RETURN: return TagTypeVisitor.ValueResult.RETURN; - } - case BREAK -> { + case BREAK: reader.skip(in); return visitor.visitContainerEnd(); - } - default -> { + default: int i = 0; loop: for (; i < length; i++) { switch (visitor.visitElement(reader, i)) { - case RETURN -> { + case RETURN: return TagTypeVisitor.ValueResult.RETURN; - } - case BREAK -> { + case BREAK: reader.skip(in); break loop; - } - case SKIP -> reader.skip(in); - case ENTER -> { + case SKIP: + reader.skip(in); + break; + case ENTER: switch (reader.read(in, visitor)) { - case RETURN -> { + case RETURN: return TagTypeVisitor.ValueResult.RETURN; - } - case BREAK -> { + case BREAK: break loop; - } } - } + break; } } @@ -518,7 +514,6 @@ public TagTypeVisitor.ValueResult read(DataInput in, TagTypeVisitor visitor) thr } return visitor.visitContainerEnd(); - } } } diff --git a/src/main/java/net/querz/nbt/NBTUtil.java b/src/main/java/net/querz/nbt/NBTUtil.java index 7f7d14e4..6bcfc4ea 100644 --- a/src/main/java/net/querz/nbt/NBTUtil.java +++ b/src/main/java/net/querz/nbt/NBTUtil.java @@ -247,14 +247,14 @@ public static void parseStream(DataInput in, TagTypeVisitor visitor) throws IOEx } } else { switch (visitor.visitRootEntry(reader)) { - case BREAK -> { + case BREAK: StringTag.skipUTF(in); reader.skip(in); - } - case CONTINUE -> { + break; + case CONTINUE: StringTag.skipUTF(in); reader.read(in, visitor); - } + break; } } } diff --git a/src/main/java/net/querz/nbt/io/NBTReader.java b/src/main/java/net/querz/nbt/io/NBTReader.java index 64b2774c..5a3ae0e6 100644 --- a/src/main/java/net/querz/nbt/io/NBTReader.java +++ b/src/main/java/net/querz/nbt/io/NBTReader.java @@ -123,14 +123,14 @@ private NamedTag readWithVisitor(DataInput input, TagTypeVisitor visitor) throws } } else { switch (visitor.visitRootEntry(reader)) { - case BREAK -> { + case BREAK: name = input.readUTF(); reader.skip(input); - } - case CONTINUE -> { + break; + case CONTINUE: name = input.readUTF(); reader.read(input, visitor); - } + break; } } return new NamedTag(name, visitor.getResult()); diff --git a/src/test/java/net/querz/NBTTestCase.java b/src/test/java/net/querz/NBTTestCase.java index 7a9175d3..f94c2b21 100644 --- a/src/test/java/net/querz/NBTTestCase.java +++ b/src/test/java/net/querz/NBTTestCase.java @@ -177,19 +177,33 @@ protected static String tagToCode(Tag tag, AtomicInteger c) { StringBuilder sb = new StringBuilder(); switch (tag.getType()) { - case END -> {} - case BYTE -> sb.append("ByteTag byteTag").append(c).append(" = ByteTag.valueOf((byte) ").append(((ByteTag) tag).asByte()).append(");"); - case SHORT -> sb.append("ShortTag shortTag").append(c).append(" = ShortTag.valueOf((short) ").append(((ShortTag) tag).asShort()).append(");"); - case INT -> sb.append("IntTag intTag").append(c).append(" = IntTag.valueOf(").append(((IntTag) tag).asInt()).append(");"); - case LONG -> sb.append("LongTag longTag").append(c).append(" = LongTag.valueOf(").append(((LongTag) tag).asLong()).append("L);"); - case FLOAT -> sb.append("FloatTag floatTag").append(c).append(" = FloatTag.valueOf(").append(((FloatTag) tag).asFloat()).append("F);"); - case DOUBLE -> sb.append("DoubleTag doubleTag").append(c).append(" = DoubleTag.valueOf(").append(((DoubleTag) tag).asDouble()).append("D);"); - case BYTE_ARRAY -> { - String asString = Arrays.toString(((ByteArrayTag) tag).getValue()); - sb.append("ByteArrayTag byteArrayTag").append(c).append(" = new ByteArrayTag(new byte[]{").append(asString, 1, asString.length() - 1).append("});"); - } - case STRING -> sb.append("StringTag stringTag").append(c).append(" = StringTag.valueOf(\"").append(((StringTag) tag).getValue().replace("\\", "\\\\").replace("\"", "\\\"")).append("\");"); - case LIST -> { + case END: break; + case BYTE: + sb.append("ByteTag byteTag").append(c).append(" = ByteTag.valueOf((byte) ").append(((ByteTag) tag).asByte()).append(");"); + break; + case SHORT: + sb.append("ShortTag shortTag").append(c).append(" = ShortTag.valueOf((short) ").append(((ShortTag) tag).asShort()).append(");"); + break; + case INT: + sb.append("IntTag intTag").append(c).append(" = IntTag.valueOf(").append(((IntTag) tag).asInt()).append(");"); + break; + case LONG: + sb.append("LongTag longTag").append(c).append(" = LongTag.valueOf(").append(((LongTag) tag).asLong()).append("L);"); + break; + case FLOAT: + sb.append("FloatTag floatTag").append(c).append(" = FloatTag.valueOf(").append(((FloatTag) tag).asFloat()).append("F);"); + break; + case DOUBLE: + sb.append("DoubleTag doubleTag").append(c).append(" = DoubleTag.valueOf(").append(((DoubleTag) tag).asDouble()).append("D);"); + break; + case BYTE_ARRAY: + String asStringBytes = Arrays.toString(((ByteArrayTag) tag).getValue()); + sb.append("ByteArrayTag byteArrayTag").append(c).append(" = new ByteArrayTag(new byte[]{").append(asStringBytes, 1, asStringBytes.length() - 1).append("});"); + break; + case STRING: + sb.append("StringTag stringTag").append(c).append(" = StringTag.valueOf(\"").append(((StringTag) tag).getValue().replace("\\", "\\\\").replace("\"", "\\\"")).append("\");"); + break; + case LIST: String name = "listTag" + c.getAndIncrement(); sb.append("ListTag ").append(name).append(" = new ListTag();").append(((ListTag) tag).isEmpty() ? "" : "\n");; int i = ((ListTag) tag).size(); @@ -200,33 +214,31 @@ protected static String tagToCode(Tag tag, AtomicInteger c) { String val = es.split(" ", 3)[1]; sb.append(name).append(".add(").append(val).append(");").append(--i > 0 ? "\n" : ""); } - } - case COMPOUND -> { - String name = "compoundTag" + c.getAndIncrement(); - sb.append("CompoundTag ").append(name).append(" = new CompoundTag();").append(((CompoundTag) tag).isEmpty() ? "" : "\n"); - int i = ((CompoundTag) tag).size(); + break; + case COMPOUND: + String nameCompound = "compoundTag" + c.getAndIncrement(); + sb.append("CompoundTag ").append(nameCompound).append(" = new CompoundTag();").append(((CompoundTag) tag).isEmpty() ? "" : "\n"); + int j = ((CompoundTag) tag).size(); for (Map.Entry e : (CompoundTag) tag) { c.incrementAndGet(); String es = tagToCode(e.getValue(), c); sb.append(es).append("\n"); String val = es.split(" ", 3)[1]; - sb.append(name).append(".put(\"").append(e.getKey().replace("\\", "\\\\").replace("\"", "\\\"")).append("\", ").append(val).append(");").append(--i > 0 ? "\n" : ""); + sb.append(nameCompound).append(".put(\"").append(e.getKey().replace("\\", "\\\\").replace("\"", "\\\"")).append("\", ").append(val).append(");").append(--j > 0 ? "\n" : ""); } - - } - case INT_ARRAY -> { - String asString = Arrays.toString(((IntArrayTag) tag).getValue()); - sb.append("IntArrayTag intArrayTag").append(c).append(" = new IntArrayTag(new int[]{").append(asString, 1, asString.length() - 1).append("});"); - } - case LONG_ARRAY -> { + break; + case INT_ARRAY: + String asStringInts = Arrays.toString(((IntArrayTag) tag).getValue()); + sb.append("IntArrayTag intArrayTag").append(c).append(" = new IntArrayTag(new int[]{").append(asStringInts, 1, asStringInts.length() - 1).append("});"); + break; + case LONG_ARRAY: sb.append("LongArrayTag longArrayTag").append(c).append(" = new LongArrayTag(new long[]{"); long[] value = ((LongArrayTag) tag).getValue(); - for (int i = 0; i < value.length; i++) { - sb.append(i == 0 ? "" : ", ").append(value[i]).append("L"); + for (int k = 0; k < value.length; k++) { + sb.append(k == 0 ? "" : ", ").append(value[k]).append("L"); } sb.append("});"); - } - + break; } return sb.toString(); } From b2dc6c85d90747c8aaa40cce9e4cb57a51a715b2 Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Wed, 28 Aug 2024 00:05:05 +0200 Subject: [PATCH 5/5] Fix random Java 8 limitations --- src/main/java/net/querz/nbt/ByteArrayTag.java | 2 +- src/main/java/net/querz/nbt/ByteTag.java | 2 +- src/main/java/net/querz/nbt/CompoundTag.java | 2 +- src/main/java/net/querz/nbt/DoubleTag.java | 2 +- src/main/java/net/querz/nbt/EndTag.java | 2 +- src/main/java/net/querz/nbt/FloatTag.java | 2 +- src/main/java/net/querz/nbt/IntArrayTag.java | 2 +- src/main/java/net/querz/nbt/IntTag.java | 2 +- src/main/java/net/querz/nbt/ListTag.java | 4 ++-- src/main/java/net/querz/nbt/LongArrayTag.java | 4 ++-- src/main/java/net/querz/nbt/LongTag.java | 2 +- src/main/java/net/querz/nbt/ShortTag.java | 2 +- src/main/java/net/querz/nbt/StringTag.java | 2 +- src/main/java/net/querz/nbt/io/snbt/SNBTReader.java | 9 ++++++++- src/main/java/net/querz/nbt/io/snbt/SNBTWriter.java | 4 ++-- .../net/querz/nbt/io/snbt/SNBTWriterTagVisitor.java | 12 ++++++++---- .../java/net/querz/nbt/io/stream/TagSelector.java | 9 ++++++--- src/test/java/net/querz/nbt/TestNBTUtil.java | 5 +++-- 18 files changed, 42 insertions(+), 27 deletions(-) diff --git a/src/main/java/net/querz/nbt/ByteArrayTag.java b/src/main/java/net/querz/nbt/ByteArrayTag.java index 65554a05..5082bc29 100644 --- a/src/main/java/net/querz/nbt/ByteArrayTag.java +++ b/src/main/java/net/querz/nbt/ByteArrayTag.java @@ -110,7 +110,7 @@ public void setValue(byte[] value) { this.value = value; } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public ByteArrayTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/ByteTag.java b/src/main/java/net/querz/nbt/ByteTag.java index a79446b0..92b77b51 100644 --- a/src/main/java/net/querz/nbt/ByteTag.java +++ b/src/main/java/net/querz/nbt/ByteTag.java @@ -98,7 +98,7 @@ public String toString() { return value + "b"; } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public ByteTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/CompoundTag.java b/src/main/java/net/querz/nbt/CompoundTag.java index 0afb63d2..46c7e987 100644 --- a/src/main/java/net/querz/nbt/CompoundTag.java +++ b/src/main/java/net/querz/nbt/CompoundTag.java @@ -529,7 +529,7 @@ public Set> entrySet() { return value.entrySet(); } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public CompoundTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/DoubleTag.java b/src/main/java/net/querz/nbt/DoubleTag.java index f1663908..85e8307e 100644 --- a/src/main/java/net/querz/nbt/DoubleTag.java +++ b/src/main/java/net/querz/nbt/DoubleTag.java @@ -93,7 +93,7 @@ public String toString() { return value + "d"; } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public DoubleTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/EndTag.java b/src/main/java/net/querz/nbt/EndTag.java index 2852923a..a51cb441 100644 --- a/src/main/java/net/querz/nbt/EndTag.java +++ b/src/main/java/net/querz/nbt/EndTag.java @@ -23,7 +23,7 @@ public void accept(TagVisitor visitor) { visitor.visit(this); } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public EndTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/FloatTag.java b/src/main/java/net/querz/nbt/FloatTag.java index 8477ddb2..cdb0c8b3 100644 --- a/src/main/java/net/querz/nbt/FloatTag.java +++ b/src/main/java/net/querz/nbt/FloatTag.java @@ -92,7 +92,7 @@ public String toString() { return value + "f"; } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public FloatTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/IntArrayTag.java b/src/main/java/net/querz/nbt/IntArrayTag.java index fe961b0e..e9e90f08 100644 --- a/src/main/java/net/querz/nbt/IntArrayTag.java +++ b/src/main/java/net/querz/nbt/IntArrayTag.java @@ -112,7 +112,7 @@ public void setValue(int[] value) { this.value = value; } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public IntArrayTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/IntTag.java b/src/main/java/net/querz/nbt/IntTag.java index c3d2848a..af3f96a0 100644 --- a/src/main/java/net/querz/nbt/IntTag.java +++ b/src/main/java/net/querz/nbt/IntTag.java @@ -95,7 +95,7 @@ public String toString() { return String.valueOf(value); } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public IntTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/ListTag.java b/src/main/java/net/querz/nbt/ListTag.java index 5ba5d703..953b57cc 100644 --- a/src/main/java/net/querz/nbt/ListTag.java +++ b/src/main/java/net/querz/nbt/ListTag.java @@ -219,7 +219,7 @@ public boolean equals(Object other) { if (this == other) { return true; } else { - return other instanceof ListTag otherList && value.equals(otherList.value); + return other instanceof ListTag && value.equals(((ListTag) other).value); } } @@ -453,7 +453,7 @@ public T remove(int index) { } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public ListTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/LongArrayTag.java b/src/main/java/net/querz/nbt/LongArrayTag.java index a9fe87bb..b8aa3605 100644 --- a/src/main/java/net/querz/nbt/LongArrayTag.java +++ b/src/main/java/net/querz/nbt/LongArrayTag.java @@ -112,7 +112,7 @@ public void setValue(long[] value) { this.value = value; } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public LongArrayTag read(DataInput in, int depth) throws IOException { @@ -137,4 +137,4 @@ public void skip(DataInput in) throws IOException { in.skipBytes(in.readInt() * 8); } }; -} \ No newline at end of file +} diff --git a/src/main/java/net/querz/nbt/LongTag.java b/src/main/java/net/querz/nbt/LongTag.java index dbdb2260..ee8a0c75 100644 --- a/src/main/java/net/querz/nbt/LongTag.java +++ b/src/main/java/net/querz/nbt/LongTag.java @@ -95,7 +95,7 @@ public String toString() { return value + "L"; } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public LongTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/ShortTag.java b/src/main/java/net/querz/nbt/ShortTag.java index 143daccb..f6d91d48 100644 --- a/src/main/java/net/querz/nbt/ShortTag.java +++ b/src/main/java/net/querz/nbt/ShortTag.java @@ -95,7 +95,7 @@ public String toString() { return value + "s"; } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public ShortTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/StringTag.java b/src/main/java/net/querz/nbt/StringTag.java index 18d02955..2b53757d 100644 --- a/src/main/java/net/querz/nbt/StringTag.java +++ b/src/main/java/net/querz/nbt/StringTag.java @@ -55,7 +55,7 @@ public String getValue() { return value; } - public static final TagReader READER = new TagReader<>() { + public static final TagReader READER = new TagReader() { @Override public StringTag read(DataInput in, int depth) throws IOException { diff --git a/src/main/java/net/querz/nbt/io/snbt/SNBTReader.java b/src/main/java/net/querz/nbt/io/snbt/SNBTReader.java index 1d253429..3e006663 100644 --- a/src/main/java/net/querz/nbt/io/snbt/SNBTReader.java +++ b/src/main/java/net/querz/nbt/io/snbt/SNBTReader.java @@ -19,7 +19,14 @@ public Tag read(String s) throws ParseException { } public Tag read(InputStream in) throws IOException { - String s = new String(in.readAllBytes(), StandardCharsets.UTF_8); + // InputStream.readAllBytes is only available in Java 9 and beyond + ByteArrayOutputStream result = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + for (int length; (length = in.read(buffer)) != -1; ) { + result.write(buffer, 0, length); + } + String s = result.toString(StandardCharsets.UTF_8.name()); + return new SNBTParser(s).parse(ignoreTrailing); } diff --git a/src/main/java/net/querz/nbt/io/snbt/SNBTWriter.java b/src/main/java/net/querz/nbt/io/snbt/SNBTWriter.java index d95188bb..47c5e4af 100644 --- a/src/main/java/net/querz/nbt/io/snbt/SNBTWriter.java +++ b/src/main/java/net/querz/nbt/io/snbt/SNBTWriter.java @@ -15,7 +15,7 @@ public SNBTWriter indent(String indent) { } public void write(OutputStream out, Tag tag) throws IOException { - PrintWriter writer = new PrintWriter(out, false, StandardCharsets.UTF_8); + PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8), false); tag.accept(new SNBTWriterTagVisitor(writer, indent)); writer.flush(); } @@ -28,7 +28,7 @@ public String toString(Tag tag) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); write(baos, tag); - return baos.toString(StandardCharsets.UTF_8); + return baos.toString(StandardCharsets.UTF_8.name()); } catch (IOException ex) { throw new UncheckedIOException(ex); } diff --git a/src/main/java/net/querz/nbt/io/snbt/SNBTWriterTagVisitor.java b/src/main/java/net/querz/nbt/io/snbt/SNBTWriterTagVisitor.java index 116d56e1..61e6b3e9 100644 --- a/src/main/java/net/querz/nbt/io/snbt/SNBTWriterTagVisitor.java +++ b/src/main/java/net/querz/nbt/io/snbt/SNBTWriterTagVisitor.java @@ -31,7 +31,7 @@ private SNBTWriterTagVisitor(Writer writer, String indent, int depth) { } // region primitives - + @Override public void visit(ByteTag t) { writeNumber(t); @@ -82,7 +82,7 @@ public void visit(StringTag t) { // endregion // region arrays - + @Override public void visit(ByteArrayTag t) { writeArray(t, "B"); @@ -113,7 +113,7 @@ private void writeArray(CollectionTag t, String prefix) { throw new UncheckedIOException(ex); } } - + // endregion // region hierarchies @@ -175,7 +175,11 @@ private void writeSpacing() throws IOException { } private void writeIndent(int depth) throws IOException { - writer.write(indent.repeat(depth)); + StringBuilder indent = new StringBuilder(); + for (int i = 0; i < depth; i++) { + indent.append(this.indent); + } + writer.write(indent.toString()); } // endregion diff --git a/src/main/java/net/querz/nbt/io/stream/TagSelector.java b/src/main/java/net/querz/nbt/io/stream/TagSelector.java index 9f19421a..40813353 100644 --- a/src/main/java/net/querz/nbt/io/stream/TagSelector.java +++ b/src/main/java/net/querz/nbt/io/stream/TagSelector.java @@ -1,6 +1,9 @@ package net.querz.nbt.io.stream; import net.querz.nbt.TagReader; + +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Objects; @@ -16,15 +19,15 @@ public TagSelector(List path, String name, TagReader type) { } public TagSelector(String name, TagReader reader) { - this(List.of(), name, reader); + this(Collections.emptyList(), name, reader); } public TagSelector(String p1, String name, TagReader reader) { - this(List.of(p1), name, reader); + this(Collections.singletonList(p1), name, reader); } public TagSelector(String p1, String p2, String name, TagReader reader) { - this(List.of(p1, p2), name, reader); + this(Arrays.asList(p1, p2), name, reader); } public List path() { diff --git a/src/test/java/net/querz/nbt/TestNBTUtil.java b/src/test/java/net/querz/nbt/TestNBTUtil.java index 6c3280f7..e3cce721 100644 --- a/src/test/java/net/querz/nbt/TestNBTUtil.java +++ b/src/test/java/net/querz/nbt/TestNBTUtil.java @@ -8,6 +8,7 @@ import org.junit.jupiter.api.Test; import java.io.*; +import java.util.Arrays; import java.util.List; import java.util.zip.GZIPInputStream; import static org.junit.jupiter.api.Assertions.*; @@ -41,7 +42,7 @@ public void testParse() throws IOException { } try (DataInputStream dis = new DataInputStream(new ByteArrayInputStream(raw))) { - t = NBTUtil.parseStream(dis, new TagSelector(List.of("Data", "Player", "Attributes"), "Name", StringTag.READER)); + t = NBTUtil.parseStream(dis, new TagSelector(Arrays.asList("Data", "Player", "Attributes"), "Name", StringTag.READER)); System.out.println(NBTUtil.toSNBT(t, "\t")); } @@ -106,7 +107,7 @@ public void testBlah() throws IOException { - +