@@ -21,7 +21,7 @@ public class BossBarHandler {
2121
2222 private final PeekPlugin plugin ;
2323 private final Map <UUID , BossBar > distanceBossBars = new HashMap <>();
24-
24+
2525 // BossBar 配置
2626 private final boolean enabled ;
2727 private final String titleFormat ;
@@ -36,18 +36,19 @@ public class BossBarHandler {
3636 public BossBarHandler (PeekPlugin plugin ) {
3737 this .plugin = plugin ;
3838 this .maxPeekDistance = plugin .getConfig ().getDouble ("limits.max-peek-distance" , 50.0 );
39-
39+
4040 // 加载 BossBar 配置
4141 this .enabled = plugin .getConfig ().getBoolean ("bossbar.enabled" , true );
42- this .titleFormat = plugin .getConfig ().getString ("bossbar.title" , "&d距离 &f{target}&d: &e{distance} &7/ &e{max_distance} &d格" );
42+ this .titleFormat = plugin .getConfig ().getString ("bossbar.title" ,
43+ "&d距离 &f{target}&d: &e{distance} &7/ &e{max_distance} &d格" );
4344 this .style = parseBarStyle (plugin .getConfig ().getString ("bossbar.style" , "SEGMENTED_10" ));
4445 this .colorSafe = parseBarColor (plugin .getConfig ().getString ("bossbar.colors.safe" , "GREEN" ));
4546 this .colorWarning = parseBarColor (plugin .getConfig ().getString ("bossbar.colors.warning" , "YELLOW" ));
4647 this .colorDanger = parseBarColor (plugin .getConfig ().getString ("bossbar.colors.danger" , "RED" ));
4748 this .thresholdWarning = plugin .getConfig ().getDouble ("bossbar.thresholds.warning" , 0.5 );
4849 this .thresholdDanger = plugin .getConfig ().getDouble ("bossbar.thresholds.danger" , 0.75 );
4950 }
50-
51+
5152 private BarStyle parseBarStyle (String style ) {
5253 try {
5354 return BarStyle .valueOf (style .toUpperCase ());
@@ -56,7 +57,7 @@ private BarStyle parseBarStyle(String style) {
5657 return BarStyle .SEGMENTED_10 ;
5758 }
5859 }
59-
60+
6061 private BarColor parseBarColor (String color ) {
6162 try {
6263 return BarColor .valueOf (color .toUpperCase ());
@@ -68,20 +69,21 @@ private BarColor parseBarColor(String color) {
6869
6970 /**
7071 * 为观察者创建距离显示 BossBar
72+ *
7173 * @param peeker 观察者
7274 * @param target 目标玩家
7375 */
7476 public void createDistanceBossBar (Player peeker , Player target ) {
75- if (!enabled ) return ;
76-
77+ if (!enabled )
78+ return ;
79+
7780 removeDistanceBossBar (peeker ); // 确保没有残留
78-
81+
7982 String title = formatBossBarTitle (target .getName (), 0.0 );
8083 BossBar bar = Bukkit .createBossBar (
8184 title ,
8285 colorSafe ,
83- style
84- );
86+ style );
8587 bar .setProgress (0.0 );
8688 bar .addPlayer (peeker );
8789 distanceBossBars .put (peeker .getUniqueId (), bar );
@@ -90,26 +92,27 @@ public void createDistanceBossBar(Player peeker, Player target) {
9092
9193 /**
9294 * 为自我观察模式创建距离显示 BossBar
93- * @param peeker 观察者(同时也是目标)
95+ *
96+ * @param peeker 观察者(同时也是目标)
9497 * @param selfPeekLabel 自我观察的标签(如"原点")
9598 */
9699 public void createSelfPeekBossBar (Player peeker , String selfPeekLabel ) {
97- if (!enabled ) return ;
98-
100+ if (!enabled )
101+ return ;
102+
99103 removeDistanceBossBar (peeker ); // 确保没有残留
100-
104+
101105 String title = formatBossBarTitle (selfPeekLabel , 0.0 );
102106 BossBar bar = Bukkit .createBossBar (
103107 title ,
104108 colorSafe ,
105- style
106- );
109+ style );
107110 bar .setProgress (0.0 );
108111 bar .addPlayer (peeker );
109112 distanceBossBars .put (peeker .getUniqueId (), bar );
110113 logDebug ("Created self-peek BossBar for player %s" , peeker .getName ());
111114 }
112-
115+
113116 private String formatBossBarTitle (String targetName , double distance ) {
114117 return titleFormat
115118 .replace ("{target}" , targetName )
@@ -120,15 +123,20 @@ private String formatBossBarTitle(String targetName, double distance) {
120123
121124 /**
122125 * 更新观察者的距离 BossBar
123- * @param peeker 观察者
124- * @param distance 当前距离
126+ *
127+ * @param peeker 观察者
128+ * @param distance 当前距离
125129 * @param targetName 目标玩家名称
126130 */
127131 public void updateDistanceBossBar (Player peeker , double distance , String targetName ) {
128- if (!enabled ) return ;
129-
132+ if (!enabled )
133+ return ;
134+ if (!peeker .isOnline ())
135+ return ;
136+
130137 BossBar bar = distanceBossBars .get (peeker .getUniqueId ());
131- if (bar == null ) return ;
138+ if (bar == null )
139+ return ;
132140
133141 double progress = Math .min (distance / maxPeekDistance , 1.0 );
134142 bar .setProgress (progress );
@@ -147,12 +155,14 @@ public void updateDistanceBossBar(Player peeker, double distance, String targetN
147155
148156 /**
149157 * 更新观察者的距离 BossBar(从 PeekData 获取目标信息)
150- * @param peeker 观察者
158+ *
159+ * @param peeker 观察者
151160 * @param distance 当前距离
152- * @param data PeekData 数据
161+ * @param data PeekData 数据
153162 */
154163 public void updateDistanceBossBar (Player peeker , double distance , PeekData data ) {
155- if (!enabled || data == null ) return ;
164+ if (!enabled || data == null )
165+ return ;
156166
157167 Player target = plugin .getServer ().getPlayer (data .getTargetUUID ());
158168 String targetName = target != null ? target .getName () : "未知" ;
@@ -161,6 +171,7 @@ public void updateDistanceBossBar(Player peeker, double distance, PeekData data)
161171
162172 /**
163173 * 移除观察者的距离 BossBar
174+ *
164175 * @param peeker 观察者
165176 */
166177 public void removeDistanceBossBar (Player peeker ) {
@@ -172,6 +183,7 @@ public void removeDistanceBossBar(Player peeker) {
172183
173184 /**
174185 * 安全地移除 BossBar(使用正确的线程调度)
186+ *
175187 * @param peeker 观察者
176188 */
177189 public void safeRemoveDistanceBossBar (Player peeker ) {
@@ -180,7 +192,7 @@ public void safeRemoveDistanceBossBar(Player peeker) {
180192 removeDistanceBossBar (peeker );
181193 return ;
182194 }
183-
195+
184196 if (peeker .isOnline ()) {
185197 peeker .getScheduler ().run (plugin , scheduledTask -> removeDistanceBossBar (peeker ), null );
186198 } else {
@@ -190,6 +202,7 @@ public void safeRemoveDistanceBossBar(Player peeker) {
190202
191203 /**
192204 * 检查是否启用 BossBar
205+ *
193206 * @return 是否启用
194207 */
195208 public boolean isEnabled () {
0 commit comments