fix: 修复objective重复创建崩溃(ensure推迟到scoreboard load后)
onServerLoaded时机太早,scoreboard.dat还没load完,getObjective返回null导致重复addObjective崩溃。改为syncScores首次调用时ensure。
This commit is contained in:
1 parent
33542f9678
commit
de966ac511
2 files changed
+6
-1
No files matched your search
@@ -54,7 +54,6 @@ public class ServerMain implements ModInitializer, CarpetExtension {
|
|||||||
public void onServerLoaded(MinecraftServer server) {
|
public void onServerLoaded(MinecraftServer server) {
|
||||||
ServerMain.server = server;
|
ServerMain.server = server;
|
||||||
com.github.zly2006.carpetslsaddition.util.BotListManager.load();
|
com.github.zly2006.carpetslsaddition.util.BotListManager.load();
|
||||||
com.github.zly2006.carpetslsaddition.util.BoardManager.ensureObjectives(server);
|
|
||||||
startBoardWatcher(server);
|
startBoardWatcher(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,9 +74,15 @@ public final class BoardManager {
|
|||||||
access.set(value);
|
access.set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean objectivesEnsured = false;
|
||||||
|
|
||||||
/** 从 stats 同步所有在线玩家的分数到 scoreboard(定期调用)。 */
|
/** 从 stats 同步所有在线玩家的分数到 scoreboard(定期调用)。 */
|
||||||
public static void syncScores(MinecraftServer server) {
|
public static void syncScores(MinecraftServer server) {
|
||||||
Scoreboard sb = server.getScoreboard();
|
Scoreboard sb = server.getScoreboard();
|
||||||
|
if (!objectivesEnsured) {
|
||||||
|
ensureObjectives(server);
|
||||||
|
objectivesEnsured = true;
|
||||||
|
}
|
||||||
Objective deaths = sb.getObjective(OBJ_DEATHS);
|
Objective deaths = sb.getObjective(OBJ_DEATHS);
|
||||||
Objective mined = sb.getObjective(OBJ_MINED);
|
Objective mined = sb.getObjective(OBJ_MINED);
|
||||||
if (deaths == null && mined == null) {
|
if (deaths == null && mined == null) {
|
||||||
|
|||||||
Reference in new issue
Block a user