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

Подготовка

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

Основы

Эти страницы являются обязательными для чтения при разработке модов. Если вы новичёк, то рекомендуется прочитать следующее.

Терминология
Инструменты для разработки

Продвинутым

Предметы

Блоки

Эти страницы помогут вам создать блоки, хранить предметы и данные в блоках, а также создавать модели и состояния блоков.

Генерация данных

Эти страницы помогут вам с Fabric Data Generation API, который генерирует файлы JSON с помощью генераторов данных.

Генерация мира

Команды

Эти страницы помогут вам с библиотекой Brigadier от Mojang, которая позволяет создавать команды со сложными аргументами и действиями.

События (Ивенты)

Сущности

Жидкости

Миксины

Эти страницы помогут вам в использовании библиотеки Mixin от SpongePowered, которая является очень сложной темой. Мы рекомендуем вам внимательно прочитать эти страницы.

Я создал САМЫЙ ИНТЕРЕСНЫЙ ИВЕНТ | МайнШилд 3

Разное

Некоторые из этих страниц в настоящее время находятся в стадии написания, некоторые могут быть недоступны.

Yarn

Помощь в разработке Fabric

Процедура изменения Fabric — или как сделать так, чтобы предложенное Вами изменение внесли (или наоборот!)

FabLabs — тестовая площадка для макетирования новых возможностей Fabric без создания pull-запроса

Ищете старые туториалы? Вероятно, они были заархивированы. Вы можете просмотреть архивные страницы здесь.

ru:tutorial:events

Table of Contents

Пользовательские события(ивенты)

Fabric API предоставляет систему, которая позволяет модам реагировать на события, происходящие в игре. События — это перехватчики, которые удовлетворяют общим случаям использования и/или обеспечивают повышенную совместимость и производительность между модами, которые подключаются к одним и тем же областям кода. Использование событий часто заменяет использование миксинов. Fabric API предоставляет события для важных областей в кодовой базе Minecraft, в которых могут быть заинтересованы несколько моддеров. В некоторых областях нет хуков, поэтому вы можете выбрать использование миксина или создать свое собственное событие.

В этом туториале мы рассмотрим создание события, которое запускается при стрижке овец. Процесс создания события заключается в:

создание интерфейса обратного вызова события
запуск события из миксина
создание тестовой реализации

Создание интерфейса обратного вызова

Интерфейс обратного вызова описывает, что должно быть реализовано слушателями событий, которые будут прослушивать ваше событие. Интерфейс обратного вызова также описывает, как событие будет вызываться из нашего миксина. Обычно объект события помещается в качестве поля в интерфейсе обратного вызова, который будет идентифицировать наше фактическое событие.

♨️ ИВЕНТЫ, ОБРАБОТКА СОБЫТИЙ | РАЗРАБОТКА ПЛАГИНОВ для МАЙНКРАФТ с НУЛЯ #8 | Spigot полный курс

Для нашей реализации события мы выберем использовать событие с поддержкой массива. Массив будет содержать все прослушиватели событий, которые прослушивают событие. Наша реализация будет вызывать прослушиватели событий по порядку до тех пор, пока один из них не вернет ActionResult.PASS . то означает, что слушатель может сказать “отменить это”, “одобрить это” или “мне все равно, оставьте это следующему слушателю событий”, используя его возвращаемое значение. Использование ActionResult в качестве возвращаемого значения — это обычный способ заставить обработчик событий взаимодействовать таким образом.

Читайте также:  Как закрыть железный люк в Майнкрафте

Вам нужно будет создать интерфейс, который имеет экземпляр Event и метод для реализации ответа. Базовая настройка для нашего обратного вызова стрижки овец — это:

Давайте рассмотрим это более подробно. Когда вызывается вызывающий, мы перебираем всех слушателей:

