Когда что-то происходит внутри Bukkit, событие называется так, что каждый плагин может решить, что делать, когда что-то происходит.

Событие вызывается, когда игрок пытается сыграть блок, когда сущность despawn, когда кто-то входит в систему . Плагины могут прослушивать определенные события и обрабатывать их разными способами, например, отправлять сообщение администратору, когда игрок входит в систему через PlayerLoginEvent.

Синтаксис

  • Bukkit.getPluginManager (). RegisterEvents (Listener l, Plugin p);

замечания

При регистрации события обратите внимание, если вы не регистрируете его дважды! Или ваш плагин будет действовать дважды для зарегистрированного события.

Посмотрите, как обрабатывать определенные события:

Регистрировать события внутри класса Listener

Регистрация событий в вашем основном классе

Прослушивание событий

Bukkit использует систему, основанную на событиях, которая позволяет разработчикам плагинов взаимодействовать и изменять сервер и конкретные действия, которые происходят в мире.

Как использовать spawnEvent в команде /summon? | Туториал по командам Майнкрафт ПЕ | Bedrock Edition

Создание обработчика событий

Примечание. Формат имен для событий Bukkit — это событие ()Event . Некоторые примеры этих имен событий: PlayerInteractEvent или BlockBreakEvent или PlayerJoinEvent . Список всех событий можно найти на Spitot Javadocs

Регистрация событий

Простое создание обработчика событий недостаточно, чтобы Bukkit мог начать отправлять вызовы событий вашему методу. Вы также должны зарегистрировать его через интерфейс PluginManager.

Самый распространенный способ регистрации событий — создать класс, который реализует интерфейс Listener и использовать его для переноса обработчиков событий.

Этот класс слушателя и все его события затем могут быть зарегистрированы в вашем основном классе плагина следующим образом:

Создание пользовательских событий

Иногда вам нужно создать свое собственное Событие, которое другие плагины могут прослушать (Vault, среди других плагинов, делает это) и даже отменить. API событий Bukkit позволяет это сделать возможным. Все, что вам нужно сделать, это создать новый класс, расширить его Event , добавить обработчики и атрибуты, необходимые вашему событию (например, Player или message).

import org.bukkit.event.Event; import org.bukkit.event.HandlerList; public final class CustomEvent extends Event < private static final HandlerList handlers = new HandlerList(); private String message; public CustomEvent(String example) < message = example; >public String getMessage() < return message; >public HandlerList getHandlers() < return handlers; >public static HandlerList getHandlerList() < return handlers; >>

Вызов пользовательского события

Вы контролируете создание и вызывать свои события, где вы называете это полностью зависит от вас. Вот пример

// Create the event here CustomEvent event = new CustomEvent(«Sample Message»); // Call the event Bukkit.getServer().getPluginManager().callEvent(event); Bukkit.getServer().broadcastMessage(event.getMessage());

Помните: вы контролируете свои события. Если вы не назовете это и не подействуйте на него, этого не произойдет!

Обзор новых команд /event /clearspawnpoint | Новые возможности аддонов | Обновления Bedrock Edition

Прослушивание пользовательского события

Прослушивание пользовательского события совпадает с прослушиванием обычного события.

Внедрение CustomEvent Cancellable

Если вы хотите, чтобы ваше событие было boolean cancelled , просто добавьте implements Cancellable , boolean cancelled и getter и setter:

import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.bukkit.event.Cancellable; public final class CustomEvent extends Event implements Cancellable < private static final HandlerList handlers = new HandlerList(); private String message; private boolean cancelled; public CustomEvent(String example) < message = example; >public String getMessage() < return message; >public boolean isCancelled() < return cancelled; >public void setCancelled(boolean cancel) < cancelled = cancel; >public HandlerList getHandlers() < return handlers; >public static HandlerList getHandlerList() < return handlers; >>

Читайте также:  Как узнать все плагины на сервере minecraft

После этого вы можете проверить, отменял ли плагин пользовательское событие.

// Create the event here CustomEvent event = new CustomEvent(«Sample Message»); // Call the event Bukkit.getServer().getPluginManager().callEvent(event); // Check if the event is not cancelled if (!event.isCancelled())

Основная обработка событий

Bukkit использует систему, основанную на событиях, которая позволяет разработчикам плагинов взаимодействовать и изменять сервер и конкретные действия, которые происходят в мире.

