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

l_Slime_l

Активный участник
Пользователь
Баллы
76
Как отловить изменение дня в мире? То число, которое отображается в F3 - моде. Приложил скриншот, чтобы было понятнее 🙂
jRkkYF9.png
 
Эта штука на что-то влияет кроме локальной сложности (и то я не уверен, работает ли это на сервере)?
 
Эта штука на что-то влияет кроме локальной сложности (и то я не уверен, работает ли это на сервере)?
Ну мне просто нужно отловить, когда начинается новый день (т.е. время мира - 0 тиков вроде). Как сделать правильней будет?
 
Ну мне просто нужно отловить, когда начинается новый день (т.е. время мира - 0 тиков вроде). Как сделать правильней будет?
Брать world.getTime(), считать сколько ещё времени до нового дня, и запускать синхронный BukkitRunnable с задержкой до нового дня, который бы запускался раз в 1 день (это 24000 тиков кажется).
 
Брать world.getTime(), считать сколько ещё времени до нового дня, и запускать синхронный BukkitRunnable с задержкой до нового дня, который бы запускался раз в 1 день (это 24000 тиков кажется).
Вот так фигня будет или норм?)) Или лучше как ты сказал?
Код:
@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);
}
 
Вот так фигня будет или норм?)) Или лучше как ты сказал?
Код:
@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);
}
Можно просто тот же ранейбл запустить при старте сервера и каждый тик проверять не равно ли время нулю. Если равно, дергать кастомный евент или просто тупо код выполнять какой надо.
 
Можно просто тот же ранейбл запустить при старте сервера и каждый тик проверять не равно ли время нулю. Если равно, дергать кастомный евент или просто тупо код выполнять какой надо.
Мне кажется раннейбл может сбиться, отстать и т.п., если каждый тик чекать. Да и раннейбл, работающий каждый тик, как-то не очень.
 
Код:
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());
        }
    }
 
Код:
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());
        }
    }
Опять ты с новой вариацией TickEvent, так теперь он будет запускаться несколько раз каждый тик. 😆
 
Код:
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());
        }
    }
Так и знал что это будет здесь)
 
Назад
Верх