Помогите Как остановить поток?

Bezobrazie

Активный участник
Пользователь
Баллы
46
Имя в Minecraft
MySoulIsCry
Добрый день! я не могу разобраться как остановить поток. на данном этапе у меня есть такой код:
Код:
public class Timer extends BukkitRunnable {
    private Player player;
    int time = 100;
    private Location loc;
    public Timer(Player player, Location location) {
          this.player = player;
          this.loc = player.getLocation();
    }

    public void run() {
           if (time <= 0) {
               Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban " + player.getDisplayName() + " Отказ от проверки");
                Bukkit.getScheduler().cancelAllTasks();
                return;
           }
        player.teleport(loc);
        player.sendTitle("§d§lВас вызвали на проверку!", "У вас осталось §d§l" + time + " секунд");
        --time;
    }
}
сейчас поток останавливается Bukkit.getScheduler().cancelAllTasks(); но оно останавливает вообще все потоки создание плагином мне нужен только 1, также если можете подскажите как банить игрока. пробовал так Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban " + player.getDisplayName() + " Отказ от проверки"); но оно не работает.
 
Код:
    public void run() {
           if (time <= 0) {
               Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban " + player.getDisplayName() + " Отказ от проверки");
                cancel();
                return;
           }
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "/ban " + player.getDisplayName() + " Отказ от проверки");
 
Код:
    public void run() {
           if (time <= 0) {
               Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban " + player.getDisplayName() + " Отказ от проверки");
                cancel();
                return;
           }
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "/ban " + player.getDisplayName() + " Отказ от проверки");
Да спасибо это работает, а как мне выключить поток в другом классе, я хочу чтобы это можно было делать через команду.
 
Почему-то оно не работает. выдает ошибку что якобы поток еще не запланирован. Выдает в любом случае запущен поток или нет.
Код:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
     Player p = (Player)sender;
     Player cheater = Bukkit.getPlayer(args[0]);
     if (p.hasPermission("moder.check")) {
            if (args.length == 0) {
            p.sendMessage("§7[§d§lU§b§lM§7] Правильное использование - /check <НИК>");
            return false;
            }
            if(cheater == null) {
                    p.sendMessage("§7[§d§lU§b§lM§7] Игрок §b§l" + args[0] + "§7 не онлайн.");
                    return false;
                }
             Timer timer = new Timer(cheater, cheater.getLocation());
            if (args.length == 1) {
                p.sendMessage("§7[§d§lU§b§lM§7] Игрок §d§l" + cheater.getDisplayName() + " §7вызван на проверку.");
                cheater.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 3600, 250));
                cheater.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 3600, 250));
                String str = new String("god " +cheater.getDisplayName());
                Bukkit.dispatchCommand(Bukkit.getConsoleSender(), str);
                cheater.sendMessage("§7[§d§lU§b§lM§7] Вас вызвали на проверку! Не волнуйтесь, напишите в чат ваш §d§lID Discord§7. Если от вас не поступит ответ в течении 3х минут вы будете забанены §d§lНАВСЕГДА§7.");   
                timer.runTaskTimer(plugin, 0, 20);
                timer.time = 10;
               
                return false;
                }
            if (args.length == 2) {
                if(args[1].equalsIgnoreCase("stop")) {
                try {
                    timer.cancel();
                }catch(Exception e){
                    p.sendMessage("§7[§d§lU§b§lM§7] Игрок §d§l" + cheater.getDisplayName() + "§7 не был вызван на проверку.");
                    return false;
                }
                p.sendMessage("§7[§d§lU§b§lM§7] Вы отключили проверку для игрока §d§l" + args[0]);
                return false;
            }
                p.sendMessage("§7[§d§lU§b§lM§7] Выключить проверку игроку - §d§l/check [НИК] stop");
                }
     }
     p.sendMessage("§7[§d§lU§b§lM§7] Команды не существует или у вас нет прав");
            return false; }
}
 
Почему-то оно не работает. выдает ошибку что якобы поток еще не запланирован. Выдает в любом случае запущен поток или нет.
Код:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
     Player p = (Player)sender;
     Player cheater = Bukkit.getPlayer(args[0]);
     if (p.hasPermission("moder.check")) {
            if (args.length == 0) {
            p.sendMessage("§7[§d§lU§b§lM§7] Правильное использование - /check <НИК>");
            return false;
            }
            if(cheater == null) {
                    p.sendMessage("§7[§d§lU§b§lM§7] Игрок §b§l" + args[0] + "§7 не онлайн.");
                    return false;
                }
             Timer timer = new Timer(cheater, cheater.getLocation());
            if (args.length == 1) {
                p.sendMessage("§7[§d§lU§b§lM§7] Игрок §d§l" + cheater.getDisplayName() + " §7вызван на проверку.");
                cheater.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 3600, 250));
                cheater.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 3600, 250));
                String str = new String("god " +cheater.getDisplayName());
                Bukkit.dispatchCommand(Bukkit.getConsoleSender(), str);
                cheater.sendMessage("§7[§d§lU§b§lM§7] Вас вызвали на проверку! Не волнуйтесь, напишите в чат ваш §d§lID Discord§7. Если от вас не поступит ответ в течении 3х минут вы будете забанены §d§lНАВСЕГДА§7.");  
                timer.runTaskTimer(plugin, 0, 20);
                timer.time = 10;
              
                return false;
                }
            if (args.length == 2) {
                if(args[1].equalsIgnoreCase("stop")) {
                try {
                    timer.cancel();
                }catch(Exception e){
                    p.sendMessage("§7[§d§lU§b§lM§7] Игрок §d§l" + cheater.getDisplayName() + "§7 не был вызван на проверку.");
                    return false;
                }
                p.sendMessage("§7[§d§lU§b§lM§7] Вы отключили проверку для игрока §d§l" + args[0]);
                return false;
            }
                p.sendMessage("§7[§d§lU§b§lM§7] Выключить проверку игроку - §d§l/check [НИК] stop");
                }
     }
     p.sendMessage("§7[§d§lU§b§lM§7] Команды не существует или у вас нет прав");
            return false; }
}
Ну так ты сперва запусти его, а потом уже останавливать пытайся.
 
Ну так ты сперва запусти его, а потом уже останавливать пытайся.
дак я так и делаю в этом и проблема. я запускаю поток, пытаюсь его остановить но выдает ошибку, такуюже если поток запущен
 
а где, собственно, ошибка? Покажи её
 
Назад
Верх