Tesla
Tesla — это энергетический API, предназначенный для межмодового взаимодействия. Он позволяет предметам, блокам и сущностям из различных модов взаимодействовать друг с другом через сеть питания Tesla.
ВНИМАНИЕ: Альфа- и бета-версии предназначены для авторов модов и тестеров. Моды, поддерживающие Tesla, должны ориентироваться только на полные выпуски! Использование альфа-сборки может привести к сбою модов, которые её требуют!
Начало работы
Лучший способ использования API Tesla — через систему возможностей (Capability) Forge. Идея очень проста: возможности — это реализации интерфейса, которые обрабатывают определённый тип логики, связанной с Tesla. Эти возможности могут быть прикреплены к поддерживаемым объектам (Tile Entity, ItemStack и Entity). Когда возможность прикреплена, этот объект получает доступ к предоставленной логике Tesla и становится видимым для других объектов с поддержкой Tesla. Вы можете посмотреть базовую реализацию возможности здесь и пример сущности (Tile Entity) здесь. Также есть пример предмета здесь.
Часто задаваемые вопросы
Где можно обсудить API Tesla?
Существует публичный сервер Discord, который можно найти здесь.
Чем Tesla отличается от других энергетических API?
API Tesla функционирует очень похоже на другие энергетические API, однако было принято несколько проектных решений, которые делают API гораздо более гибким. Одно из этих решений — использование системы возможностей (Capability) Forge, что позволяет добавлять поддержку Tesla практически к чему угодно. С этой системой можно добавить поддержку Tesla к ванильной печи без использования сомнительных методов. Другое решение — использование long вместо int. Это изменение позволяет модам легко работать с большими числами мощности.
Почему вы создали этот API?
Изначально API был создан как забавный побочный проект, но получил много неожиданного внимания от других разработчиков. Он не создавался как крестовый поход против других энергетических API или что-то подобное.
Существуют ли какие-либо стандарты для Tesla?
API не навязывает никаких стандартов, однако есть несколько вещей, которым авторам модов рекомендуется следовать. Одна единица Tesla должна равняться 1 RF, сущности (Tile Entities) не должны напрямую реализовывать интерфейсы возможностей, а сторонняя логика должна обрабатываться через методы возможностей.
Следует ли включать API Tesla в другие моды?
Хотя включение API часто практикуется и поддерживается Forge, это очень плохая практика. Хотя ничто не мешает другим модам включать API, это настоятельно не рекомендуется и официально не поддерживается.
Как работает мягкая зависимость, если я не могу включить API?
Forge предоставляет несколько инструментов, которые значительно упрощают реализацию мягкой зависимости. Первый — это аннотация @Optional. Эту аннотацию можно добавить к любому классу, реализующему интерфейс, и если определённый идентификатор мода не обнаружен, интерфейс может быть удалён из класса. Это позволяет существующим контейнерным объектам реализовывать интерфейсы Tesla без жёсткой зависимости. Аннотация @CapabilityInject также чрезвычайно полезна для мягкой зависимости. Вы можете использовать эту аннотацию для поля, чтобы оно инициализировалось определённой возможностью, когда эта возможность инициализируется. Вы также можете поместить эту аннотацию на методы, чтобы они вызывались при инициализации возможности. Вы можете заметить, что аннотация принимает ссылку на класс возможности из Tesla, который будет отсутствовать при мягкой зависимости. Из-за особенностей работы аннотаций и JVM, безопасно делать эту ссылку в аннотации. Это не вызовет исключения Class Definition.
Политика использования в сборках модов
Да, вы можете использовать это в сборке модов. Пожалуйста, не присылайте мне сообщения с просьбой разрешить использовать это в вашей сборке модов. Я не буду отвечать на такие сообщения.
