diff --git a/src/main/java/de/nexuslobby/modules/actionbar/ActionBarModule.java b/src/main/java/de/nexuslobby/modules/actionbar/ActionBarModule.java new file mode 100644 index 0000000..f27063a --- /dev/null +++ b/src/main/java/de/nexuslobby/modules/actionbar/ActionBarModule.java @@ -0,0 +1,82 @@ +package de.nexuslobby.modules.actionbar; + +import de.nexuslobby.NexusLobby; +import de.nexuslobby.api.Module; +import net.md_5.bungee.api.ChatMessageType; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.List; + +public class ActionBarModule implements Module { + + private int messageIndex = 0; + private int charIndex = 0; + private int pauseCounter = 0; + private boolean isWaiting = false; + private BukkitRunnable task; + + @Override + public String getName() { return "ActionBar"; } + + @Override + public void onEnable() { + FileConfiguration vConfig = NexusLobby.getInstance().getVisualsConfig(); + if (!vConfig.getBoolean("actionbar.enabled", true)) return; + + List messages = vConfig.getStringList("actionbar.messages"); + if (messages.isEmpty()) return; + + startTask(messages, vConfig); + } + + private void startTask(List messages, FileConfiguration vConfig) { + int speed = vConfig.getInt("actionbar.animation-speed", 2); + int holdDuration = vConfig.getInt("actionbar.hold-duration", 100); + + task = new BukkitRunnable() { + @Override + public void run() { + String currentMessage = messages.get(messageIndex); + + if (!isWaiting) { + if (charIndex < currentMessage.length()) { + charIndex++; + } else { + isWaiting = true; + } + } else { + pauseCounter++; + if (pauseCounter >= holdDuration) { + pauseCounter = 0; + charIndex = 0; + isWaiting = false; + messageIndex = (messageIndex + 1) % messages.size(); + } + } + + String textToSend = currentMessage.substring(0, charIndex); + sendToAll(colorize(textToSend)); + } + }; + task.runTaskTimer(NexusLobby.getInstance(), 0L, (long) speed); + } + + private void sendToAll(String message) { + for (Player player : Bukkit.getOnlinePlayers()) { + player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(message)); + } + } + + private String colorize(String s) { + return s == null ? "" : s.replace("&", "ยง"); + } + + @Override + public void onDisable() { + if (task != null) task.cancel(); + } +} \ No newline at end of file