From 7d96ce0e418542ba4f2137f659c8cdb635ac5528 Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Fri, 4 Nov 2022 00:20:06 +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 --- build.gradle | 4 +- hamster-core-bukkit/build.gradle | 1 + .../plugin/core/bukkit/util/BukkitUtils.java | 43 +++++++++++++++++++ .../src/main/resources/plugin.yml | 1 + 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 4fd7443..548a252 100644 --- a/build.gradle +++ b/build.gradle @@ -30,8 +30,8 @@ subprojects { } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 // withJavadocJar() withSourcesJar() } diff --git a/hamster-core-bukkit/build.gradle b/hamster-core-bukkit/build.gradle index aa12516..fceb5dc 100644 --- a/hamster-core-bukkit/build.gradle +++ b/hamster-core-bukkit/build.gradle @@ -9,6 +9,7 @@ dependencies { compileOnly('net.milkbowl.vault:VaultAPI:1.7') { transitive = false } compileOnly('org.black_ixx:playerpoints:2.1.3') { transitive = false } + compileOnly("com.comphenix.protocol:ProtocolLib-API:4.4.0") { transitive = false } // https://mvnrepository.com/artifact/net.kyori/adventure-platform-bukkit api 'net.kyori:adventure-platform-bukkit:4.1.2' 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 e795a47..062e9f9 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,6 +1,9 @@ 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; @@ -12,8 +15,11 @@ 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 { @@ -30,6 +36,7 @@ public final class BukkitUtils { return Bukkit.getServer().getClass().getName().split("\\.")[3]; } + @SuppressWarnings("deprecation") @NotNull public static Package getNMSPackage() { String nmsVersion = getNMSVersion(); @@ -206,4 +213,40 @@ 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/resources/plugin.yml b/hamster-core-bukkit/src/main/resources/plugin.yml index 1cb0d2e..3240586 100644 --- a/hamster-core-bukkit/src/main/resources/plugin.yml +++ b/hamster-core-bukkit/src/main/resources/plugin.yml @@ -12,6 +12,7 @@ load: STARTUP softdepend: - Vault - PlayerPoints + - ProtocolLib loadbefore: - HamsterAPI