Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

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));
}
}

}
 
Используй шедулер, чтобы игроку отправлялся 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() планирует цикличное выполнение действия, с указанной задержкой
 
Используй шедулер, чтобы игроку отправлялся 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() планирует цикличное выполнение действия, с указанной задержкой

А кароче варианта нету?
 
А кароче варианта нету?

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

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

Назад
Верх