Напиши код для отображения постоянного BossBar всем игрокам с текстом например "Test", и возможность установить цвет BLUE, GREEN, PINK, PURPLE, REBECCA_PURPLE, RED, WHITE, YELLOW, для Spigot API Minecraft: Java Edition
Конечно, вот код для 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);
}
}
Как использовать этот код:
Создайте новый проект Spigot/Paper:
pom.xml или build.gradle.Создайте файл 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.
Скомпилируйте плагин:
mvn clean package или gradle build для создания .jar файла.Установите плагин на ваш сервер 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):
addPlayerToBossBar в PlayerJoinEvent гарантирует, что новые игроки увидят BossBar, а removePlayerFromBossBar в `PlayerQuitEvent