From 9f1caa71ae2d4c11842dd75be1ecd400c70e1576 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Thu, 22 Jan 2026 14:56:33 +0000 Subject: [PATCH] Dateien nach "src/main/java/de/nexuslobby/modules/bossbar" hochladen --- .../modules/bossbar/BossBarModule.java | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/main/java/de/nexuslobby/modules/bossbar/BossBarModule.java diff --git a/src/main/java/de/nexuslobby/modules/bossbar/BossBarModule.java b/src/main/java/de/nexuslobby/modules/bossbar/BossBarModule.java new file mode 100644 index 0000000..91a5807 --- /dev/null +++ b/src/main/java/de/nexuslobby/modules/bossbar/BossBarModule.java @@ -0,0 +1,127 @@ +package de.nexuslobby.modules.bossbar; + +import de.nexuslobby.NexusLobby; +import de.nexuslobby.api.Module; +import me.clip.placeholderapi.PlaceholderAPI; +import org.bukkit.Bukkit; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.List; + +public class BossBarModule implements Module { + + private BossBar bossBar; + private int messageIndex = 0; + private int charIndex = 0; + private int pauseCounter = 0; + private boolean deleting = false; + private BukkitRunnable task; + + @Override + public String getName() { return "BossBar"; } + + @Override + public void onEnable() { + FileConfiguration vConfig = NexusLobby.getInstance().getVisualsConfig(); + if (!vConfig.getBoolean("bossbar.enabled", true)) return; + + List messages = vConfig.getStringList("bossbar.messages"); + if (messages.isEmpty()) return; + + String configColor = vConfig.getString("bossbar.color", "YELLOW").toUpperCase(); + String configStyle = vConfig.getString("bossbar.style", "SOLID").toUpperCase(); + + BarColor barColor; + try { + if (configColor.equals("GOLD")) configColor = "YELLOW"; + barColor = BarColor.valueOf(configColor); + } catch (IllegalArgumentException e) { + barColor = BarColor.YELLOW; + } + + BarStyle barStyle; + try { + barStyle = BarStyle.valueOf(configStyle); + } catch (IllegalArgumentException e) { + barStyle = BarStyle.SOLID; + } + + bossBar = Bukkit.createBossBar("", barColor, barStyle); + bossBar.setVisible(true); + + startTypewriterTask(messages, vConfig); + } + + private void startTypewriterTask(List messages, FileConfiguration vConfig) { + task = new BukkitRunnable() { + @Override + public void run() { + for (Player player : Bukkit.getOnlinePlayers()) { + if (!bossBar.getPlayers().contains(player)) { + bossBar.addPlayer(player); + } + } + + String currentFullMessage = messages.get(messageIndex); + currentFullMessage = replacePlaceholders(currentFullMessage); + + if (!deleting) { + if (charIndex < currentFullMessage.length()) { + charIndex++; + } else { + pauseCounter++; + // Nutzt den Wert aus visuals.yml + int pauseTime = vConfig.getInt("bossbar.pause-seconds", 4) * 7; + if (pauseCounter > pauseTime) { + deleting = true; + pauseCounter = 0; + } + } + } else { + if (charIndex > 0) { + charIndex--; + } else { + deleting = false; + messageIndex = (messageIndex + 1) % messages.size(); + } + } + + if (charIndex > 0 && charIndex <= currentFullMessage.length()) { + String displayedText = currentFullMessage.substring(0, charIndex); + bossBar.setTitle(colorize(displayedText)); + } else if (charIndex == 0) { + bossBar.setTitle(""); + } + + double progress = (double) charIndex / Math.max(1, currentFullMessage.length()); + bossBar.setProgress(Math.min(1.0, progress)); + } + }; + task.runTaskTimer(NexusLobby.getInstance(), 0L, 3L); + } + + private String replacePlaceholders(String text) { + text = text.replace("{online}", String.valueOf(Bukkit.getOnlinePlayers().size())); + if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { + text = PlaceholderAPI.setPlaceholders(null, text); + } + return text; + } + + private String colorize(String s) { + return s == null ? "" : s.replace("&", "ยง"); + } + + @Override + public void onDisable() { + if (task != null) task.cancel(); + if (bossBar != null) { + bossBar.removeAll(); + } + } +} \ No newline at end of file