From 5cfe2f1694bd12bcf406374669a6997de51d6d17 Mon Sep 17 00:00:00 2001 From: Ap_Tx <3045929398@qq.com> Date: Tue, 6 Oct 2026 21:43:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20onClientRequest=E5=85=88REMOVE=E5=86=8DA?= =?UTF-8?q?DD=20objective+=E8=A1=A5=E5=88=86=E6=95=B0=E5=8C=85=EF=BC=88?= =?UTF-8?q?=E4=B8=A4=E6=A6=9C=E9=83=BD=E6=98=BE=E7=A4=BA=E4=B8=94=E4=B8=8D?= =?UTF-8?q?=E5=B4=A9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../carpetslsaddition/util/BoardManager.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) 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 69a1eb1..8c37421 100644 --- a/src/main/java/com/github/zly2006/carpetslsaddition/util/BoardManager.java +++ b/src/main/java/com/github/zly2006/carpetslsaddition/util/BoardManager.java @@ -108,7 +108,21 @@ public final class BoardManager { : server.getScoreboard().getObjective(objectiveName); ServerMain.LOGGER.info("[SLSA-BOARD] onClientRequest player={} name={} obj={}", player.getScoreboardName(), objectiveName, obj); - // 直接给该玩家发 display 包(slot=SIDEBAR,objective 可为 null 表示清除) + // 干净重建客户端该 objective:先 REMOVE(客户端没有则忽略),再 ADD + 分数包 + if (obj != null) { + player.connection.send(new net.minecraft.network.protocol.game.ClientboundSetObjectivePacket( + obj, net.minecraft.network.protocol.game.ClientboundSetObjectivePacket.METHOD_REMOVE)); + player.connection.send(new net.minecraft.network.protocol.game.ClientboundSetObjectivePacket( + obj, net.minecraft.network.protocol.game.ClientboundSetObjectivePacket.METHOD_ADD)); + if (server.getScoreboard() instanceof net.minecraft.server.ServerScoreboard ssb) { + for (var pkt : ssb.getStartTrackingPackets(obj)) { + if (pkt instanceof net.minecraft.network.protocol.game.ClientboundSetScorePacket) { + player.connection.send(pkt); + } + } + } + } + // 发 display 包(slot=SIDEBAR,objective 可为 null 表示清除) player.connection.send(new net.minecraft.network.protocol.game.ClientboundSetDisplayObjectivePacket( net.minecraft.world.scores.DisplaySlot.SIDEBAR, obj)); }