Помогите Не останавливается Шедулер

l_Slime_l

Активный участник
Пользователь
Баллы
76
Шедулер не хочет останавливаться ☹️ Уже всё перегуглил, все равно не работает. Ошибку выдает.
HTML:
public class MsgCommand implements CommandExecutor {
    public BukkitTask taskID;
    private JavaPlugin plugin;

    public MsgCommand(JavaPlugin plugin) {
        this.plugin = plugin;
    }
    public boolean onCommand(CommandSender sender, Command cmd, String lbl, String[] args) {
        if(cmd.getName().equalsIgnoreCase("msgsch")) {
            if(args.length == 0) {
                return true;
            }
            Player p = Bukkit.getPlayerExact(args[0]);

            taskID = Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
                @Override
                public void run() {
                    p.sendMessage("hi!");
                    return;
                }

            },0l, 20l);
        }
        if(cmd.getName().equalsIgnoreCase("cancelmsgsch")) {
            Bukkit.getScheduler().cancelTask(taskID.getTaskId()); // остановка шедулера
        }
        return true;
    }
}
 
Последнее редактирование:
PHP:
BukkitRunnable runnable = new BukkitRunnable() {
    @Override
    public void run() {
        p.sendMessage("hi!");
    }
};
//запуск
runnable.runTaskTimer(plugin, 0, 20);
//остановка
runnable.cancel();
 
PHP:
BukkitRunnable runnable = new BukkitRunnable() {
    @Override
    public void run() {
        p.sendMessage("hi!");
    }
};
//запуск
runnable.runTaskTimer(plugin, 0, 20);
//остановка
runnable.cancel();
Куда пихать это?
PHP:
BukkitRunnable runnable = new BukkitRunnable() {
    @Override
    public void run() {
        p.sendMessage("hi!");
    }
};
 
PHP:
BukkitRunnable runnable = new BukkitRunnable() {
    @Override
    public void run() {
        p.sendMessage("hi!");
    }
};
//запуск
runnable.runTaskTimer(plugin, 0, 20);
//остановка
runnable.cancel();
Вообще перестало работать.
PHP:
public BukkitRunnable runnable;
    private JavaPlugin plugin;
    private int a;

    public MsgCommand(JavaPlugin plugin) {
        this.plugin = plugin;
    }
    public boolean onCommand(CommandSender sender, Command cmd, String lbl, String[] args) {
        if(cmd.getName().equalsIgnoreCase("msgsch")) {
            if(args.length == 0) {
                return true;
            }
            Player p = Bukkit.getPlayerExact(args[0]);

            runnable = new BukkitRunnable() {
                @Override
                public void run() {
                    p.sendMessage("hi!");
                }
            };
            runnable.runTaskTimer(plugin, 0l, 20l);
        }
        if(cmd.getName().equalsIgnoreCase("cancelmsgsch")) {
            runnable.cancel();
        }
        return true;
    }
 
Ну так ты как бы BukkitRunnable перед runnable потерял
 
Код:
private Map<CommandSender, Scheduler> tasks = new HashMap<CommandSender, Scheduler>();

Код:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (args.length == 0) {
            return false;
        }
        if (args[0].equalsIgnoreCase("run") && !tasks.containsKey(sender)) {
            Scheduler task = new Scheduler(sender);
            tasks.put(sender, task);
            task.runTaskTimer(this.plugin, 0, 20);
            return true;
        }

        if (args[0].equalsIgnoreCase("stop")) {
            tasks.get(sender).cancel();
            tasks.remove(sender);
            return true;
        }
        return false;
    }
Код:
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;

public class Scheduler extends BukkitRunnable {
    private CommandSender sender;

    public Scheduler(CommandSender sender) {
        this.sender = sender;
    }

    @Override
    public void run() {
        this.sender.sendMessage("run");
    }
}
 
Код:
private Map<CommandSender, Scheduler> tasks = new HashMap<CommandSender, Scheduler>();

Код:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (args.length == 0) {
            return false;
        }
        if (args[0].equalsIgnoreCase("run") && !tasks.containsKey(sender)) {
            Scheduler task = new Scheduler(sender);
            tasks.put(sender, task);
            task.runTaskTimer(this.plugin, 0, 20);
            return true;
        }

        if (args[0].equalsIgnoreCase("stop")) {
            tasks.get(sender).cancel();
            tasks.remove(sender);
            return true;
        }
        return false;
    }
Код:
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;

public class Scheduler extends BukkitRunnable {
    private CommandSender sender;

    public Scheduler(CommandSender sender) {
        this.sender = sender;
    }

    @Override
    public void run() {
        this.sender.sendMessage("run");
    }
}
Выдает Caused by: java.lang.NullPointerException на этой строке: tasks.get(sender).cancel();
 
Шедулер не хочет останавливаться ☹️ Уже всё перегуглил, все равно не работает. Ошибку выдает.
HTML:
public class MsgCommand implements CommandExecutor {
    public BukkitTask taskID;
    private JavaPlugin plugin;

    public MsgCommand(JavaPlugin plugin) {
        this.plugin = plugin;
    }
    public boolean onCommand(CommandSender sender, Command cmd, String lbl, String[] args) {
        if(cmd.getName().equalsIgnoreCase("msgsch")) {
            if(args.length == 0) {
                return true;
            }
            Player p = Bukkit.getPlayerExact(args[0]);

            taskID = Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
                @Override
                public void run() {
                    p.sendMessage("hi!");
                    return;
                }

            },0l, 20l);
        }
        if(cmd.getName().equalsIgnoreCase("cancelmsgsch")) {
            Bukkit.getScheduler().cancelTask(taskID.getTaskId()); // остановка шедулера
        }
        return true;
    }
}
У меня работает этот код(версия 1.8.8)


Код:
public static int shedulerID = -1;

shedulerID = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), new Runnable() {

public void run() {
}

}, 20, 3L);


Отмена:
Bukkit.getScheduler().cancelTask(shedulerID);
 
А в чем моя ошибка? Можешь подсказать как исправить пожалуйста?
Руки выпрямить. На готовом и то не можешь. А твое говно и не остановится, если запустить более 1го шедулера подряд, остановится только последний.
 
Последнее редактирование:
У меня работает этот код(версия 1.8.8)


Код:
public static int shedulerID = -1;

shedulerID = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), new Runnable() {

public void run() {
}

}, 20, 3L);


Отмена:
Bukkit.getScheduler().cancelTask(shedulerID);
Фу.


Java:
Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), () -> {
//TODO
}, 20, 3L);
 
Назад
Верх