Туториал [VarScript 0.5] Регистрация таймеров с помощью javascript

DPOH-VAR

Старожил
Пользователь
Баллы
153
-----------------------------------------------------
Разработка плагина (описание, инструкции, модули и прочее)
Плагин на dev.bukkit.org (скачать можно отсюда)
-----------------------------------------------------
В этом туториале будут рассмотрены способы создания таймеров и интервалов с помощью javascript.

Синхронный и асинхронный режим

Javascript код может исполняться в синхронном и асинхронном потоке.
В случае синхронного исполнения - javascript исполняется в основном потоке сервера, в этом случае мы можем свободно использовать Bukkit API, не боясь вызвать ошибки. В этом случае сервер ждет, пока функция javascript исполнится до конца. Недостаток в том, что если javascript код слишком загружен и потребует много времени на исполнение - сервер зависнет на это время.
Если программа исполняется в асинхронном потоке - она не зависит от сервера. Код может исполняться сколько угодно долго - сервер bukkit просто продолжит свою работу, не обращая внимания на программу. Недостаток - нельзя в полной мере использовать Bukkit API, это может вызвать ошибку. Например, нельзя создавать новые ентити, менять их параметры, отправлять игрокам любые пакеты, изменять блоки и т.д. - большинство параметров доступны только для чтения.

Каждая отдельная функция исполняется синхронно или асинхронно.
Как определить, в каком потоке была запущена функция?
Функция запущена в основном потоке (синхронно), если:
- Она запущена игроком по команде
- Она запущена через консоль
- Была запущена в коммандблоке
- Запустилась в ответ на синхронное событие Bukkit
- Запустилась по расписанию игровых тиков (например REPEAT у планировщика)
- Она запустилась из другой синхронной функции
Функция работает в асинхронном потоке (параллельно), если:
- Она запущена по времени (ее запустил CRON или onTimer)
- Запустилась в ответ на асинхронное событие Bukkit (с приставкой Async)
- Она запустилась из другой асинхронной функции
- Произошло божественное вмешательство в работу плагина

Регистрация таймера по тикам

Если нам нужно запланировать действие через определенное количество тиков, мы можем использовать такой метод:
JavaScript:
trigger = program.onTicks(_function_ , _ticks_)
_function_ - функция, которая исполнится после задержки
_ticks_ - длительность задержки в серверных тиках.
Функция запустится в синхронном режиме.

Для регулярного исполнения функции через промежуток тиков используется такой метод:
JavaScript:
trigger = program.everyTicks(_function_ , _ticks_);
program.everyTicks(_function_ , _ticks_ , _delay_)
_function_ - функция
_ticks_ - интервал, указанный в тиках
_delay_ - задержка перед первым исполнением. По умолчанию = 0
Функция запустится в синхронном режиме.

Регистрация таймера по времени

Также задержку можно указывать в миллисекундах:
JavaScript:
trigger = program.onTimeout(_function_ , _time_);
_time_ - количество миллисекунд в задержке
_function_ - эта функция будет запущена асинхронно

Запланировать исполнение функции периодически:
JavaScript:
trigger = program.everyTimeout(_function_ , _time_);
_time_ - количество миллисекунд в периоде
_function_ - эта функция будет запущена асинхронно

Исполнение функции по завершении программы

Есть еще одно особое событие:
JavaScript:
trigger = program.onFinish(_function_);
_function_ - функция будет запущена при завершении программы или ее принудительной остановке. Заранее неизвестно, в каком режиме она будет исполнена (синхронный или асинхронный).

В любое время можно остановить таймер и отменить исполнение функции:
JavaScript:
trigger.unregiser()
 
Назад
Верх