Помочь с написанием BossBar для BW 1058

GoshaMalinov

Пользователь
Сообщения
24
Решения
1
Приветствую! Объясните пожалуйста человеку который никогда не писал плагины, как подключить BossBar к плагину BedWars 1058.
Нужно чтоб было так:
Вам необходимо зарегистрироваться для просмотра изображений-вложений


Ссылки:
1.
2.
3.
 
Решение
[OFFTOPIC]Как я уже писал в одной из тем,
«Не шаришь в программировании - не лезь в код.»
(с) Мудрые слова
[/OFFTOPIC]

Ты просто запускаешь таймер, который каждую минуту создаёт боссбар, в названии которого изменяется лишь время до конца игры:

Java:
public class BWTimer extends BukkitRunnable {

    @Override
    public void run() { //Старт шедуляра
        BedWars bedwarsAPI = Bukkit.getServicesManager().getRegistration(BedWars.class).getProvider(); //Получение API бедварса

        //Здесь подразумевается мультиарена
        for(Player p : Bukkit.getOnlinePlayers()) { //Для каждого игрока
            IArena arena = bedwarsAPI.getArenaUtil().getArenaByPlayer(p); //Получаем арену, в которой сейчас находится игрок
            int gameend =...
[OFFTOPIC]Как я уже писал в одной из тем,
«Не шаришь в программировании - не лезь в код.»
(с) Мудрые слова
[/OFFTOPIC]

Ты просто запускаешь таймер, который каждую минуту создаёт боссбар, в названии которого изменяется лишь время до конца игры:

Java:
public class BWTimer extends BukkitRunnable {

    @Override
    public void run() { //Старт шедуляра
        BedWars bedwarsAPI = Bukkit.getServicesManager().getRegistration(BedWars.class).getProvider(); //Получение API бедварса

        //Здесь подразумевается мультиарена
        for(Player p : Bukkit.getOnlinePlayers()) { //Для каждого игрока
            IArena arena = bedwarsAPI.getArenaUtil().getArenaByPlayer(p); //Получаем арену, в которой сейчас находится игрок
            int gameend = arena.getPlayingTask().getGameEndCountdown() / 60; //Т.к. getGameEndCountdown() даёт время в секундах, делим на 60, чтобы получить в минутах.
          
            BossBar bossBar = BossBarAPI.addBar(p, // Игрок
                  new TextComponent("§fДо конца игры осталось §c" + gameend + " §fминут!"), // Сообщение
                  BossBarAPI.Color.BLUE, // Цвет бара
                  BossBarAPI.Style.NOTCHED_20, // Стиль бара
                  1.0f, // Прогресс (0.0 - 1.0), тут надо подумать, как получить сколько всего времени даётся на 1 игру.
                                                //Если у тебя это везде и всегда одинаково, то можно сделать так:
                                                //float progress = gameend / (<время для 1 игры в секундах, без этих стрелочек> / 60);
                  20*60, // Тайм-аут (через сколько исчезнет бар, в мс) 1 сек = 20 мс, значит ставим тут значение 20*60. Ну или считаем сколько это будет и ставим реальную цифру.
                  20*59); //Интервал для обновления, не думаю, что оно нужно, но пусть будет за 1 сек до удаления бара
        }
    }
}

P.s. Код написан от руки, поэтому в нём могут быть ошибки :с
 
Последнее редактирование:
Назад
Сверху Снизу