Помогите Не работает таймер

EvilBeaver

Новичок
Пользователь
Баллы
6
Имя в Minecraft
reker2050
PHP:
package SCP_autosave;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.configuration.file.FileConfiguration;

public final class SCP_autosave extends JavaPlugin implements Listener {
    protected FileConfiguration config;
    Logger log = getLogger();
    
    int time = 1*60*20;
    
    BukkitRunnable runnable = new BukkitRunnable() {
        @Override
         public void run() {
            getServer().broadcastMessage(ChatColor.RED+"Автосохранение...");
            Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "save-all");
            getServer().broadcastMessage(ChatColor.GREEN+"Завершено!");
         }
    };
    
    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
        log.info("Started");
        getServer().broadcastMessage("[SCP_autosave] Start");
        config = getConfig();
        runnable.runTaskTimer(this, 0, time);
        runnable.cancel();
    }
    
    @Override
    public void onDisable() {
        getServer().getPluginManager().registerEvents(this, this);
        saveConfig();
    }
    
    public boolean onCommand(CommandSender s, Command cmd, String label, String args[]) {
        if(cmd.getName().equalsIgnoreCase("autosave_start")) {
            s.sendMessage(ChatColor.GREEN+"[SCP_autosave] Автосохранение запущено");
            runnable.run();
            return true;
        }else if(cmd.getName().equalsIgnoreCase("autosave_stop")) {
            runnable.cancel();
            s.sendMessage(ChatColor.GREEN+"[SCP_autosave] Автосохранение остановлено");
            return true;
        }/*else if(cmd.getName().equalsIgnoreCase("autosave_time")) {
            if (args.length == 1) {
                getServer().broadcastMessage(ChatColor.GREEN+"[SCP_autosave] Интервал автосохранения задан ("+args[0]+")!");
                time = 20*Integer.parseInt(args[0]);
                config.set("autosave_time", args[0]);
                return true;
            }else {
                s.sendMessage(ChatColor.RED+"[SCP_autosave] Невероное количество аргументов для команды!");
                return true;
            }
        }*/
        return false;
    }
}

При команде /autosave_start один раз выполняется сохранение карты, и всё.
При попытке запустить таймер еще раз - снова сохранение (хотя обычно ругается на повторный запуск одного и того же таймера).
Что делать?
Заранее спасибо!
 
Велик на встроенный автосейв ведра?
f733b65fe9.jpg
 
Велик на встроенный автосейв ведра?
f733b65fe9.jpg
Встроенный нельзя включать и выключать одной командой, увы.
Я знаю о существовании встроенной функции, но считаю, что моя (когда она еще работала) несколько надёжнее.
Бро, а на счет кода ничего не можешь сказать?
 
Встроенный нельзя включать и выключать одной командой, увы.
Я знаю о существовании встроенной функции, но считаю, что моя (когда она еще работала) несколько надёжнее.
Бро, а на счет кода ничего не можешь сказать?
А зачем выключать то? Чтоб просрать карту при краше?
 
Ты просто запускаешь runnable(runnable.run()), а надо как таймер: runnable.runTaskTimer();
Так я его запускаю именно так, потом приостанавливаю. При необходимости (по команде) запускаю и приостанавливаю таймер.

Ты в код плохо смотрел
 
Назад
Верх