1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Мне нужно чтобы ACTION BAR высвечивался постоянно.

Тема в разделе "Разработка плагинов для новичков", создана пользователем kevin7496, 5 июн 2024.

  1. Автор темы
    kevin7496

    kevin7496 Ньюби Пользователь

    Баллы:
    1
    Я не понимаю к чему обращатся к какому ивенту я обращаюсь к PlayerEvent но не работает

    Мой код

    package me.kevin.serverminigamekiller.minigame;

    import net.md_5.bungee.api.ChatMessageType;
    import net.md_5.bungee.api.chat.TextComponent;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerEvent;
    import org.bukkit.event.player.PlayerJoinEvent;

    public class waintPlayer implements Listener {

    int Player_list = 0;
    int PlayerMax = 10;
    boolean WhileOfAndOn = true;

    @EventHandler
    public void joinPlayer(PlayerJoinEvent e) {
    Player p = e.getPlayer();
    Player_list = p.getServer().getOnlinePlayers().size();
    p.sendMessage(String.valueOf(Player_list));
    p.teleport(new Location(Bukkit.getWorld("world"), -224, 73, 249));
    p.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.AQUA + "ОЖИДАНИЕ ИГРОКОВ " + Player_list + "/" + PlayerMax));

    }
    @EventHandler
    public void waintPlayerAndStart(PlayerEvent e) {
    Player p = e.getPlayer();
    while (WhileOfAndOn) {
    p.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.AQUA + "ОЖИДАНИЕ ИГРОКОВ " + Player_list + "/" + PlayerMax));
    }
    }

    }
     
  2. therimuru_

    therimuru_ Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    Используй шедулер, чтобы игроку отправлялся ActionBar, например, каждую секунду.

    Код:
           
    Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> {
        /p.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.AQUA + "ОЖИДАНИЕ ИГРОКОВ " + Player_list + "/" + PlayerMax));
    }, 0, 20);
    
    Где 20 - значит что каждые 20 тиков (1 секунда) будет происходить описанные действия
    Также создай переменную, где будет лежать ID задачи, и метод, который будет останавливать задачу.
    Далее проверяй, нужно ли закончить действие шедулера, и по надобности, вызывай stopScheduler()
    Код:
    public void arenaStart() {
        int actionBarTaskId;
       
        actionBarTaskId = Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> {
            // тут отправляй ActionBar игроку
            if (gameStarted) {
                stopScheduler(actionBarTaskId);
            }
        }, 0, 20).getTaskId();
    }
    
    public static void stopScheduler(actionBarTaskId) {
        Bukkit.getScheduler().cancelTask(actionBarTaskId);
    }
    
    UPD: runTaskTimerAsynchronously() планирует цикличное выполнение действия, с указанной задержкой
     
  3. Автор темы
    kevin7496

    kevin7496 Ньюби Пользователь

    Баллы:
    1
    А кароче варианта нету?
     
  4. therimuru_

    therimuru_ Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    Нет, или я просто не знаю его.
    Когда делаешь плагин на мини-игру, не думаю что стоит задумываться о краткости когда, в данной ситуации.
     
  5. Автор темы
    kevin7496

    kevin7496 Ньюби Пользователь

    Баллы:
    1
    я тогда не понимаю куда вставлять код который та прислал
     
  6. therimuru_

    therimuru_ Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    Нужно чтобы этот код выполнялся, когда первый игрок заходит в лобби, либо, когда создаётся лобби (второе ещё лучше).
    И циклом всем игрокам отправляешь ActionBar.
     

Поделиться этой страницей