diff --git a/MCStructs-snbt/src/main/java/net/lenni0451/mcstructs/snbt/impl/v1_12/SNbtDeserializer_v1_12.java b/MCStructs-snbt/src/main/java/net/lenni0451/mcstructs/snbt/impl/v1_12/SNbtDeserializer_v1_12.java index 851d33c..2a55603 100644 --- a/MCStructs-snbt/src/main/java/net/lenni0451/mcstructs/snbt/impl/v1_12/SNbtDeserializer_v1_12.java +++ b/MCStructs-snbt/src/main/java/net/lenni0451/mcstructs/snbt/impl/v1_12/SNbtDeserializer_v1_12.java @@ -95,10 +95,28 @@ public class SNbtDeserializer_v1_12 implements ISNbtDeserializer { reader.read(); reader.skipWhitespaces(); if (!reader.canRead()) throw this.makeException(reader, "Expected value"); - else if (c == 'B') return new ByteArrayTag(this.readPrimitiveList(reader, ByteTag.class, ByteArrayTag.class)); - else if (c == 'L') return new LongArrayTag(this.readPrimitiveList(reader, LongTag.class, LongArrayTag.class)); - else if (c == 'I') return new IntArrayTag(this.readPrimitiveList(reader, IntTag.class, IntArrayTag.class)); - else throw new SNbtDeserializeException("Invalid array type '" + c + "' found"); + else if (c == 'B') { + final ListTag tags = this.readPrimitiveList(reader, ByteTag.class, ByteArrayTag.class); + final byte[] array = new byte[tags.size()]; + for (int i = 0; i < tags.size(); i++) { + array[i] = tags.get(i).asByte(); + } + return new ByteArrayTag(array); + } else if (c == 'L') { + final ListTag tags = this.readPrimitiveList(reader, LongTag.class, LongArrayTag.class); + final long[] array = new long[tags.size()]; + for (int i = 0; i < tags.size(); i++) { + array[i] = tags.get(i).asLong(); + } + return new LongArrayTag(array); + } else if (c == 'I') { + final ListTag tags = this.readPrimitiveList(reader, IntTag.class, IntArrayTag.class); + final int[] array = new int[tags.size()]; + for (int i = 0; i < tags.size(); i++) { + array[i] = tags.get(i).asInt(); + } + return new IntArrayTag(array); + } else throw new SNbtDeserializeException("Invalid array type '" + c + "' found"); } protected Tag readValue(final StringReader_v1_12 reader) throws SNbtDeserializeException { diff --git a/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/events/hover/impl/EntityHoverEvent.java b/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/events/hover/impl/EntityHoverEvent.java index fd93efd..8125838 100644 --- a/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/events/hover/impl/EntityHoverEvent.java +++ b/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/events/hover/impl/EntityHoverEvent.java @@ -117,10 +117,10 @@ public class EntityHoverEvent extends AHoverEvent { @Override public String toString() { return ToString.of(this) - .put("action", this.action) - .put("entityType", this.entityType) - .put("uuid", this.uuid) - .put("name", this.name, Objects::nonNull) + .add("action", this.action) + .add("entityType", this.entityType) + .add("uuid", this.uuid) + .add("name", this.name, Objects::nonNull) .toString(); } diff --git a/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/events/hover/impl/ItemHoverEvent.java b/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/events/hover/impl/ItemHoverEvent.java index 3fed9a3..7d9f356 100644 --- a/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/events/hover/impl/ItemHoverEvent.java +++ b/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/events/hover/impl/ItemHoverEvent.java @@ -119,10 +119,10 @@ public class ItemHoverEvent extends AHoverEvent { @Override public String toString() { return ToString.of(this) - .put("action", this.action) - .put("item", this.item) - .put("count", this.count, count -> count != 1) - .put("nbt", this.nbt, Objects::nonNull) + .add("action", this.action) + .add("item", this.item) + .add("count", this.count, count -> count != 1) + .add("nbt", this.nbt, Objects::nonNull) .toString(); } diff --git a/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/utils/JsonNbtConverter.java b/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/utils/JsonNbtConverter.java index 8ef3051..9af7730 100644 --- a/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/utils/JsonNbtConverter.java +++ b/MCStructs-text/src/main/java/net/lenni0451/mcstructs/text/utils/JsonNbtConverter.java @@ -25,23 +25,15 @@ public class JsonNbtConverter { @Nullable public static JsonElement toJson(@Nullable final Tag tag) { if (tag == null) return null; - switch (tag) { - case END: - return null; - case BYTE: - case SHORT: - case INT: - case LONG: - case FLOAT: - case DOUBLE: + if (tag instanceof NumberTag) { return new JsonPrimitive(((NumberTag) tag).getValue()); - case BYTE_ARRAY: + } else if (tag instanceof ByteArrayTag) { JsonArray byteArray = new JsonArray(); for (byte b : ((ByteArrayTag) tag).getValue()) byteArray.add(b); return byteArray; - case STRING: + } else if (tag instanceof StringTag) { return new JsonPrimitive(((StringTag) tag).getValue()); - case LIST: + } else if (tag instanceof ListTag) { JsonArray list = new JsonArray(); ListTag listTag = ((ListTag) tag); for (Tag tagInList : listTag.getValue()) { @@ -55,19 +47,19 @@ public class JsonNbtConverter { list.add(toJson(tagInList)); } return list; - case COMPOUND: + } else if (tag instanceof CompoundTag) { JsonObject compound = new JsonObject(); - for (Map.Entry entry : ((CompoundTag) tag).getValue().entrySet()) compound.put(entry.getKey(), toJson(entry.getValue())); + for (Map.Entry entry : ((CompoundTag) tag).getValue().entrySet()) compound.add(entry.getKey(), toJson(entry.getValue())); return compound; - case INT_ARRAY: + } else if (tag instanceof IntArrayTag) { JsonArray intArray = new JsonArray(); for (int i : ((IntArrayTag) tag).getValue()) intArray.add(i); return intArray; - case LONG_ARRAY: + } else if (tag instanceof LongArrayTag) { JsonArray longArray = new JsonArray(); for (long l : ((LongArrayTag) tag).getValue()) longArray.add(l); return longArray; - default: + } else { throw new IllegalArgumentException("Unknown Nbt type: " + tag); } } @@ -90,31 +82,37 @@ public class JsonNbtConverter { JsonArray array = element.getAsJsonArray(); List nbtTags = new ArrayList<>(); Tag listType = null; + boolean mixedList = false; for (JsonElement arrayElement : array) { Tag tag = toNbt(arrayElement); nbtTags.add(tag); listType = getListType(listType, tag); + if (listType == null) mixedList = true; } if (listType == null) { return new ListTag<>(); - } else if (listType == Tag.END) { //Mixed list + } else if (mixedList) { //Mixed list ListTag list = new ListTag<>(); for (Tag tag : nbtTags) { if (tag instanceof CompoundTag) list.add(((CompoundTag) tag)); - else list.add(new CompoundTag().put("", tag)); + else { + final CompoundTag entries = new CompoundTag(); + entries.put("", tag); + list.add(entries); + } } return list; - } else if (listType == Tag.BYTE) { + } else if (listType instanceof ByteTag) { byte[] bytes = new byte[nbtTags.size()]; - for (int i = 0; i < nbtTags.size(); i++) bytes[i] = nbtTags.get(i).asByteTag().byteValue(); + for (int i = 0; i < nbtTags.size(); i++) bytes[i] = ((NumberTag) nbtTags.get(i)).asByte(); return new ByteArrayTag(bytes); - } else if (listType == Tag.INT) { + } else if (listType instanceof IntTag) { int[] ints = new int[nbtTags.size()]; - for (int i = 0; i < nbtTags.size(); i++) ints[i] = nbtTags.get(i).asIntTag().intValue(); + for (int i = 0; i < nbtTags.size(); i++) ints[i] = ((NumberTag) nbtTags.get(i)).asInt(); return new IntArrayTag(ints); - } else if (listType == Tag.LONG) { + } else if (listType instanceof LongTag) { long[] longs = new long[nbtTags.size()]; - for (int i = 0; i < nbtTags.size(); i++) longs[i] = nbtTags.get(i).asIntTag().intValue(); + for (int i = 0; i < nbtTags.size(); i++) longs[i] = ((NumberTag) nbtTags.get(i)).asLong(); return new LongArrayTag(longs); } else { return new ListTag<>(nbtTags); @@ -148,7 +146,7 @@ public class JsonNbtConverter { private static Tag getListType(final Tag current, final Tag tag) { if (current == null) return tag; - if (current != tag) return Tag.END; //Placeholder for mixed lists + if (current != tag) return null; //Placeholder for mixed lists return current; } diff --git a/MCStructs-text/src/test/java/net/lenni0451/mcstructs/text/serializer/TextComponentCodecTest.java b/MCStructs-text/src/test/java/net/lenni0451/mcstructs/text/serializer/TextComponentCodecTest.java index 503878a..00572d9 100644 --- a/MCStructs-text/src/test/java/net/lenni0451/mcstructs/text/serializer/TextComponentCodecTest.java +++ b/MCStructs-text/src/test/java/net/lenni0451/mcstructs/text/serializer/TextComponentCodecTest.java @@ -61,9 +61,9 @@ class TextComponentCodecTest { @Test void legacyItemDeserialization() throws SNbtSerializeException { - CompoundTag legacyNbt = new CompoundTag() - .put("id", "stone") - .putByte("Count", (byte) 5); + CompoundTag legacyNbt = new CompoundTag(); + legacyNbt.put("id", new StringTag("stone")); + legacyNbt.putByte("Count", (byte) 5); ATextComponent legacyComponent = new StringComponent("test") .setStyle(new Style() .setHoverEvent(new TextHoverEvent(HoverEventAction.SHOW_ITEM, new StringComponent(SNbtSerializer.LATEST.serialize(legacyNbt)))) @@ -80,10 +80,10 @@ class TextComponentCodecTest { @Test void legacyEntityDeserialization() throws SNbtSerializeException { UUID randomUUID = UUID.randomUUID(); - CompoundTag legacyNbt = new CompoundTag() - .put("name", "{\"text\":\"test\"}") - .put("type", "cow") - .put("id", randomUUID.toString()); + CompoundTag legacyNbt = new CompoundTag(); + legacyNbt.put("name", new StringTag("{\"text\":\"test\"}")); + legacyNbt.put("type", new StringTag("cow")); + legacyNbt.put("id", new StringTag(randomUUID.toString())); ATextComponent legacyComponent = new StringComponent("test") .setStyle(new Style() .setHoverEvent(new TextHoverEvent(HoverEventAction.SHOW_ENTITY, new StringComponent(SNbtSerializer.LATEST.serialize(legacyNbt)))) @@ -100,19 +100,31 @@ class TextComponentCodecTest { @Test void arrayWithTag() { - ListTag tags = new ListTag<>() - .add(new CompoundTag() - .putString("translate", "test") - .addByteArray("with", (byte) 1, (byte) 2, (byte) 3)) - .add(new CompoundTag() - .putString("translate", "test") - .addIntArray("with", 1, 2, 3)) - .add(new CompoundTag() - .putString("translate", "test") - .addLongArray("with", 1, 2, 3)) - .add(new CompoundTag() - .putString("translate", "test") - .addList("with", 1, 2, 3)); + CompoundTag translateWithByteArray = new CompoundTag(); + translateWithByteArray.putString("translate", "test"); + translateWithByteArray.put("with", new ByteArrayTag(new byte[]{1, 2, 3})); + + CompoundTag translateWithIntArray = new CompoundTag(); + translateWithIntArray.putString("translate", "test"); + translateWithIntArray.put("with", new IntArrayTag(new int[]{1, 2, 3})); + + CompoundTag translateWithLongArray = new CompoundTag(); + translateWithLongArray.putString("translate", "test"); + translateWithLongArray.put("with", new LongArrayTag(new long[]{1, 2, 3})); + + CompoundTag translateWithList = new CompoundTag(); + ListTag numberList = new ListTag<>(IntTag.class); + numberList.add(new IntTag(1)); + numberList.add(new IntTag(2)); + numberList.add(new IntTag(3)); + translateWithList.putString("translate", "test"); + translateWithList.put("with", numberList); + + ListTag tags = new ListTag<>(CompoundTag.class); + tags.add(translateWithByteArray); + tags.add(translateWithIntArray); + tags.add(translateWithLongArray); + tags.add(translateWithList); ATextComponent component = new TranslationComponent("test", (byte) 1, (byte) 2, (byte) 3) .append(new TranslationComponent("test", 1, 2, 3)) .append(new TranslationComponent("test", 1L, 2L, 3L)) diff --git a/build.gradle b/build.gradle index 62daf4c..382f00b 100644 --- a/build.gradle +++ b/build.gradle @@ -49,17 +49,17 @@ subprojects { publishing { repositories { maven { - name = "reposilite" - def releasesUrl = "https://maven.lenni0451.net/releases" - def snapshotsUrl = "https://maven.lenni0451.net/snapshots" - url = project.maven_version.endsWith("SNAPSHOT") ? snapshotsUrl : releasesUrl - - credentials(PasswordCredentials) + name = "Via" + url = uri("https://repo.viaversion.com/") + credentials { + username = System.getenv("via_username") + password = System.getenv("via_password") + } authentication { - basic(BasicAuthentication) + create(BasicAuthentication) } } - maven { + /*maven { name = "ossrh" def releasesUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" def snapshotsUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/" @@ -69,7 +69,7 @@ subprojects { authentication { basic(BasicAuthentication) } - } + }*/ } publications { maven(MavenPublication) { diff --git a/settings.gradle b/settings.gradle index 64fd6ec..46ca6cc 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,11 +11,6 @@ plugins { rootProject.name = "MCStructs" -include(":MCStructs-all") -include(":MCStructs-converter") include(":MCStructs-core") -include(":MCStructs-data") -include(":MCStructs-itemcomponents") -include(":MCStructs-nbt") include(":MCStructs-snbt") include(":MCStructs-text")