Fabric Flux
Важно: Данная модификация не является частью Fabric. Это сторонняя библиотека, которая позволяет разработчикам создавать энергетические моды для Fabric.
Fabric Flux (сокращённо FF) представляет собой библиотеку, предназначенную для реализации энергетической системы в модах на платформе Fabric.
Батарея
Попробуйте применить эту батарею на различных сущностях.
Принцип работы
Система основана на двух основных понятиях: контейнеры и интерфейсы.
- Flux Container — это объект, предоставляющий доступ к интерфейсам. Некоторые контейнеры могут требовать дополнительные данные для доступа. Например, предмету потребуется ItemStack для предоставления интерфейса.
- Flux Interface используется для передачи энергии между контейнерами. Для завершения передачи энергии требуется два интерфейса.
Рекомендации для разработчиков
- Каждый
Item, принимающий энергию, должен реализовыватьIFluxContainerи всегда проверять вgetFluxFor, является ли тип объектаItemStack. Другие типы объектов также поддерживаются. - Любой
BlockEntityможет реализовывать какIFlux, так иIFluxContainer. Если реализован контроллер, методgetFluxForдолжен всегда проверять, является ли тип объектаDirection. Другие типы объектов также поддерживаются. - Если интерфейс просто не принимает ввод/вывод, он должен возвращать
-1вместо количества энергии (которое не может быть меньше0). Это следует проверять до расчёта энергии. - НЕ ХРАНИТЕ Flux Interfaces, только контейнеры. Некоторые интерфейсы могут создаваться контроллером заново. Есть исключения для предметов, таких как зарядка/разрядка батареи (
Itemдолжен создавать новый интерфейс, так как его нельзя хранить в стеке предметов). IFlux::toследует использовать для передачи энергии. Этот метод можно переопределить.- Класс
FluxBatteryпредоставляется в API в качестве базового интерфейса.
Отличия от других энергетических API
FF немного отличается от Forge Energy API. В этой модификации меньше методов для реализации, и она не основана на возможностях (вместо этого используются контейнеры). Нет аналогов canExtractEnergy/canReceiveEnergy, проверка с помощью extractFlux/receiveFlux(0, true) делает то же самое, хотя это не обязательно.