Spigot BossBar Plugin: Persistent Global Bar with Color Command

Answered using AI by Vibe Coding

Code Question:

Напиши код для отображения постоянного BossBar всем игрокам с текстом например "Test", и возможность установить цвет BLUE, GREEN, PINK, PURPLE, REBECCA_PURPLE, RED, WHITE, YELLOW, для Spigot API Minecraft: Java Edition

Code Solution:

Конечно, вот код для Spigot API, который позволяет отображать постоянный BossBar всем игрокам с заданным текстом и цветом:

import org.bukkit.Bukkit;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
import org.bukkit.boss.BossBar;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class BossBarPlugin extends JavaPlugin {

    private BossBar bossBar;

    @Override
    public void onEnable() {
        // Инициализация BossBar при включении плагина
        // По умолчанию BossBar будет иметь текст "Test" и цвет BLUE
        bossBar = Bukkit.createBossBar("Test", BarColor.BLUE, BarStyle.SOLID);
        bossBar.setVisible(true); // Делаем BossBar видимым

        // Добавляем всех текущих игроков к BossBar
        for (Player player : Bukkit.getOnlinePlayers()) {
            bossBar.addPlayer(player);
        }

        getLogger().info("BossBarPlugin включен!");
    }

    @Override
    public void onDisable() {
        // Удаляем BossBar при выключении плагина
        bossBar.removeAll();
        getLogger().info("BossBarPlugin выключен!");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (!(sender instanceof Player)) {
            sender.sendMessage("Эту команду могут использовать только игроки.");
            return true;
        }

        Player player = (Player) sender;

        if (command.getName().equalsIgnoreCase("setbossbar")) {
            if (args.length >= 1) {
                String text = args[0].replace("_", " "); // Заменяем подчеркивания на пробелы для текста
                bossBar.setTitle(text);
                player.sendMessage("Текст BossBar установлен на: " + text);
            }

            if (args.length >= 2) {
                try {
                    BarColor color = BarColor.valueOf(args[1].toUpperCase());
                    bossBar.setColor(color);
                    player.sendMessage("Цвет BossBar установлен на: " + color.name());
                } catch (IllegalArgumentException e) {
                    player.sendMessage("Неверный цвет BossBar. Доступные цвета: BLUE, GREEN, PINK, PURPLE, REBECCA_PURPLE, RED, WHITE, YELLOW.");
                }
            }
            return true;
        }
        return false;
    }

    // Метод для добавления новых игроков к BossBar
    // Вы можете вызвать его в событии PlayerJoinEvent
    public void addPlayerToBossBar(Player player) {
        if (!bossBar.getPlayers().contains(player)) {
            bossBar.addPlayer(player);
        }
    }

    // Метод для удаления игроков из BossBar
    // Вы можете вызвать его в событии PlayerQuitEvent
    public void removePlayerFromBossBar(Player player) {
        bossBar.removePlayer(player);
    }
}

Как использовать этот код:

  1. Создайте новый проект Spigot/Paper:

    • Используйте Maven или Gradle для создания нового проекта Spigot.
    • Добавьте зависимость Spigot API в ваш pom.xml или build.gradle.
  2. Создайте файл plugin.yml в папке src/main/resources:

    name: BossBarPlugin
    version: 1.0
    main: your.package.name.BossBarPlugin
    api-version: 1.16 # Укажите вашу версию API
    commands:
      setbossbar:
        description: Установить текст и цвет BossBar.
        usage: /setbossbar <текст> [цвет]
    

    Замените your.package.name на фактический путь к вашему классу BossBarPlugin.

  3. Скомпилируйте плагин:

    • Используйте mvn clean package или gradle build для создания .jar файла.
  4. Установите плагин на ваш сервер Spigot/Paper.

Функциональность:

  • Постоянный BossBar: При включении плагина создается BossBar, который автоматически отображается всем онлайн-игрокам.

  • Автоматическое добавление новых игроков: Вам нужно будет добавить обработчик события PlayerJoinEvent, чтобы добавлять новых игроков к BossBar. Пример:

    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    
    public class PlayerListener implements Listener {
    
        private BossBarPlugin plugin;
    
        public PlayerListener(BossBarPlugin plugin) {
            this.plugin = plugin;
        }
    
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent event) {
            plugin.addPlayerToBossBar(event.getPlayer());
        }
    
        @EventHandler
        public void onPlayerQuit(PlayerQuitEvent event) {
            plugin.removePlayerFromBossBar(event.getPlayer());
        }
    }
    

    И зарегистрировать его в onEnable() вашего BossBarPlugin:

    @Override
    public void onEnable() {
        // ... (существующий код)
        getServer().getPluginManager().registerEvents(new PlayerListener(this), this);
        // ...
    }
    
  • Команда /setbossbar <текст> [цвет]:

    • текст: Устанавливает новый текст для BossBar. Если текст содержит пробелы, вы можете использовать подчеркивания (_), которые будут заменены на пробелы. Например, /setbossbar Привет_мир.
    • цвет (необязательно): Устанавливает цвет BossBar. Доступные цвета: BLUE, GREEN, PINK, PURPLE, REBECCA_PURPLE, RED, WHITE, YELLOW.

Примеры использования команды:

  • /setbossbar Мой_новый_BossBar - Установит текст "Мой новый BossBar" с текущим цветом.
  • /setbossbar Тестовый_текст RED - Установит текст "Тестовый текст" и цвет BossBar на красный.
  • /setbossbar Важное_сообщение GREEN - Установит текст "Важное сообщение" и цвет BossBar на зеленый.

Объяснение кода:

  • BossBar bossBar;: Объявляет переменную bossBar типа BossBar, которая будет хранить наш BossBar.
  • onEnable():
    • Bukkit.createBossBar("Test", BarColor.BLUE, BarStyle.SOLID);: Создает новый BossBar с начальным текстом "Test", синим цветом и сплошным стилем (полоса).
    • bossBar.setVisible(true);: Делает BossBar видимым для всех игроков, которые к нему привязаны.
    • Цикл for (Player player : Bukkit.getOnlinePlayers()) { bossBar.addPlayer(player); }: Добавляет всех игроков, которые уже находятся на сервере, к этому BossBar.
  • onDisable():
    • bossBar.removeAll();: Удаляет всех игроков из BossBar, что делает его невидимым для них.
  • onCommand():
    • Обрабатывает команду /setbossbar.
    • Проверяет, является ли отправитель команды игроком.
    • Установка текста: Если args.length >= 1, то первый аргумент используется как текст. Метод replace("_", " ") позволяет вводить пробелы в текст через подчеркивания.
    • Установка цвета: Если args.length >= 2, то второй аргумент используется как цвет.
      • BarColor.valueOf(args[1].toUpperCase());: Преобразует строковое имя цвета (например, "RED") в соответствующий объект BarColor. toUpperCase() используется для обеспечения регистронезависимости.
      • try-catch (IllegalArgumentException e): Обрабатывает случай, если введенный цвет недействителен, и сообщает об этом игроку.
  • addPlayerToBossBar(Player player) и removePlayerFromBossBar(Player player):
    • Эти методы предоставляют удобный способ управлять тем, какие игроки видят BossBar. Вызов addPlayerToBossBar в PlayerJoinEvent гарантирует, что новые игроки увидят BossBar, а removePlayerFromBossBar в `PlayerQuitEvent