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

Помогите Как создать цикл?

kevin7496

Ньюби
Пользователь
Баллы
1
Как создать цикл мне нужно чтобы сообщение высвечивалось постоянно
Нужно для режима

Вот мой код

Код:
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.PlayerJoinEvent;

public class waintPlayer implements Listener {

    int Player_list = 0;
    int PlayerMax = 10;

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

    public void waitPlayerStart(Player.Spigot e) {
        Player.Spigot p = (Player.Spigot) e;
        while (true) {
            p.sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.AQUA + "ОЖИДАНИЕ ИГРОКОВ " + Player_list + "/" + PlayerMax));
        }
    }

}
 
Как создать цикл мне нужно чтобы сообщение высвечивалось постоянно
Нужно для режима

Вот мой код

Код:
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.PlayerJoinEvent;

public class waintPlayer implements Listener {

    int Player_list = 0;
    int PlayerMax = 10;

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

    public void waitPlayerStart(Player.Spigot e) {
        Player.Spigot p = (Player.Spigot) e;
        while (true) {
            p.sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.AQUA + "ОЖИДАНИЕ ИГРОКОВ " + Player_list + "/" + PlayerMax));
        }
    }

}
Нужно, чтобы сообщение отправлялось каждые, например 15 секунд?
 
Код:
   actionBarTaskId = Bukkit.getScheduler().runTaskTimerAsynchronously(instance, () -> {
       // действия в "цикле"
   }, 0, время).getTaskId();

instance - сюда передать главный класс
время - время, через которое будет повторяться цикл

чтобы завершить "цикл"
Код:
 Bukkit.getScheduler().cancelTask(actionBarTaskId);

в переменной actionBarTaskId лежит ID "цикла"

UPD: Время указывается в тиках, в 1 секунде 20 тиков
 
Код:
   actionBarTaskId = Bukkit.getScheduler().runTaskTimerAsynchronously(instance, () -> {
       // действия в "цикле"
   }, 0, время).getTaskId();

instance - сюда передать главный класс
время - время, через которое будет повторяться цикл

чтобы завершить "цикл"
Код:
 Bukkit.getScheduler().cancelTask(actionBarTaskId);

в переменной actionBarTaskId лежит ID "цикла"

UPD: Время указывается в тиках, в 1 секунде 20 тиков
Показываю, как можно отменять задачу без создания дополнительных переменных:
PHP:
new BukkitRunnable() {
    @Override
    public void run() {
        // do something
        this.cancel(); // отменяет задачу
    }
}.runTaskTimerAsynchronously(plugin, 20L, 20L);

Если нужно отменить снаружи, то рекомендовал бы это делать не по ID таска, а по его объекту:
PHP:
BukkitTask bukkitTask = plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, () -> {
    // do something
}, 20L, 20L);

bukkitTask.cancel(); // отменяет задачу
 
Последнее редактирование:
Код:
   actionBarTaskId = Bukkit.getScheduler().runTaskTimerAsynchronously(instance, () -> {
       // действия в "цикле"
   }, 0, время).getTaskId();

instance - сюда передать главный класс
время - время, через которое будет повторяться цикл

чтобы завершить "цикл"
Код:
 Bukkit.getScheduler().cancelTask(actionBarTaskId);

в переменной actionBarTaskId лежит ID "цикла"

UPD: Время указывается в тиках, в 1 секунде 20 тиков

Я не понял а что писать в инстансе?
 
Я не понял а что писать в инстансе?
Главный класс. (который extends 'JavaPlugin').
Рекомендую более подробно ознакомиться с языком.
Кстати, код Dymeth будет чуть-чуть получше, чем тот, который писал я.
 
Показываю, как можно отменять задачу без создания дополнительных переменных:
PHP:
new BukkitRunnable() {
    @Override
    public void run() {
        // do something
        this.cancel(); // отменяет задачу
    }
}.runTaskTimerAsynchronously(plugin, 20L, 20L);

Если нужно отменить снаружи, то рекомендовал бы это делать не по ID таска, а по его объекту:
PHP:
BukkitTask bukkitTask = plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, () -> {
    // do something
}, 20L, 20L);

bukkitTask.cancel(); // отменяет задачу

А что мне писать в plugin нет такой команды
 

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

Назад
Верх