From a78b0709c655492a0b1f210fa5a8b58357dd255c Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Fri, 4 Nov 2022 00:25:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=9B=B4=E5=A4=9A?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/core/bukkit/util/BukkitUtils.java | 44 +-------- .../core/bukkit/util/SerializeUtils.java | 92 +++++++++++++++++++ 2 files changed, 93 insertions(+), 43 deletions(-) create mode 100644 hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/SerializeUtils.java diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitUtils.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitUtils.java index 062e9f9..3de5777 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitUtils.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitUtils.java @@ -1,9 +1,6 @@ package cn.hamster3.mc.plugin.core.bukkit.util; -import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; -import com.comphenix.protocol.utility.StreamSerializer; -import com.google.gson.JsonElement; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -15,11 +12,8 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import java.io.IOException; import java.util.UUID; -import java.util.logging.Level; @SuppressWarnings("unused") public final class BukkitUtils { @@ -137,7 +131,7 @@ public final class BukkitUtils { * @return 是否为空 */ public static boolean isEmptyItemStack(ItemStack stack) { - return stack == null || stack.getType() == Material.AIR || stack.getAmount() < 1; + return stack == null || stack.getAmount() < 1 || stack.getType() == Material.AIR; } /** @@ -213,40 +207,4 @@ public final class BukkitUtils { } return displayMessage; } - - public static String serializeItemStack(@Nullable ItemStack stack) { - if (!Bukkit.getPluginManager().isPluginEnabled("ProtocolLib")) { - HamsterCorePlugin.getInstance().getLogger().warning("ProtocolLib 前置插件未启用, 无法序列化物品!"); - return null; - } - if (isEmptyItemStack(stack)) { - return null; - } - try { - return StreamSerializer.getDefault().serializeItemStack(stack); - } catch (IOException e) { - HamsterCorePlugin.getInstance().getLogger().log(Level.WARNING, "序列化物品 " + stack + " 时出错!", e); - return null; - } - } - - public static ItemStack deserializeItemStack(@NotNull JsonElement element) { - if (!Bukkit.getPluginManager().isPluginEnabled("ProtocolLib")) { - HamsterCorePlugin.getInstance().getLogger().warning("ProtocolLib 前置插件未启用, 无法反序列化物品!"); - return null; - } - try { - if (element.isJsonNull()) { - return null; - } - String s = element.getAsString(); - if (s == null || s.length() < 1) { - return null; - } - return StreamSerializer.getDefault().deserializeItemStack(s); - } catch (Exception e) { - HamsterCorePlugin.getInstance().getLogger().log(Level.WARNING, "反序列化物品 " + element + " 时出错!", e); - return null; - } - } } diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/SerializeUtils.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/SerializeUtils.java new file mode 100644 index 0000000..950518e --- /dev/null +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/SerializeUtils.java @@ -0,0 +1,92 @@ +package cn.hamster3.mc.plugin.core.bukkit.util; + +import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; +import com.comphenix.protocol.utility.StreamSerializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import org.bukkit.Bukkit; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.IOException; +import java.util.logging.Level; + +@SuppressWarnings("unused") +public final class SerializeUtils { + private SerializeUtils() { + } + + @Nullable + public static String serializeItemStack(@Nullable ItemStack stack) { + if (!Bukkit.getPluginManager().isPluginEnabled("ProtocolLib")) { + HamsterCorePlugin.getInstance().getLogger().warning("ProtocolLib 前置插件未启用, 无法序列化物品!"); + return null; + } + if (BukkitUtils.isEmptyItemStack(stack)) { + return null; + } + try { + return StreamSerializer.getDefault().serializeItemStack(stack); + } catch (IOException e) { + HamsterCorePlugin.getInstance().getLogger().log(Level.WARNING, "序列化物品 " + stack + " 时出错!", e); + return null; + } + } + + @Nullable + public static ItemStack deserializeItemStack(@NotNull JsonElement element) { + if (!Bukkit.getPluginManager().isPluginEnabled("ProtocolLib")) { + HamsterCorePlugin.getInstance().getLogger().warning("ProtocolLib 前置插件未启用, 无法反序列化物品!"); + return null; + } + try { + if (element.isJsonNull()) { + return null; + } + String s = element.getAsString(); + if (s == null || s.length() < 1) { + return null; + } + return StreamSerializer.getDefault().deserializeItemStack(s); + } catch (Exception e) { + HamsterCorePlugin.getInstance().getLogger().log(Level.WARNING, "反序列化物品 " + element + " 时出错!", e); + return null; + } + } + + @Nullable + public static JsonObject serializePotionEffect(@NotNull PotionEffect effect) { + try { + JsonObject object = new JsonObject(); + object.addProperty("type", effect.getType().getName()); + object.addProperty("duration", effect.getDuration()); + object.addProperty("amplifier", effect.getAmplifier()); + return object; + } catch (Exception e) { + HamsterCorePlugin.getInstance().getLogger().log(Level.WARNING, "序列化药水效果 " + effect + " 时出错!", e); + } + return null; + } + + @Nullable + public static PotionEffect deserializePotionEffect(@NotNull JsonElement element) { + if (!element.isJsonObject()) { + return null; + } + JsonObject effectObject = element.getAsJsonObject(); + try { + //noinspection ConstantConditions + return new PotionEffect( + PotionEffectType.getByName(effectObject.get("type").getAsString()), + effectObject.get("duration").getAsInt(), + effectObject.get("amplifier").getAsInt() + ); + } catch (Exception e) { + HamsterCorePlugin.getInstance().getLogger().log(Level.WARNING, "反序列化药水效果 " + element + " 时出错!", e); + return null; + } + } +}