diff --git a/build.gradle.kts b/build.gradle.kts index f09f562..45df576 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "io.masel" -version = "1.5.0" +version = "2.0.0" labyMod { defaultPackageName = "io.masel.nbtviewer" @@ -13,24 +13,26 @@ labyMod { namespace = "nbt-viewer" displayName = "NBT Viewer" author = "ByteException_" - description = "LabyMod addon to view item nbt data in minecraft. Enable Advanced Tooltips (F3+H), hover over an item and press SHIFT. Magic starts..." - minecraftVersion = "1.17.1<1.21" - version = System.getenv().getOrDefault("VERSION", "1.5.0") + description = + "LabyMod addon to view item nbt data in minecraft. Enable Advanced Tooltips (F3+H), hover over an item and press SHIFT. Magic starts..." + minecraftVersion = "1.17.1<1.21.1" + version = System.getenv().getOrDefault("VERSION", "2.0.0") } minecraft { registerVersions( - "1.17.1", - "1.18.2", - "1.19.2", - "1.19.3", - "1.19.4", - "1.20.1", - "1.20.2", - "1.20.4", - "1.20.5", - "1.20.6", - "1.21" + "1.17.1", + "1.18.2", + "1.19.2", + "1.19.3", + "1.19.4", + "1.20.1", + "1.20.2", + "1.20.4", + "1.20.5", + "1.20.6", + "1.21", + "1.21.1" ) { version, provider -> configureRun(provider, version) } diff --git a/game-runner/src/v1_17_1/java/io/masel/nbtviewer/v1_17_1/NBTApiImpl.java b/game-runner/src/v1_17_1/java/io/masel/nbtviewer/v1_17_1/NBTApiImpl.java index 859c135..4864547 100644 --- a/game-runner/src/v1_17_1/java/io/masel/nbtviewer/v1_17_1/NBTApiImpl.java +++ b/game-runner/src/v1_17_1/java/io/masel/nbtviewer/v1_17_1/NBTApiImpl.java @@ -7,8 +7,8 @@ import net.labymod.api.models.Implements; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; import net.minecraft.nbt.StringTag; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ public String prettyPrint(DataComponentContainer components) { private JsonElement parseValue(@NotNull Object content) { try { return switch (content) { - case IntTag value -> new JsonPrimitive(value.getAsInt()); + case NumericTag value -> new JsonPrimitive(value.getAsString()); case StringTag value -> { try { yield JsonParser.parseString(value.getAsString()); diff --git a/game-runner/src/v1_18_2/java/io/masel/nbtviewer/v1_18_2/NBTApiImpl.java b/game-runner/src/v1_18_2/java/io/masel/nbtviewer/v1_18_2/NBTApiImpl.java index e606cb8..924f4c3 100644 --- a/game-runner/src/v1_18_2/java/io/masel/nbtviewer/v1_18_2/NBTApiImpl.java +++ b/game-runner/src/v1_18_2/java/io/masel/nbtviewer/v1_18_2/NBTApiImpl.java @@ -7,8 +7,8 @@ import net.labymod.api.models.Implements; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; import net.minecraft.nbt.StringTag; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ public String prettyPrint(DataComponentContainer components) { private JsonElement parseValue(@NotNull Object content) { try { return switch (content) { - case IntTag value -> new JsonPrimitive(value.getAsInt()); + case NumericTag value -> new JsonPrimitive(value.getAsString()); case StringTag value -> { try { yield JsonParser.parseString(value.getAsString()); diff --git a/game-runner/src/v1_19_2/java/io/masel/nbtviewer/v1_19_2/NBTApiImpl.java b/game-runner/src/v1_19_2/java/io/masel/nbtviewer/v1_19_2/NBTApiImpl.java index 5b61332..cfe62ad 100644 --- a/game-runner/src/v1_19_2/java/io/masel/nbtviewer/v1_19_2/NBTApiImpl.java +++ b/game-runner/src/v1_19_2/java/io/masel/nbtviewer/v1_19_2/NBTApiImpl.java @@ -7,8 +7,8 @@ import net.labymod.api.models.Implements; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; import net.minecraft.nbt.StringTag; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ public String prettyPrint(DataComponentContainer components) { private JsonElement parseValue(@NotNull Object content) { try { return switch (content) { - case IntTag value -> new JsonPrimitive(value.getAsInt()); + case NumericTag value -> new JsonPrimitive(value.getAsString()); case StringTag value -> { try { yield JsonParser.parseString(value.getAsString()); diff --git a/game-runner/src/v1_19_3/java/io/masel/nbtviewer/v1_19_3/NBTApiImpl.java b/game-runner/src/v1_19_3/java/io/masel/nbtviewer/v1_19_3/NBTApiImpl.java index acf8752..59cf8bb 100644 --- a/game-runner/src/v1_19_3/java/io/masel/nbtviewer/v1_19_3/NBTApiImpl.java +++ b/game-runner/src/v1_19_3/java/io/masel/nbtviewer/v1_19_3/NBTApiImpl.java @@ -7,8 +7,8 @@ import net.labymod.api.models.Implements; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; import net.minecraft.nbt.StringTag; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ public String prettyPrint(DataComponentContainer components) { private JsonElement parseValue(@NotNull Object content) { try { return switch (content) { - case IntTag value -> new JsonPrimitive(value.getAsInt()); + case NumericTag value -> new JsonPrimitive(value.getAsString()); case StringTag value -> { try { yield JsonParser.parseString(value.getAsString()); diff --git a/game-runner/src/v1_19_4/java/io/masel/nbtviewer/v1_19_4/NBTApiImpl.java b/game-runner/src/v1_19_4/java/io/masel/nbtviewer/v1_19_4/NBTApiImpl.java index 8d749ce..ab9de6b 100644 --- a/game-runner/src/v1_19_4/java/io/masel/nbtviewer/v1_19_4/NBTApiImpl.java +++ b/game-runner/src/v1_19_4/java/io/masel/nbtviewer/v1_19_4/NBTApiImpl.java @@ -7,8 +7,8 @@ import net.labymod.api.models.Implements; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; import net.minecraft.nbt.StringTag; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ public String prettyPrint(DataComponentContainer components) { private JsonElement parseValue(@NotNull Object content) { try { return switch (content) { - case IntTag value -> new JsonPrimitive(value.getAsInt()); + case NumericTag value -> new JsonPrimitive(value.getAsString()); case StringTag value -> { try { yield JsonParser.parseString(value.getAsString()); diff --git a/game-runner/src/v1_20_1/java/io/masel/nbtviewer/v1_20_1/NBTApiImpl.java b/game-runner/src/v1_20_1/java/io/masel/nbtviewer/v1_20_1/NBTApiImpl.java index e2656bc..3725ef4 100644 --- a/game-runner/src/v1_20_1/java/io/masel/nbtviewer/v1_20_1/NBTApiImpl.java +++ b/game-runner/src/v1_20_1/java/io/masel/nbtviewer/v1_20_1/NBTApiImpl.java @@ -7,8 +7,8 @@ import net.labymod.api.models.Implements; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; import net.minecraft.nbt.StringTag; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ public String prettyPrint(DataComponentContainer components) { private JsonElement parseValue(@NotNull Object content) { try { return switch (content) { - case IntTag value -> new JsonPrimitive(value.getAsInt()); + case NumericTag value -> new JsonPrimitive(value.getAsString()); case StringTag value -> { try { yield JsonParser.parseString(value.getAsString()); diff --git a/game-runner/src/v1_20_2/java/io/masel/nbtviewer/v1_20_2/NBTApiImpl.java b/game-runner/src/v1_20_2/java/io/masel/nbtviewer/v1_20_2/NBTApiImpl.java index c33ff9f..66d4319 100644 --- a/game-runner/src/v1_20_2/java/io/masel/nbtviewer/v1_20_2/NBTApiImpl.java +++ b/game-runner/src/v1_20_2/java/io/masel/nbtviewer/v1_20_2/NBTApiImpl.java @@ -7,8 +7,8 @@ import net.labymod.api.models.Implements; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; import net.minecraft.nbt.StringTag; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ public String prettyPrint(DataComponentContainer components) { private JsonElement parseValue(@NotNull Object content) { try { return switch (content) { - case IntTag value -> new JsonPrimitive(value.getAsInt()); + case NumericTag value -> new JsonPrimitive(value.getAsString()); case StringTag value -> { try { yield JsonParser.parseString(value.getAsString()); diff --git a/game-runner/src/v1_20_4/java/io/masel/nbtviewer/v1_20_4/NBTApiImpl.java b/game-runner/src/v1_20_4/java/io/masel/nbtviewer/v1_20_4/NBTApiImpl.java index 0154eeb..cdd93d0 100644 --- a/game-runner/src/v1_20_4/java/io/masel/nbtviewer/v1_20_4/NBTApiImpl.java +++ b/game-runner/src/v1_20_4/java/io/masel/nbtviewer/v1_20_4/NBTApiImpl.java @@ -7,8 +7,8 @@ import net.labymod.api.models.Implements; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; import net.minecraft.nbt.StringTag; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ public String prettyPrint(DataComponentContainer components) { private JsonElement parseValue(@NotNull Object content) { try { return switch (content) { - case IntTag value -> new JsonPrimitive(value.getAsInt()); + case NumericTag value -> new JsonPrimitive(value.getAsString()); case StringTag value -> { try { yield JsonParser.parseString(value.getAsString()); diff --git a/game-runner/src/v1_20_5/java/io/masel/nbtviewer/v1_20_5/NBTApiImpl.java b/game-runner/src/v1_20_5/java/io/masel/nbtviewer/v1_20_5/NBTApiImpl.java index be4dc87..2dac9b2 100644 --- a/game-runner/src/v1_20_5/java/io/masel/nbtviewer/v1_20_5/NBTApiImpl.java +++ b/game-runner/src/v1_20_5/java/io/masel/nbtviewer/v1_20_5/NBTApiImpl.java @@ -7,8 +7,8 @@ import net.labymod.api.models.Implements; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; import net.minecraft.nbt.StringTag; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ public String prettyPrint(DataComponentContainer components) { private JsonElement parseValue(@NotNull Object content) { try { return switch (content) { - case IntTag value -> new JsonPrimitive(value.getAsInt()); + case NumericTag value -> new JsonPrimitive(value.getAsString()); case StringTag value -> { try { yield JsonParser.parseString(value.getAsString()); diff --git a/game-runner/src/v1_20_6/java/io/masel/nbtviewer/v1_20_6/NBTApiImpl.java b/game-runner/src/v1_20_6/java/io/masel/nbtviewer/v1_20_6/NBTApiImpl.java index fe20343..7a8c0bb 100644 --- a/game-runner/src/v1_20_6/java/io/masel/nbtviewer/v1_20_6/NBTApiImpl.java +++ b/game-runner/src/v1_20_6/java/io/masel/nbtviewer/v1_20_6/NBTApiImpl.java @@ -7,8 +7,8 @@ import net.labymod.api.models.Implements; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; import net.minecraft.nbt.StringTag; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ public String prettyPrint(DataComponentContainer components) { private JsonElement parseValue(@NotNull Object content) { try { return switch (content) { - case IntTag value -> new JsonPrimitive(value.getAsInt()); + case NumericTag value -> new JsonPrimitive(value.getAsString()); case StringTag value -> { try { yield JsonParser.parseString(value.getAsString()); diff --git a/game-runner/src/v1_21/java/io/masel/nbtviewer/v1_21/NBTApiImpl.java b/game-runner/src/v1_21/java/io/masel/nbtviewer/v1_21/NBTApiImpl.java index b9b556b..d7ce478 100644 --- a/game-runner/src/v1_21/java/io/masel/nbtviewer/v1_21/NBTApiImpl.java +++ b/game-runner/src/v1_21/java/io/masel/nbtviewer/v1_21/NBTApiImpl.java @@ -7,8 +7,8 @@ import net.labymod.api.models.Implements; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; import net.minecraft.nbt.StringTag; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ public String prettyPrint(DataComponentContainer components) { private JsonElement parseValue(@NotNull Object content) { try { return switch (content) { - case IntTag value -> new JsonPrimitive(value.getAsInt()); + case NumericTag value -> new JsonPrimitive(value.getAsString()); case StringTag value -> { try { yield JsonParser.parseString(value.getAsString()); diff --git a/game-runner/src/v1_21_1/java/io/masel/nbtviewer/v1_21_1/NBTApiImpl.java b/game-runner/src/v1_21_1/java/io/masel/nbtviewer/v1_21_1/NBTApiImpl.java new file mode 100644 index 0000000..34021d2 --- /dev/null +++ b/game-runner/src/v1_21_1/java/io/masel/nbtviewer/v1_21_1/NBTApiImpl.java @@ -0,0 +1,82 @@ +package io.masel.nbtviewer.v1_21_1; + +import com.google.gson.*; +import io.masel.nbtviewer.api.INBTApi; +import net.labymod.api.component.data.DataComponentContainer; +import net.labymod.api.component.data.DataComponentKey; +import net.labymod.api.models.Implements; +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NumericTag; +import net.minecraft.nbt.StringTag; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +@Implements(INBTApi.class) +public class NBTApiImpl implements INBTApi { + + private final Gson gson = new GsonBuilder() + .serializeNulls() + .disableHtmlEscaping() + .setPrettyPrinting() + .create(); + + @Override + public boolean hasAdvancedToolsTips() { + return Minecraft.getInstance().options.advancedItemTooltips; + } + + @Override + public String prettyPrint(DataComponentContainer components) { + JsonObject jsonObject = new JsonObject(); + + List dataComponentKeys = new ArrayList<>(components.keySet()); + dataComponentKeys.sort(Comparator.comparing(DataComponentKey::name)); + + for (DataComponentKey dataComponentKey : dataComponentKeys) { + Object value = components.get(dataComponentKey); + + if (value == null) + continue; + + jsonObject.add(dataComponentKey.name(), this.parseValue(value)); + } + + return this.gson.toJson(jsonObject); + } + + private JsonElement parseValue(@NotNull Object content) { + try { + return switch (content) { + case NumericTag value -> new JsonPrimitive(value.getAsString()); + case StringTag value -> { + try { + yield JsonParser.parseString(value.getAsString()); + } catch (Throwable ignored) { + yield new JsonPrimitive(value.getAsString()); + } + } + case CompoundTag value -> this.gson.fromJson(value.getAsString(), JsonObject.class); + case ListTag value -> { + JsonArray jsonArray = new JsonArray(); + + for (Object element : value.toArray()) { + jsonArray.add(this.parseValue(element)); + } + + yield jsonArray; + } + default -> new JsonPrimitive(content.toString()); + }; + } catch (Throwable cause) { + cause.printStackTrace(); + } + + return JsonNull.INSTANCE; + } + +} \ No newline at end of file