Создание обработчика событий

Примечание. Формат имен для событий Bukkit — это событие ()Event . Некоторые примеры этих имен событий: PlayerInteractEvent или BlockBreakEvent или PlayerJoinEvent . Список всех событий можно найти на Spitot Javadocs

Регистрация событий

Простое создание обработчика событий недостаточно, чтобы Bukkit мог начать отправлять вызовы событий вашему методу. Вы также должны зарегистрировать его через интерфейс PluginManager.

Самый распространенный способ регистрации событий — создать класс, который реализует интерфейс Listener и использовать его для переноса обработчиков событий.

Этот класс слушателя и все его события затем могут быть зарегистрированы в вашем основном классе плагина следующим образом:

Приоритеты событий

У Bukkit есть система под названием « Приоритеты событий», чтобы помочь плагинам обрабатывать события в правильном возрасте. Семь приоритетов (в возрасте от первого до последнего):

  • низший
  • Низкий
  • Обычный (по умолчанию)
  • Высоко
  • Наибольший
  • монитор

Если вы планируете отменить много событий (например, плагин защиты), было бы неплохо использовать более низкий приоритет (или самый низкий), чтобы избежать проблем.

Вы никогда не должны изменять результат события в MONITOR.

  • EventPriority на часах javadocs
  • Приоритеты событий в BukkitWiki

Источник: learntutorials.net

Команды консоли/event

Указывает цель (цели) для выполнения события. Если не указано, по умолчанию используется исполнитель, запустивший команду.

eventName: string : basic_string

Определяет внутриигровое событие для объекта. Должен быть заполнен событием спауна (имя события для сущностей в пакете поведения).

Не выполняется, если неверно указаны аргументы. Не выполняется, если аргументу victim: target не удаётся определить одну или несколько сущностей в многопользовательской игре (указанные игроки должны быть в сети). В случае успеха запускает событие для сущности.

История

Официальный выпуск Bedrock Edition1.16.100beta 1.16.100.57

Команда /event добавлена в игру.

Источник: minecraft.fandom.com

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

mappet_ru / События.md

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Читайте также:  Как в Майнкрафте сделать электрическую печь

Cannot retrieve contributors at this time
92 lines (56 sloc) 12.3 KB

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents Copy raw contents

Copy raw contents

События это, по сути, программируемые системы нодов которые позволяют вам программировать логику ваших карт без необходимости писать какие-либо скрипты или код. В вашем распоряжении находится множество типов нодов, с помощью которых вы можете создавать логику. Соединеняя эти ноды, вы можете создать содержательную программу, которая может делать что-либо с миром, игроком, NPC и т.д. по вашему усмотрению.

События можно триггерить либо триггерами, либо командой /mp event trigger .

Событиями можно управлять в главной панели Маппета. Третья панель в левом боковом меню откроет редактор.

Как только вы создадите или выберете событие, вы увидите вот такой редактор:

Редактор нодов

Система событий поддерживает следующие типы нодов:

  • Нод Команда позволяет исполнять команды и перенаправлять поток в заисимости от полученного результата
  • Нод Условие позволяет проверять выражение и, в зависимости от полученных результатов, перенаправлять поток исполнения
  • Нод Переключатель позволяет направить поток исполнения в зависимости от результат заданного выражения
  • Нод Таймер позволяет задержать исполнение

Нод «Команда» исполняет команду с перспективы субъекта, на которого нацелена команда. Субъектом этой команды может быть сам игрок, если событие было затриггерено с помозьюкоманды /mp event trigger , блока-триггера, блока-региона, или NPC, если оно было затриггерено одним из триггеров NPC.

Кроме того, команды в нодах «Команда» могут использовать особое форматирование, дабы оценивать выражения в $ <. >. К примеру, если вы хотите использовать команду /setblock , дабы разместить блок, однако хотите, чтобы ночью на месте этого блока был огонь, а днём камень, то вы можете просто ввести следующую команду:

/setblock -1514 4 1981 minecraft:$

Это заменит $ в зависимости от того, какое чейчас время суток. Т.е. ночью будет огонь, а днём камень. Также, если вам когда-нибудь понадобится сослаться на игрока/NPC-субъекта в командах, вы можете использовать выражение $ (которое являет собой UUID целевой сущности), которое работает со всеми командами, которые предоставляют аргументы селектора целей.

