Помогите Как остановить определенный Task в BukkitScheduler?

LalkaLalka

Новичок
Пользователь
Баллы
11
Имя в Minecraft
LALKATOP
У меня есть плагин, который при входе игрока запускает runTaskTimer(...), мне нужно сделать, чтобы при выходе игрока, он останавливался именно для этого игрока, как это сделать и можно ли вообще?
 
Записывай, например, в мапу ссылку на таск и при выходе доставай. В чем трабл?
Или можно давать таскам id и так же их записывать. При выходе доставать их по id. Ничего сложного. Гугл в помощь, там всё есть. Я в своё время нашел там ответ именно на этот вопрос
 
Последнее редактирование:
Записывай, например, в мапу ссылку на таск и при выходе доставай. В чем трабл?
Или можно давать таскам id и так же их записывать. При выходе доставать их по id. Ничего сложного. Нугл в помощь, там всё есть. Я в своё время нашел там ответ именно на этот вопрос
Как дать ему id, чтобы оно было уникально для каждого игрока?
 
В гугле сложно найти именно эту штуку для моего случая, я прошу просто нормально мне ответить, а не перенаправить в гугл и я буду очень благодарен
 
Код:
public class PlayerTask extends BukkitRunnable {
    private Set<Player> set = new HashSet<Player>();
    public PlayerTask(Plugin plugin, int period) {
        this.runTaskTimer(plugin, period, period);
    }
    public boolean add(Player player) {
        return this.set.add(player);
    }
    public boolean remove(Player player) {
        return this.set.remove(player);
    }
    @Override
    public void run() {
        this.set.forEach(player -> {
            //TODO обработка таска.
        });
    }
}
 
В гугле сложно найти именно эту штуку для моего случая, я прошу просто нормально мне ответить, а не перенаправить в гугл и я буду очень благодарен
Если ты не научишься искать для себя информацию, ты ничему не научишься. Если тебе это надо, так иди и возьми это, разберись. Я, как человек сталкивающийся с таким же вопросом года 3 назад, могу с увереностью тебе сказать, что ответ конкретно для твоего случая есть в интернете. Пробуй перефразировать свой вопрос
 
Можно ли сделать
Если ты не научишься искать для себя информацию, ты ничему не научишься. Если тебе это надо, так иди и возьми это, разберись. Я, как человек сталкивающийся с таким же вопросом года 3 назад, могу с увереностью тебе сказать, что ответ конкретно для твоего случая есть в интернете. Пробуй перефразировать свой вопрос
Да емае, я создал тему не для того чтобы слушать твои филосовские советы, я это все знаю просто у меня есть небольшая проблемма которую нужно быстро решить а не тратить на это кучу времени
 
Можно ли сделать

Да емае, я создал тему не для того чтобы слушать твои филосовские советы, я это все знаю просто у меня есть небольшая проблемма которую нужно быстро решить а не тратить на это кучу времени
Потратив на это кучу времени сейчас, ты не будешь тратить кучу времени и создавать глупые темы потом
 
Потратив на это кучу времени сейчас, ты не будешь тратить кучу времени и создавать глупые темы потом
Мне как раз сейчас больше подходит потратить меньше времени, так как мне нужно заниматься сейчас другим и я хочу быстро решить проблемму, пожалуйста подскажи как дать id таску
 
Мне как раз сейчас больше подходит потратить меньше времени, так как мне нужно заниматься сейчас другим и я хочу быстро решить проблемму, пожалуйста подскажи как дать id таску
Я тебе дал решение получше с одним таском.
 
вот мой метод с таском, как его модернизировать?

Код:
private void giveIncome(Player p) {
        String pname = p.getName();
        int ticks = plugin.getConfig().getInt("income");
        Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
            
            @Override
                public void run() {
                
                double inc = getIncome(pname);
                
                if(p.isOnline()) {
                    Commands.giveMoney(pname, inc);
                } else return;
            }
        },ticks ,ticks);
    }
 
вот мой метод с таском, как его модернизировать?

Код:
private void giveIncome(Player p) {
        String pname = p.getName();
        int ticks = plugin.getConfig().getInt("income");
        Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
           
            @Override
                public void run() {
               
                double inc = getIncome(pname);
               
                if(p.isOnline()) {
                    Commands.giveMoney(pname, inc);
                } else return;
            }
        },ticks ,ticks);
    }
Чего там модернизировать лол?
Так же вызываешь этот метод там, только без проверки на онлайн
 
Как то так.
Код:
public class PlayerTask extends BukkitRunnable {

    private Map<Player, Integer> map = new HashMap<Player, Integer>();
    private int coinPeriod;
    private Plugin plugin;

    public PlayerTask(Plugin plugin) {
        this.plugin = plugin;
        this.coinPeriod = this.plugin.getConfig().getInt("income");
        this.runTaskTimer(this.plugin, 1, 1);
    }

    public void add(Player player) {
        this.map.put(player, 0);
    }

    public void remove(Player player) {
        this.map.remove(player);
    }

    @Override
    public void run() {
        this.map.forEach((player, period) -> {
            if(period<this.coinPeriod) {
                this.map.put(player, period++);
            } else {
                this.map.put(player, 0);
                //TODO Commands.giveMoney(player.getName(), inc);
            }
        });
    }
}
 
Последнее редактирование:
Назад
Верх