Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Возможно ли изменить period BukkitRunnable после запуска?

0xLairon1

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
0xLairon1
Хочу чтобы новые значения обновления голограм подтягивались в рантайме с конфига.
До этого реализовал такую систему

PHP:
    @Override
    public void run() {
        try{
            while (true){
                Thread.sleep(settings.getHologramReloadCooldown());
                if(!plugin.isEnabled()){
                    this.cancel();
                    return;
                }
                Bukkit.getScheduler().runTask(plugin, () -> registry.reload());
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
Но при выключении сервера вылетает ошибка мол поток не завершается. Так что идея не очень.
Еще есть вариант отслеживать изменения в конфиге и перезапускать BukkitRunnable, но мне эта идея кажется костыльной.
Есть какие-то другие способы красиво сделать изменение period'a после запуска?
 
Изменить период нельзя, но можно при выполнении пропускать некоторое кол-во тиков. Для этого можешь создать таск с периодом в 1 тик, в внутри раннейбла объявить две переменные:
int periodTicks = 20; // Количество тиков между циклами
int delayTicks = periodTicks; // Количество тиков до отработки следующего цикла

Внутри run() проверяешь значение delayTicks, если > 0, то просто уменьшаешь значение и делаешь return. Если <= 0, то делаешь delayTicks = periodTicks; и выполняешь все необходимые действия .

Как только нужно изменить период, то меняешь значение переменной periodTicks.

UPD: Реализовал свою идею отдельным классом, можешь воспользоваться: https://rubukkit.org/threads/bukkitscheduler-tajmery-kuldauny-potoki.184419/#post-1718046
 
Последнее редактирование:

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

Назад
Верх