Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Ну мне просто нужно отловить, когда начинается новый день (т.е. время мира - 0 тиков вроде). Как сделать правильней будет?Эта штука на что-то влияет кроме локальной сложности (и то я не уверен, работает ли это на сервере)?
Брать world.getTime(), считать сколько ещё времени до нового дня, и запускать синхронный BukkitRunnable с задержкой до нового дня, который бы запускался раз в 1 день (это 24000 тиков кажется).Ну мне просто нужно отловить, когда начинается новый день (т.е. время мира - 0 тиков вроде). Как сделать правильней будет?
Вот так фигня будет или норм?)) Или лучше как ты сказал?Брать 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); }
Мне кажется раннейбл может сбиться, отстать и т.п., если каждый тик чекать. Да и раннейбл, работающий каждый тик, как-то не очень.Можно просто тот же ранейбл запустить при старте сервера и каждый тик проверять не равно ли время нулю. Если равно, дергать кастомный евент или просто тупо код выполнять какой надо.
.runTaskLater(this, ticks_to_next_day, 24000);runTaskLater(this, 0L, ticks_to_next_day);
А не .runTaskTimer(this, ticks_to_next_day, 2400)?.runTaskLater(this, ticks_to_next_day, 24000);
Только надо ловить ручную смену времени
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);
@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()); } }
2400 - 2 минуты
Очепятка))2400 - 2 минуты
Так и знал что это будет здесь)Код: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()); } }
Не парься. Твой варик сломается при первом же /time set. Мой же в рантайме подстроится простым уравнением.Так и знал что это будет здесь)