1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем LalkaLalka, 24 июл 2019.

  1. Автор темы
    LalkaLalka

    LalkaLalka Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    LALKATOP
    У меня есть плагин, который при входе игрока запускает runTaskTimer(...), мне нужно сделать, чтобы при выходе игрока, он останавливался именно для этого игрока, как это сделать и можно ли вообще?
     
  2. Lemar98

    Lemar98 Активный участник Пользователь

    Баллы:
    76
    Записывай, например, в мапу ссылку на таск и при выходе доставай. В чем трабл?
    Или можно давать таскам id и так же их записывать. При выходе доставать их по id. Ничего сложного. Гугл в помощь, там всё есть. Я в своё время нашел там ответ именно на этот вопрос
     
    Последнее редактирование: 24 июл 2019
  3. Автор темы
    LalkaLalka

    LalkaLalka Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    LALKATOP
    Как дать ему id, чтобы оно было уникально для каждого игрока?
     
  4. Lemar98

    Lemar98 Активный участник Пользователь

    Баллы:
    76
     
  5. Автор темы
    LalkaLalka

    LalkaLalka Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    LALKATOP
    В гугле сложно найти именно эту штуку для моего случая, я прошу просто нормально мне ответить, а не перенаправить в гугл и я буду очень благодарен
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
    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 обработка таска.
            });
        }
    }
    
     
  7. Lemar98

    Lemar98 Активный участник Пользователь

    Баллы:
    76
    Если ты не научишься искать для себя информацию, ты ничему не научишься. Если тебе это надо, так иди и возьми это, разберись. Я, как человек сталкивающийся с таким же вопросом года 3 назад, могу с увереностью тебе сказать, что ответ конкретно для твоего случая есть в интернете. Пробуй перефразировать свой вопрос
     
  8. Автор темы
    LalkaLalka

    LalkaLalka Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    LALKATOP
    Можно ли сделать
    Да емае, я создал тему не для того чтобы слушать твои филосовские советы, я это все знаю просто у меня есть небольшая проблемма которую нужно быстро решить а не тратить на это кучу времени
     
  9. Lemar98

    Lemar98 Активный участник Пользователь

    Баллы:
    76
    Потратив на это кучу времени сейчас, ты не будешь тратить кучу времени и создавать глупые темы потом
     
  10. Автор темы
    LalkaLalka

    LalkaLalka Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    LALKATOP
    Мне как раз сейчас больше подходит потратить меньше времени, так как мне нужно заниматься сейчас другим и я хочу быстро решить проблемму, пожалуйста подскажи как дать id таску
     
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Я тебе дал решение получше с одним таском.
     
  12. Автор темы
    LalkaLalka

    LalkaLalka Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    LALKATOP
    Несовсем понял как вот это работает

    this.set.forEach(player -> {
    //TODO обработка таска.
    });
     
  13. Lemar98

    Lemar98 Активный участник Пользователь

    Баллы:
    76
    У ткбя вродь нет проверки есть ли игрок сете
     
  14. Lemar98

    Lemar98 Активный участник Пользователь

    Баллы:
    76
    Здесь ты пишешь всё то, что тебе нужно делать в таске
     
  15. Автор темы
    LalkaLalka

    LalkaLalka Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    LALKATOP
    Это то я понял, но что значит this.set.forEach(player -> { ?
     
  16. Автор темы
    LalkaLalka

    LalkaLalka Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    LALKATOP
    вот мой метод с таском, как его модернизировать?

    Код:
    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);
        }
     
  17. Lemar98

    Lemar98 Активный участник Пользователь

    Баллы:
    76
    Чего там модернизировать лол?
    Так же вызываешь этот метод там, только без проверки на онлайн
     
  18. Lemar98

    Lemar98 Активный участник Пользователь

    Баллы:
    76
    А это тебе в java learn
     
  19. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Как то так.
    Код:
    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);
                }
            });
        }
    }
     
    Последнее редактирование: 24 июл 2019
  20. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173

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