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) {