refactored InfoBars handling logic; replaced persistent data with direct visibility control
This commit is contained in:
@@ -1,25 +1,18 @@
|
|||||||
package eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.infoBars;
|
package eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.infoBars;
|
||||||
|
|
||||||
import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.settings.Settings;
|
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.Appliance;
|
||||||
import eu.mhsl.craftattack.spawn.core.appliance.ApplianceCommand;
|
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.MsptBar;
|
||||||
import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.infoBars.bars.PlayerCounterBar;
|
import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.infoBars.bars.PlayerCounterBar;
|
||||||
import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.infoBars.bars.TpsBar;
|
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.entity.Player;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.persistence.PersistentDataContainer;
|
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class InfoBars extends Appliance {
|
public class InfoBars extends Appliance {
|
||||||
private final NamespacedKey infoBarKey = new NamespacedKey(Main.instance(), "infobars");
|
|
||||||
private final List<Bar> infoBars = List.of(
|
private final List<Bar> infoBars = List.of(
|
||||||
new TpsBar(),
|
new TpsBar(),
|
||||||
new MsptBar(),
|
new MsptBar(),
|
||||||
@@ -27,41 +20,19 @@ public class InfoBars extends Appliance {
|
|||||||
);
|
);
|
||||||
|
|
||||||
public void showAllEnabled(Player player) {
|
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) {
|
public void setVisible(Player player, String bar, boolean visible) {
|
||||||
this.getEnabledBars(player).forEach(bar -> this.hide(player, bar));
|
|
||||||
this.setEnabledBars(player, List.of());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void show(Player player, String bar) {
|
|
||||||
this.validateBarName(bar);
|
this.validateBarName(bar);
|
||||||
List<String> existingBars = new ArrayList<>(this.getEnabledBars(player));
|
if(visible) {
|
||||||
existingBars.add(bar);
|
|
||||||
player.showBossBar(this.getBarByName(bar).getBossBar());
|
player.showBossBar(this.getBarByName(bar).getBossBar());
|
||||||
this.setEnabledBars(player, existingBars);
|
} else {
|
||||||
}
|
|
||||||
|
|
||||||
public void hide(Player player, String bar) {
|
|
||||||
this.validateBarName(bar);
|
|
||||||
List<String> existingBars = new ArrayList<>(this.getEnabledBars(player));
|
|
||||||
existingBars.remove(bar);
|
|
||||||
player.hideBossBar(this.getBarByName(bar).getBossBar());
|
player.hideBossBar(this.getBarByName(bar).getBossBar());
|
||||||
this.setEnabledBars(player, existingBars);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> 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<String> bars) {
|
|
||||||
Bukkit.getScheduler().runTask(
|
|
||||||
Main.instance(),
|
|
||||||
() -> player.getPersistentDataContainer().set(this.infoBarKey, PersistentDataType.LIST.strings(), bars)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Bar getBarByName(String name) {
|
private Bar getBarByName(String name) {
|
||||||
@@ -79,13 +50,7 @@ public class InfoBars extends Appliance {
|
|||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
Settings.instance().declareSetting(InfoBarSetting.class);
|
Settings.instance().declareSetting(InfoBarSetting.class);
|
||||||
Settings.instance().addChangeListener(InfoBarSetting.class, player -> {
|
Settings.instance().addChangeListener(InfoBarSetting.class, this::showAllEnabled);
|
||||||
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);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user