From 244e65f12c66a3fa09b6d0e1128b6f4d4e03a539 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Wed, 16 Apr 2025 20:33:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=85=E6=B5=85=E6=B7=BB=E5=8A=A0=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E4=B9=8B=E5=89=8D=E8=B5=84=E6=BA=90=E5=8C=85=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/user/BukkitServerPlayer.java | 24 +++++++++++++++++++ .../core/entity/player/Player.java | 2 ++ .../core/plugin/network/NetWorkUser.java | 6 ++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java index 69d2848a0..d70c984b7 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java @@ -36,6 +36,7 @@ import java.lang.ref.Reference; import java.lang.ref.WeakReference; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -47,6 +48,7 @@ public class BukkitServerPlayer extends Player { private UUID uuid; private ConnectionState decoderState; private ConnectionState encoderState; + private UUID resourcePackUUID; // some references private Reference playerRef; private Reference serverPlayerRef; @@ -742,9 +744,31 @@ public class BukkitServerPlayer extends Player { this.hasClientMod = enable; } + @Override + public void setCurrentResourcePackUUID(UUID uuid) { + this.resourcePackUUID = uuid; + } + + @Override + public @Nullable UUID currentResourcePackUUID() { + return this.resourcePackUUID; + } + @Override public void clearView() { this.entityTypeView.clear(); this.furnitureView.clear(); } + + @Override + public void unloadCurrentResourcePack() { + if (decoderState() == ConnectionState.PLAY && this.resourcePackUUID != null && VersionHelper.isVersionNewerThan1_20_3()) { + try { + sendPacket(Reflections.constructor$ClientboundResourcePackPopPacket.newInstance(Optional.of(this.resourcePackUUID)), true); + this.resourcePackUUID = null; + } catch (ReflectiveOperationException e) { + this.plugin.logger().warn("Failed to unload resource pack for player " + name()); + } + } + } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/player/Player.java b/core/src/main/java/net/momirealms/craftengine/core/entity/player/Player.java index c0814beaf..0af8d0e34 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/player/Player.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/player/Player.java @@ -82,4 +82,6 @@ public abstract class Player extends Entity implements NetWorkUser { public abstract void closeInventory(); public abstract void clearView(); + + public abstract void unloadCurrentResourcePack(); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java index 2bf8b725c..2c1ea4b94 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java @@ -4,6 +4,7 @@ import io.netty.channel.Channel; import net.momirealms.craftengine.core.plugin.Plugin; import net.momirealms.craftengine.core.util.Key; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; @@ -50,5 +51,8 @@ public interface NetWorkUser { void setClientModState(boolean enable); - + void setCurrentResourcePackUUID(UUID uuid); + + @Nullable + UUID currentResourcePackUUID(); }