From 933c4c0db050b063a5141935e421cfa50b88994b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 9 Nov 2025 19:32:44 +0100 Subject: [PATCH] refactored `InfoBars` handling logic; replaced persistent data with direct visibility control --- .../metaGameplay/infoBars/InfoBars.java | 57 ++++--------------- 1 file changed, 11 insertions(+), 46 deletions(-) diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/infoBars/InfoBars.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/infoBars/InfoBars.java index 9ad7912..bc0d699 100644 --- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/infoBars/InfoBars.java +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/infoBars/InfoBars.java @@ -1,25 +1,18 @@ package eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.infoBars; import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.settings.Settings; -import eu.mhsl.craftattack.spawn.core.Main; import eu.mhsl.craftattack.spawn.core.appliance.Appliance; import eu.mhsl.craftattack.spawn.core.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.infoBars.bars.MsptBar; import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.infoBars.bars.PlayerCounterBar; import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.infoBars.bars.TpsBar; -import org.bukkit.Bukkit; -import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.event.Listener; -import org.bukkit.persistence.PersistentDataContainer; -import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; import java.util.List; public class InfoBars extends Appliance { - private final NamespacedKey infoBarKey = new NamespacedKey(Main.instance(), "infobars"); private final List infoBars = List.of( new TpsBar(), new MsptBar(), @@ -27,41 +20,19 @@ public class InfoBars extends Appliance { ); public void showAllEnabled(Player player) { - this.getEnabledBars(player).forEach(bar -> this.show(player, bar)); + InfoBarSetting.InfoBarConfiguration config = Settings.instance().getSetting(player, Settings.Key.InfoBars, InfoBarSetting.InfoBarConfiguration.class); + this.setVisible(player, MsptBar.name, config.mspt()); + this.setVisible(player, PlayerCounterBar.name, config.playerCounter()); + this.setVisible(player, TpsBar.name, config.tps()); } - public void hideAllEnabled(Player player) { - this.getEnabledBars(player).forEach(bar -> this.hide(player, bar)); - this.setEnabledBars(player, List.of()); - } - - public void show(Player player, String bar) { + public void setVisible(Player player, String bar, boolean visible) { this.validateBarName(bar); - List existingBars = new ArrayList<>(this.getEnabledBars(player)); - existingBars.add(bar); - player.showBossBar(this.getBarByName(bar).getBossBar()); - this.setEnabledBars(player, existingBars); - } - - public void hide(Player player, String bar) { - this.validateBarName(bar); - List existingBars = new ArrayList<>(this.getEnabledBars(player)); - existingBars.remove(bar); - player.hideBossBar(this.getBarByName(bar).getBossBar()); - this.setEnabledBars(player, existingBars); - } - - private List getEnabledBars(Player player) { - PersistentDataContainer container = player.getPersistentDataContainer(); - if(!container.has(this.infoBarKey)) return List.of(); - return container.get(this.infoBarKey, PersistentDataType.LIST.strings()); - } - - private void setEnabledBars(Player player, List bars) { - Bukkit.getScheduler().runTask( - Main.instance(), - () -> player.getPersistentDataContainer().set(this.infoBarKey, PersistentDataType.LIST.strings(), bars) - ); + if(visible) { + player.showBossBar(this.getBarByName(bar).getBossBar()); + } else { + player.hideBossBar(this.getBarByName(bar).getBossBar()); + } } private Bar getBarByName(String name) { @@ -79,13 +50,7 @@ public class InfoBars extends Appliance { @Override public void onEnable() { Settings.instance().declareSetting(InfoBarSetting.class); - Settings.instance().addChangeListener(InfoBarSetting.class, player -> { - this.hideAllEnabled(player); - InfoBarSetting.InfoBarConfiguration config = Settings.instance().getSetting(player, Settings.Key.InfoBars, InfoBarSetting.InfoBarConfiguration.class); - if(config.mspt()) this.show(player, MsptBar.name); - if(config.playerCounter()) this.show(player, PlayerCounterBar.name); - if(config.tps()) this.show(player, TpsBar.name); - }); + Settings.instance().addChangeListener(InfoBarSetting.class, this::showAllEnabled); } @Override