From 4bae28d8e2956e46b1ad70eefd7918048a0fc48c Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Sun, 4 Jun 2023 16:37:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BA=20GSON=20=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20component=20=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/core/bukkit/HamsterCorePlugin.java | 3 +++ .../mc/plugin/core/common/util/CoreUtils.java | 4 ++++ .../util/serializer/ComponentTypeAdapter.java | 24 +++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/serializer/ComponentTypeAdapter.java diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java index 4a6b5d3..9a067c4 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java @@ -13,10 +13,12 @@ import cn.hamster3.mc.plugin.core.bukkit.page.listener.PageListener; import cn.hamster3.mc.plugin.core.bukkit.util.serializer.ItemStackAdapter; import cn.hamster3.mc.plugin.core.bukkit.util.serializer.PotionEffectAdapter; import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; +import cn.hamster3.mc.plugin.core.common.util.serializer.ComponentTypeAdapter; import cn.hamster3.mc.plugin.core.common.util.serializer.MessageTypeAdapter; import cn.hamster3.mc.plugin.core.common.util.CoreUtils; import com.google.gson.GsonBuilder; import net.kyori.adventure.platform.bukkit.BukkitAudiences; +import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; @@ -46,6 +48,7 @@ public class HamsterCorePlugin extends JavaPlugin { reloadConfig(); logger.info("已读取配置文件."); CoreUtils.GSON = new GsonBuilder() + .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) .registerTypeAdapter(ItemStack.class, ItemStackAdapter.INSTANCE) .registerTypeAdapter(PotionEffect.class, PotionEffectAdapter.INSTANCE) diff --git a/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CoreUtils.java b/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CoreUtils.java index 2b6b429..38105c2 100644 --- a/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CoreUtils.java +++ b/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/CoreUtils.java @@ -1,6 +1,7 @@ package cn.hamster3.mc.plugin.core.common.util; import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; +import cn.hamster3.mc.plugin.core.common.util.serializer.ComponentTypeAdapter; import cn.hamster3.mc.plugin.core.common.util.serializer.MessageTypeAdapter; import cn.hamster3.mc.plugin.core.common.thread.NamedThreadFactory; import com.google.gson.Gson; @@ -8,6 +9,7 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import net.kyori.adventure.key.Key; import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.title.Title; import org.jetbrains.annotations.NotNull; @@ -37,12 +39,14 @@ public final class CoreUtils { * GSON 工具 */ public static Gson GSON = new GsonBuilder() + .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) .create(); /** * GSON 工具,会使用格式化输出、且解析中包含null参数 */ public static Gson GSON_HUMAN = new GsonBuilder() + .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) .serializeNulls() .setPrettyPrinting() diff --git a/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/serializer/ComponentTypeAdapter.java b/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/serializer/ComponentTypeAdapter.java new file mode 100644 index 0000000..1189713 --- /dev/null +++ b/hamster-core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/serializer/ComponentTypeAdapter.java @@ -0,0 +1,24 @@ +package cn.hamster3.mc.plugin.core.common.util.serializer; + +import com.google.gson.*; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; + +import java.lang.reflect.Type; + +public class ComponentTypeAdapter implements JsonSerializer, JsonDeserializer { + public static final ComponentTypeAdapter INSTANCE = new ComponentTypeAdapter(); + + private ComponentTypeAdapter() { + } + + @Override + public Component deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + return GsonComponentSerializer.gson().deserializeFromTree(json); + } + + @Override + public JsonElement serialize(Component src, Type typeOfSrc, JsonSerializationContext context) { + return GsonComponentSerializer.gson().serializeToTree(src); + } +}