From 029aebbe9459d407dc7f3ede5f9a3831c217cbf8 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Tue, 22 Apr 2025 22:00:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dfolia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/user/BukkitServerPlayer.java | 12 ++++++++++- .../craftengine/bukkit/util/Reflections.java | 20 +++++++++---------- 2 files changed, 21 insertions(+), 11 deletions(-) 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 3881c558c..acf55c019 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 @@ -317,7 +317,17 @@ public class BukkitServerPlayer extends Player { public void tick() { // not fully online if (serverPlayer() == null) return; - this.gameTicks = FastNMS.INSTANCE.field$MinecraftServer$currentTick(); + if (VersionHelper.isFolia()) { + try { + Object serverPlayer = serverPlayer(); + Object gameMode = Reflections.field$ServerPlayer$gameMode.get(serverPlayer); + this.gameTicks = (int) Reflections.field$ServerPlayerGameMode$gameTicks.get(gameMode); + } catch (ReflectiveOperationException e) { + CraftEngine.instance().logger().warn("Failed to get game tick for " + name(), e); + } + } else { + this.gameTicks = FastNMS.INSTANCE.field$MinecraftServer$currentTick(); + } if (this.isDestroyingBlock) { this.tickBlockDestroy(); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index d823eeacc..8d0465e6c 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -2919,11 +2919,11 @@ public class Reflections { ) ); -// public static final Field field$ServerPlayer$gameMode = requireNonNull( -// ReflectionUtils.getDeclaredField( -// clazz$ServerPlayer, clazz$ServerPlayerGameMode, 0 -// ) -// ); + public static final Field field$ServerPlayer$gameMode = requireNonNull( + ReflectionUtils.getDeclaredField( + clazz$ServerPlayer, clazz$ServerPlayerGameMode, 0 + ) + ); public static final Field field$ServerPlayerGameMode$destroyProgressStart = requireNonNull( ReflectionUtils.getDeclaredField( @@ -2931,11 +2931,11 @@ public class Reflections { ) ); -// public static final Field field$ServerPlayerGameMode$gameTicks = requireNonNull( -// ReflectionUtils.getDeclaredField( -// clazz$ServerPlayerGameMode, int.class, 1 -// ) -// ); + public static final Field field$ServerPlayerGameMode$gameTicks = requireNonNull( + ReflectionUtils.getDeclaredField( + clazz$ServerPlayerGameMode, int.class, 1 + ) + ); public static final Field field$ServerPlayerGameMode$delayedTickStart = requireNonNull( ReflectionUtils.getDeclaredField(