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(