From d44ea0f4a7d34efe11e89a846717d720951660bf Mon Sep 17 00:00:00 2001 From: Ap_Tx <3045929398@qq.com> Date: Tue, 6 Oct 2026 21:01:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20objective=E6=94=B9=E5=9C=A8SERVER=5FSTAR?= =?UTF-8?q?TED=E5=88=9B=E5=BB=BA=EF=BC=88scoreboard=20load=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=90=8E=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 轮询线程比scoreboard.load更早跑,仍会撞名崩溃。改用ServerLifecycleEvents.SERVER_STARTED。 --- .../com/github/zly2006/carpetslsaddition/ServerMain.java | 6 ++++++ .../github/zly2006/carpetslsaddition/util/BoardManager.java | 6 ------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/ServerMain.java b/src/main/java/com/github/zly2006/carpetslsaddition/ServerMain.java index 802e110..68b6666 100644 --- a/src/main/java/com/github/zly2006/carpetslsaddition/ServerMain.java +++ b/src/main/java/com/github/zly2006/carpetslsaddition/ServerMain.java @@ -57,6 +57,12 @@ public class ServerMain implements ModInitializer, CarpetExtension { startBoardWatcher(server); } + /** 服务器完全启动后创建 objective(此时 scoreboard 已 load 完,避免重名崩溃)。 */ + static { + net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents.SERVER_STARTED.register(server -> + com.github.zly2006.carpetslsaddition.util.BoardManager.ensureObjectives(server)); + } + /** 每秒检测 slsBoardEnabled 规则变化并同步给客户端。 */ private void startBoardWatcher(MinecraftServer server) { Thread t = new Thread(() -> { diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/util/BoardManager.java b/src/main/java/com/github/zly2006/carpetslsaddition/util/BoardManager.java index 5a74f23..f2f0c3c 100644 --- a/src/main/java/com/github/zly2006/carpetslsaddition/util/BoardManager.java +++ b/src/main/java/com/github/zly2006/carpetslsaddition/util/BoardManager.java @@ -74,15 +74,9 @@ public final class BoardManager { access.set(value); } - private static boolean objectivesEnsured = false; - /** 从 stats 同步所有在线玩家的分数到 scoreboard(定期调用)。 */ public static void syncScores(MinecraftServer server) { Scoreboard sb = server.getScoreboard(); - if (!objectivesEnsured) { - ensureObjectives(server); - objectivesEnsured = true; - } Objective deaths = sb.getObjective(OBJ_DEATHS); Objective mined = sb.getObjective(OBJ_MINED); if (deaths == null && mined == null) {