FMC - это высокоуровневая библиотека элементов для разработки модов для Minecraft. Данный проект призван решить проблему переносимости кода в майнкрафт модах. Зачастую при портировании мода с одной версии игры на другую, даже если бизнесс логика никак не изменилась, неизменными остаются проценты от старой кодовой базы. Это значительно замедляет скорость разработки и ведёт к новым багам. В итоге авторы предпочитают долго задерживаться на одной версии и неохотно переходят на другие. Из-за этого существуют такие версии как 1.7.10, 1.12.2, 1.16.5, где есть множество модов, которые мы никогда не увидим на новых версиях.
// TODO примеры кода возрастающие по сложности
Выбирая между процедурным, объектным и функциональным стилем, мы делаем предпочтение в сторону функционального. Почему?
- Процедурный код очень трудно поддерживать, на нём практически невозможно делать расширяемые абстракции.
- Чистый объектный подход в полной мере практически не встречается в природе и в головах программистов. Обычно, это процедурный стиль с классами. Как следствие, мы обладаем всеми теми же проблемами, что и в процедурном, а так же тонну людей, которые видят ситуацию совсем по-разному. Нам этого не надо.
- Функциональный стиль существует в чистом виде, есть множество best-practises, и он понятен людям чаще, чем объектный.
"Кошачьи" библиотеки являются очень перегруженными. Мы получаем очень много лишнего и не имеем много нужного. Помимо того, их дизайн не всегда работает лучшим образом с tagless final(например, ApplicativeError/MonadError)
// TODO мотивация
Нам необходимо обобщать совершенно разнородный код с разных версий игры в единую абстракцию. Классы типов позволяют это делать в простом и интуитивном стиле. Весь код FMC представляет собой лишь набор готовых кубиков кода. Пользователь может выборочно использовать одни и не использовать другие, почти любой код из стандартной библиотеки можно перенести в отдельную без потери гибкости.
// TODO мотивация
// TODO мотивация
Этой версии должно быть достаточно, чтобы писать моды средней сложности. Среди возможностей должны быть:
- Создание простых блоков
- Создание блоков-мобов(BlockEntity)
- Создание любых предметов от пустышек до инструментов, батареек, ведёр и других.
- Создание групп предметов(вкладок в креативе)
- Работа с сетью
- Создание эффектов зелий
- Создание звуков
Инструментарий для создания статичных моделей блоков и предметов.
Инструментарий для создания мобов любой сложности
Инструментарий для создания динамических моделей для мобов(в том числе и блоков-мобов). На данный момент ожидается использование FRP стиля.
Инструментарий для создания графических интерфейсов любой сложности. Так же ожидается FRP стиль.
Инструментарий для созданий структур любой сложности.
Инструментарий для создания биомов любой сложности.
Инструментарий для создания миров любой сложности.
На данном этапе возможности библиотеки должны быть сравнимы с разработкой через один из низкоуровневых апи(Forge, NeoForge, Fabric и тп)
// TODO Вписать в план создание подсистемы с юнит тестами.
// TODO