Как заставить функцию вызываться каждые 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 (Тики)

удачи,
Советы