(listeners) -> (player, sheep) -> { for (SheepShearCallback listener : listeners) {

Затем мы вызываем наш метод (в данном случае interact ) для слушателя, чтобы получить его ответ:

ActionResult result = listener.interact(player, sheep);

Если слушатель говорит, что мы должны отменить ( ActionResult.FAIL ) или полностью завершить ( ActionResult.SUCCESS ), обратный вызов возвращает результат и завершает цикл. ActionResult.PASS переходит к следующему слушателю и в большинстве случаев должно привести к успеху, если больше не зарегистрировано слушателей:

// . if(result != ActionResult.PASS) { return result; } } return ActionResult.PASS;

В Fabric API, мы добавляем комментарии Javadoc в начало классов обратного вызова, чтобы документировать, что делает каждый ActionResult. В нашем случае это может быть:

/** * Callback for shearing a sheep. * Called before the sheep is sheared, items are dropped, and items are damaged. * Upon return: * — SUCCESS cancels further processing and continues with normal shearing behavior. * — PASS falls back to further processing and defaults to SUCCESS if no other listeners are available * — FAIL cancels further processing and does not shear the sheep. /**

Запуск события из миксина

Теперь у нас есть базовый скелет события, но нам нужно его запустить. Поскольку мы хотим, чтобы событие вызывалось, когда игрок пытается подстричь овцу, мы вызываем средство вызова события в SheepEntity#interactMob при вызове dropItems() (т.е. овец можно стричь, и игрок держит ножницы):

В этом простом миксине мы вызываем средство вызова события ( SheepShearCallback.EVENT.invoker().[…] ), оторый затем вызывает всех активных слушателей, чтобы посмотреть, что он должен делать. На основе этого он возвращает ActionResult, и если результат — FAIL(Неудача), мы не стригем овец, не роняем предметы, не повреждаем предметы игрока ( info.cancel(); ). Обязательно зарегистрируйте свой миксин в вашем файле mixins.json!

Тестовое событие со слушателем

Теперь нам нужно протестировать наше событие. Вы можете зарегистрировать прослушиватель в своем методе инициализации (или в других областях, если предпочитаете) и добавить туда пользовательскую логику. Вот пример, который бросает алмаз вместо шерсти к ногам овцы:

SheepShearCallback.EVENT.register((player, sheep) -> { sheep.setSheared(true); // создание алмаза в виде дропа в позиции овцы ItemStack stack = new ItemStack(Items.DIAMOND); ItemEntity itemEntity = new ItemEntity(player.world, sheep.x, sheep.

Читайте также:  Как дать себе кейс в Майнкрафте

y, sheep.z, stack); player.world.spawnEntity(itemEntity); return ActionResult.FAIL; });

Обратите внимание, что это событие также настраивает стрижку овец вручную, так как обычно оно отменяется, если мы возвращаем FAIL.

Если вам не нужно отменять событие, убедитесь, что вы вернули PASS , чтобы другие слушатели также могли работать. Несоблюдение этих “невысказанных правил” может привести к появлению разгневанных моддеров на вашем пороге.

Если вы зайдёте в игру и подстрижёте овцу, вместо шерсти должен упасть алмаз.

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

BukkitWiki

This Wiki is home to Bukkit’s documentation and regulations surrounding the Bukkit Project and it’s services. Want to help out? We would love to have you! Signup to get started!

Don’t have an account?
Advertisement

Event API Reference/ru

С версии Minecraft 1.1 в Bukkit API была введена новая система событий. Эта система проще, быстрее, и более разносторонняя. Для более детальной информации читайте далее.

Contents

  • 1 Видео-инструкция
  • 2 Основы
  • 2.1 Установка функции
  • 2.2 Обработчик событий
  • 2.3 Добавляем обработчик события
  • 2.4 Настройки EventHandler
  • 3.1 Пример
  • 3.2 Регистрация события в плагине
  • 3.2.1 Регистрация события в плагине, реализованном как слушатель
  • 4.1 Custom Event Example
  • 4.2 Вызов собственного события
  • 4.3 Прослушивание собственного события

Видео-инструкция

Если вы сначала хотите посмотреть видео-инструкцию, используйте эту ссылку.

Основы

Чтобы оставить эту часть простой, сейчас будем работать только с событием PlayerLoginEvent. Давайте начнём с установки этой функции.

Установка функции

Для начала вам нужна функция для регистрации события:

public void onPlayerLogin(PlayerLoginEvent event) // Ваш код >

Далее вам понадобится обработчик событий.

Обработчик событий

Класс «EventHandler» — аннотация, которая идёт выше вашей функции. Выглядит это следующим образом:

Это помечает вашу функцию как обработчик события со стандартным приоритетом.

Контроллер обработчиков событий использует приоритет обработчика для управления последовательностью выполнения событий. Выглядит следующим образом:

Пример того, как это должно выглядеть в вашем классе:

Добавляем обработчик события

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

Вот то, каким образом ваш класс может выглядеть в данный момент:

Важно запомнить, что название функции более не имеет значения, вы можете назвать функцию так, как захотите.

Вы можете спросить: «Как Bukkit знает, какой тип события он обрабатывает?». Он читает то, что вы принимаете в качестве параметра. Пример: PlayerLoginEvent .

Note: Вы должны выбрать определённое принимаемое событие, иначе Bukkit не будет его обрабатывать

Настройки EventHandler

Обработчик событий может указывать на разные параметры. В данный момент вы можете указать:

  • EventPriority.MONITOR
  • EventPriority.HIGHEST
  • EventPriority.HIGH
  • EventPriority.NORMAL
  • EventPriority.LOW
  • EventPriority.LOWEST
  • true
  • false

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

Для регистрации ваших функций, класс, содержащий EventHandler’ы, должен быть унаследован от класса Listener.

Читайте также:  Как сделать водяную бомбу в Майнкрафте

import org.bukkit.event.Listener; public class LoginListener implements Listener // Ваш код >

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

getServer().getPluginManager().registerEvents(Listener, Plugin);

Пример

Этот слушатель содержит два EventHandler’а.

Приоритет одного выставлен на HIGH, а другого на NORMAL.

Регистрация события в плагине

Функция registerEvents требует слушатель и плагин. К счастью, у нас уже есть LoginListener. Теперь перейдём к LoginPlugin:

import org.bukkit.plugin.java.JavaPlugin; public class LoginPlugin extends JavaPlugin public void onEnable() getServer().getPluginManager().registerEvents(new LoginListener(), this); > >

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

Вы можете регистрировать события в главном классе, например:

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

Есть достаточно много способов зарегистрировать ваше событие, например:

Плагин входа может выглядеть так:

import org.bukkit.plugin.java.JavaPlugin; public class LoginPlugin extends JavaPlugin public void onEnable() new LoginListener(this); > >

Создание собственных событий

Собственные события теперь намного круче, чем раньше! Больше не нужно проверять, чьими являются события, они всегда будут вашими! Вы можете использовать ту же систему, которую использует Bukkit без потери производительности.

Есть две вещи, которые стоит помнить, когда вы создаёте собственное событие. Есть расширение событий и статические обработчики. Со статическими обработчиками, вам необходимо использовать следующий код для вашего собственного события:

private static final HandlerList handlers = new HandlerList(); public HandlerList getHandlers() return handlers; > public static HandlerList getHandlerList() return handlers; >

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

Custom Event Example

import org.bukkit.event.Event; import org.bukkit.event.HandlerList; public 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; > >

Вызов собственного события

Вызов события такой же, как и прежде:

// Создаём событие CustomEvent event = new CustomEvent(«Sample Message»); // Вызываем событие Bukkit.getServer().getPluginManager().callEvent(event); // Выполняем событие Bukkit.getServer().broadcastMessage(event.getMessage());

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

Обрабатывать собственное событие следует так же, как и прослушивание обычного события:

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

Как сделать ивент в майнкрафт

постоянный суперпроект

Minecraft — это строительная игра жанра «песочница», созданная Маркусом Перссоном, основателем **Mojang…

Minecraft — это строительная игра жанра «песочница», созданная Маркусом Перссоном, основателем Mojang AB. Игра позволяет игрокам создавать и разрушать различные блоки и использовать предметы в трёхмерной окружающей среде. Игрок управляет персонажем, который может разрушать или устанавливать блоки, формируя фантастические структуры, создания и художественные работы в одиночку или коллективно с другими игроками на различных многопользовательских серверах в разных игровых режимах.

Источник: xgm.guru