Как заставить функцию вызываться каждые 2 тика
Я делаю плагин bukkit для своего друга, и я хочу узнать, как вызвать функцию каждые 2 тика (1/10 секунды).
1 ответов
Ну, это, вероятно, не то место, где вы хотите посмотреть. Вы должны использовать этой для любых ваших потребностей развития.
В любом случае, я могу ответить на твой вопрос. Вы хотите использовать встроенный планировщик. Вы можете получить к нему доступ с помощью
server.getScheduler();
в частности, вы захотите создать Runnable и заставить его вызывать ваш метод каждые 2 тика.
int id = server.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
public void run() {
myMethod();
}, 0, 2);
я объясню разницу с Sync и async, но это должно сделать то, что вы хотите. Первый аргумент-это просто ссылка на плагин (обычно this
или plugin
). Второй-это runnable, и вы, очевидно, должны заменить myMethod
С помощью метода, который вы хотите вызвать. Третий аргумент-это величина задержки (в ТИКах) до первого запуска метода. Я взяла 0, но также это может быть два в зависимости от того, что вы хотите сделать. Последний аргумент-это количество времени между прогонами, которое вы хотели бы иметь два.
Вы заметите, что метод возвращает целое число, которое можно использовать для отмены задачи следующим образом:
server.getScheduler().cancelTask(id);
важно обсудить разницу между асинхронностью и синхронизацией. Вы заметите, что метод, который мы вызвали в начале, говорит расписаниесинхронизацияRepeatingTask. Синхронизация означает, что Runnable, который мы указали в качестве второго аргумента, будет запущен в основном потоке сервера. Любой метод, который вызывает метод Bukkit/CraftBukkit/Minecraft, должен запускаться как синхронизация. Если вы запустите что-то, что, мол, изменяет блок, как Async вы можете полностью повредить сервер. Просто не делайте этого;) асинхронность, с другой стороны, создает отдельный поток для Runnable, используется для фоновых задач, таких как копирование и вставка файла или проверка времени. Еще раз,никогда запустите метод, который изменит мир как асинхронный.
наконец, в будущем, если вы только хотели запустить метод один раз, а затем не повторить его, вы можете просто использовать метод int id = scheduleSyncDelayedTask(plugin, Runnable, 2)
С первых двух аргументы одинаковы, а третий-задержка до запуска runnable (Тики)
удачи,
Советы