Если при исполнении команды не случилось ошибки, то исполнение перейдёт дальше ко всем вводным (дочерним) нодам. Однако, если команда выдала ошибку, то исполнение дальше не продолжится. Переключатель Бинарный позволяет переключить режим поведения нода. Вместо активации всего при успехе и активации ничего при ошибке, бинарный мод будет работать вот так: при успехе, исполнение будет передано к первому ноду (обозначающемуся 0 и зелёным потоком), в то время как при ошибке исполнение перейдёт ко второму ноду (обозначающемуся 1 и красным потоком). Все остальные присоединённые ноды будут проигнорированны (как показано нодом 2 с жёлтым, полупрозрачным потоком).

Бинарный режим в действии

Нод «Условие» оценивает своё выражение, и, в зависимости от полученного значения, передаёт исполнение дальше. Если получившееся значение не равняется нулю (всё кроме 0 ), то нод передаст исполнение всем соединённым (дочерним) нодам. Если полученное значени равняется 0 , то ни один нод не будет исполнен. Также, как и с нодом «Команда», переключатель Бинарный позволяет сменить модель исполнения нодов с все-либо-никто на первый-либо-второй.

Читайте также:  Как сделать подсвечник в Майнкрафте

Используя опцию бинарности, вы можете создать выражение типа if-elseif-else (либо-или же либо — или же) вот таким образом:

Исполнение if-elseif-else

Нод «Переключатель» похож на нод «Условие», только вместо передачи исполнения по механизму все-либо-никто или бинарной модели, он оценивает собственное выражение, и передаёт исполнение дочернему ноду с индексом получившегося значения. К примеру, скажем вы хотите случайно передать исполнение одному из трёх нодов типа «Команда». Этого можно добиться посредством ввода floor(random(0, 3)) в нод «Переключатель», тогда у вас выйдет что-то в роде того:

Случайное исполнение

Нод «Таймер» позволяет задержать исполнение системы нодов на заданное количество тиков. Если вы хотите исполнять команды постепенно, вы можете использовать этот нод, дабы задерживать команды.

Касаемо иерархии никаких ограничений нет, как и касаемо того, в каком порядке необходимо организовывать нолы, однако, дабы инициализировать нод «Событие», вам необходимо указать главный нод, как это было описано на странице Нодов.

Когда происходит триггер события (или диалога, то в событие поступают некоторые данные. У этих данных есть две главные переменные, отвечающие за контекст, которыми являются:

  • subject это иницатор события, к примеру, игрок, на которого было затриггерено событие посредством команды /mp event trigger .
  • object это дополнительная сущность, триггер которой подействовал на момент выполнения, то есть, к примеру, в случае с NPC с триггером на взаимодействии, на которого кликнули правой кнопкой мыши, NPC выступает субъектом, а игрок, кликнувший по нему — объектом. subject и object это строки, содержащие UUID, которые можно использовать для команд или выражений. Кнопки цели в нодах условий в состояниях Субъект и Объект имеют ровно такие же свойства, что и subject с object .

Использование с командами

Скажем, у вас есть событие с нодом типа «Команда» и вы хотите, чтобы он телепортировал игрока на два блока вверх. Для этого, введите в нод следующую команду:

/tp $ ~ ~2 ~

Использование с выражениями

Скажем, у вас есть событие, в котором есть нод типа «Условие» и вы хотите, чтобы он проверял есть ли у игрока 10 ХП ( 5 сердец):

player_hp(subject) >= 10

Передача пользовательских данных

У команды /mp event trigger есть опциональный аргумент под названием [data] (данные). Через него вы можете передавать опциональные данные NBT, которые будут использованы в событии. К примеру, скажем у нас в событии есть нод «Переключатель», которым нужно управлять со стороны, что-то в таком роде:

Пользовательская переменная

Так что, теперь можно пределать переменную используя последний аргумент посредством NBT вот таким образом:

Эта команда передаст в input значение 2 , что, по принципу действия нода «Переключатель», передаст выполнение ноду с индексом 2 (самый правый). В графу [data] вы можете вводить только нумерические значения и строки. Комплексные тэги и тэги-списки не поддерживаются!

Источник: github.com