- Баллы
- 68
Предположим, делаем такой плагин:
Стив пошёл в отпуск. Идёт по полю/лесу. На ходу автоматически рвёт цветочки, пинает грибы...
Уход в отпуск игрок оформляет командой: /отпуск on
Возврат из отпуска соответственно: /отпуск off
Также возможен отзыв игрока из отпуска при логоуте и таймауте.
При уходе в отпуск очередного игрока пополняется массив-список "отпускников".
При возврате из отпуска игрок из списка вычёркивается.
Чтобы оформить пинание грибов и срыв цветов регистрируем обработчик события onMove.
И вот тут возникает вопрос.
Обработчик будет вызываться при каждом движении каждого игрока, что, подозреваю, будет притормаживать сервер. Тем более, как минимум, в начале обработчика будет проверяться список "отпускников", нужно ли для этого игрока проверять наличие цветов/грибов в шаговой доступности.
Так вот сам вопрос: имеется ли возможность отключать и снова включать обработчик?
Обработчик регистрируется при загрузке сервера. Потом вроде имеется возможность сделать setCancelled для него, чтобы сервер больше не вызывал его. Но я не нашёл возможности снова его включить. А так бы включать его только если игрок пошёл в отпуск и отключать, когда ни одного игрока нет в списке "отпускников".
Возможно я не так понимаю физику процесса, но думаю, свою мысль донёс доступно.
Или не стоит этим заморачиваться и не такая уж и нагрузка это?
И попутно, чтобы не плодить темы. Есть ли какой-то штатный класс в буккитAPI, который инициализирует клик ПКМ? Т.е. полностью: клик ПКМ по указанному блоку с указанной стороны, проверка, что находится в руке, выполнение соответствующего действия (установка факела, блока, переключение переключателя и пр.) и при необходимости производились бы действия с инвентарём в руке (уменьшение количества или подобное).
Вариант с block.setType() не нравится, так как не учитывается [не]возможность установки данного блока в конкретном месте. В итоге возможна установка блока в воздухе. Или надо самостоятельно анализировать окружающую среду. :-(
Смотрел в сторону setUseItemInHand & useItemInHand, как и setUseInteractedBlock, но не уловил, можно ли воспользоваться ими. Если, да, то хотелось бы пример.
Стив пошёл в отпуск. Идёт по полю/лесу. На ходу автоматически рвёт цветочки, пинает грибы...
Уход в отпуск игрок оформляет командой: /отпуск on
Возврат из отпуска соответственно: /отпуск off
Также возможен отзыв игрока из отпуска при логоуте и таймауте.
При уходе в отпуск очередного игрока пополняется массив-список "отпускников".
При возврате из отпуска игрок из списка вычёркивается.
Чтобы оформить пинание грибов и срыв цветов регистрируем обработчик события onMove.
И вот тут возникает вопрос.
Обработчик будет вызываться при каждом движении каждого игрока, что, подозреваю, будет притормаживать сервер. Тем более, как минимум, в начале обработчика будет проверяться список "отпускников", нужно ли для этого игрока проверять наличие цветов/грибов в шаговой доступности.
Так вот сам вопрос: имеется ли возможность отключать и снова включать обработчик?
Обработчик регистрируется при загрузке сервера. Потом вроде имеется возможность сделать setCancelled для него, чтобы сервер больше не вызывал его. Но я не нашёл возможности снова его включить. А так бы включать его только если игрок пошёл в отпуск и отключать, когда ни одного игрока нет в списке "отпускников".
Возможно я не так понимаю физику процесса, но думаю, свою мысль донёс доступно.

Или не стоит этим заморачиваться и не такая уж и нагрузка это?
И попутно, чтобы не плодить темы. Есть ли какой-то штатный класс в буккитAPI, который инициализирует клик ПКМ? Т.е. полностью: клик ПКМ по указанному блоку с указанной стороны, проверка, что находится в руке, выполнение соответствующего действия (установка факела, блока, переключение переключателя и пр.) и при необходимости производились бы действия с инвентарём в руке (уменьшение количества или подобное).
Вариант с block.setType() не нравится, так как не учитывается [не]возможность установки данного блока в конкретном месте. В итоге возможна установка блока в воздухе. Или надо самостоятельно анализировать окружающую среду. :-(
Смотрел в сторону setUseItemInHand & useItemInHand, как и setUseInteractedBlock, но не уловил, можно ли воспользоваться ими. Если, да, то хотелось бы пример.
Различие в метаданных?
У блока нет такого метода. Только у итемов.