Table of Contents

Введение в разработку модов с помощью Fabric

Это руководство призвано объяснить и показать некоторые вещи, которые вы сможете использовать при разработке модов. Чтобы создавать моды для Minecraft, вам часто придётся сталкиваться с написанием необычного кода, который поймёт Minecraft Так как изменения в Minecraft превносятся достаточно быстро, он, по своей сути, не предназначен для модификаций.

В отличии от других библиотек для создания модов, Fabric не является надстройкой над игрой, чтобы дать разработчикам больше функций. Вместо этого, код встроен с помощьюбиблиотеку Mixin.

Mixin'ы временами работают ненадёжно, нестабильно, и даже могут вызывать конфликты. Тем не менее, некоторые базовые функции уже встроены в Fabric API. Если нужной вам функции в Fabric API нет, зачастую для этого можно найти сторонние библиотеки. Практически в любой ситуации рекомендуется использовать отличающиеся от Fabric API библиотеки вместо того, чтобы импортировать Mixin самостоятельно.

Однако, это может и не понадобиться вовсе. Да, Minecraft не предназначен для разработки модов , но тем не менее, он содержит в себе достаточно много всего, с чем можно работать без каких-либо изменений извне.

Эта статья расскажет о способах взаимодействия с Minecraft, в порядке предпочтительности.

Native Minecraft APIs

Если Minecraft уже позволяет вам что-то делать, не изобретайте заново колесо. Хорошим примером этого является класс “Registry”, который позволяет добавлять блоки и элементы без каких-либо изменений в код Minecraft.

Minecraft также использует файлы данных JSON для различных функций, управляемых данными. Вы можете добавить JSON-файлы в свой мод, которые затем вводятся Fabric API. Например, модели блоков реализуются с помощью JSON-файлов.

The Fabric API

Сам Fabric, установленный в клиенте, разделен на две части.

  1. Fabric Loader, который загружает ваш мод и вызывает вашу точку входа.
  2. Fabric API, опциональная библиотека, которая содержит некоторые общие полезные интерфейсы.

API намеренно держится относительно небольшим, чтобы ускорить перенос Fabric на более новые версии Minecraft.

Вы можете узнать, что входит в состав Fabric API, просмотрев его исходный код на GitHub. Fabric API содержит множество общих событий и общих утилит для таких вещей, как создание сетей и рендеринг.

Сторонние API

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

Вы можете найти неполные списки сторонних библиотек на этой вики.

Mixins

Наконец, вы можете использовать mixins. Mixins - это мощная функция, которая позволяет вам изменять любой код Minecraft. Некоторые mixins могут вызвать конфликт, но при правильном использовании они являются ключом к добавлению уникального поведения в ваш мод.

Mixins бывают самых разных вкусов:

Это не полный список, а скорее краткий обзор.

Добавление Интерфейсов

Это, вероятно, один из самых безопасных способов использования mixins. Новые реализации интерфейса могут быть добавлены в любой класс Minecraft. Затем вы можете получить доступ к интерфейсу, приведя к нему класс. Это ничего не меняет в классе, это только добавляет новые вещи, и поэтому очень маловероятно, что они будут конфликтовать.

Одно предостережение заключается в том, что сигнатура функции (имя + типы параметров), которую вы вводите, должна быть уникальной. Поэтому, если вы используете общие типы параметров, обязательно дайте ему уникальное имя.

Callback Injectors

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

Redirect Injectors

Redirects позволяют переносить вызовы методов или доступ к переменным в целевой метод с помощью собственного кода. Используйте их очень экономно, целевой вызов или доступ можно перенаправить только один раз между всеми модами. Если два мода перенаправляют одно и то же значение, это вызовет конфликт.

Перезапись

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