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

Помогите Отловить изменение дня в мире.

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

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

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

    Баллы:
    76
    Как отловить изменение дня в мире? То число, которое отображается в F3 - моде. Приложил скриншот, чтобы было понятнее :)[​IMG]
     
  2. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Эта штука на что-то влияет кроме локальной сложности (и то я не уверен, работает ли это на сервере)?
     
  3. Автор темы
    l_Slime_l

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

    Баллы:
    76
    Ну мне просто нужно отловить, когда начинается новый день (т.е. время мира - 0 тиков вроде). Как сделать правильней будет?
     
  4. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Брать world.getTime(), считать сколько ещё времени до нового дня, и запускать синхронный BukkitRunnable с задержкой до нового дня, который бы запускался раз в 1 день (это 24000 тиков кажется).
     
  5. Автор темы
    l_Slime_l

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

    Баллы:
    76
    Вот так фигня будет или норм?)) Или лучше как ты сказал?
    Код:
    @Override
    public void onEnable() {
      everyDay(Bukkit.getWorld("someWorld"));
    }
    
    public void everyDay(World world) {
      final long time_ticks = world.getTime();
      final long ticks_to_next_day = 24000 - time_ticks;
      new BukkitRunnable() {
     
        @Override
        public void run() {
          // TODO
          everyDay(world);
        }
      }.runTaskLater(this, 0L, ticks_to_next_day);
    }
     
  6. _Nanit_

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

    Баллы:
    76
    Имя в Minecraft:
    _Nanit_
    Можно просто тот же ранейбл запустить при старте сервера и каждый тик проверять не равно ли время нулю. Если равно, дергать кастомный евент или просто тупо код выполнять какой надо.
     
  7. Автор темы
    l_Slime_l

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

    Баллы:
    76
    Мне кажется раннейбл может сбиться, отстать и т.п., если каждый тик чекать. Да и раннейбл, работающий каждый тик, как-то не очень.
     
  8. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    .runTaskLater(this, ticks_to_next_day, 24000);
    Только надо ловить ручную смену времени
     
  9. Автор темы
    l_Slime_l

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

    Баллы:
    76
    А не .runTaskTimer(this, ticks_to_next_day, 2400)?
     
  10. alexandrage

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

    Баллы:
    173
    Код:
    public class TScheduler extends BukkitRunnable {
    
        @Override
        public void run() {
            for (World world : Bukkit.getWorlds()) {
                Bukkit.getServer().getPluginManager().callEvent(new TimeChangeEvent(world));
            }
        }
    }

    Код:
    TScheduler sync = new TScheduler();
    sync.runTaskTimer(this, 1, 1);
    //TOST
    Код:
        @EventHandler
        public void onTick(TimeChangeEvent e) {
            if(e.getWorld().getName().equals("world")) {
                System.out.println(e.getWorld().getTime());
            }
        }
     
  11. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Опять ты с новой вариацией TickEvent, так теперь он будет запускаться несколько раз каждый тик. :lol:
     
  12. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    2400 - 2 минуты
     
  13. Автор темы
    l_Slime_l

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

    Баллы:
    76
    Очепятка))
     
  14. Автор темы
    l_Slime_l

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

    Баллы:
    76
    Так и знал что это будет здесь)
     
  15. alexandrage

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

    Баллы:
    173
    Не парься. Твой варик сломается при первом же /time set. Мой же в рантайме подстроится простым уравнением.
     
    Последнее редактирование: 18 июл 2018

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