Coder Social home page Coder Social logo

fmc's Introduction

FMC

  1. Введение
  2. Примеры
  3. Архитектурные решения
  4. RoadMap
  5. Contribution and code style

Введение

FMC - это высокоуровневая библиотека элементов для разработки модов для Minecraft. Данный проект призван решить проблему переносимости кода в майнкрафт модах. Зачастую при портировании мода с одной версии игры на другую, даже если бизнесс логика никак не изменилась, неизменными остаются проценты от старой кодовой базы. Это значительно замедляет скорость разработки и ведёт к новым багам. В итоге авторы предпочитают долго задерживаться на одной версии и неохотно переходят на другие. Из-за этого существуют такие версии как 1.7.10, 1.12.2, 1.16.5, где есть множество модов, которые мы никогда не увидим на новых версиях.

Примеры

// TODO примеры кода возрастающие по сложности

Архитектурные решения

Мы используем чистый функциональный стиль

Выбирая между процедурным, объектным и функциональным стилем, мы делаем предпочтение в сторону функционального. Почему?

  • Процедурный код очень трудно поддерживать, на нём практически невозможно делать расширяемые абстракции.
  • Чистый объектный подход в полной мере практически не встречается в природе и в головах программистов. Обычно, это процедурный стиль с классами. Как следствие, мы обладаем всеми теми же проблемами, что и в процедурном, а так же тонну людей, которые видят ситуацию совсем по-разному. Нам этого не надо.
  • Функциональный стиль существует в чистом виде, есть множество best-practises, и он понятен людям чаще, чем объектный.

Мы не используем семейство библиотек cats

"Кошачьи" библиотеки являются очень перегруженными. Мы получаем очень много лишнего и не имеем много нужного. Помимо того, их дизайн не всегда работает лучшим образом с tagless final(например, ApplicativeError/MonadError)

Мы стараемся избегать наследования

// TODO мотивация

Мы используем tagless final

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

Мы избегаем объектов

// TODO мотивация

Мы используем FRP

// TODO мотивация

Roadmap

1.0.0

Этой версии должно быть достаточно, чтобы писать моды средней сложности. Среди возможностей должны быть:

  • Создание простых блоков
  • Создание блоков-мобов(BlockEntity)
  • Создание любых предметов от пустышек до инструментов, батареек, ведёр и других.
  • Создание групп предметов(вкладок в креативе)
  • Работа с сетью
  • Создание эффектов зелий
  • Создание звуков

1.1.0

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

1.2.0

Инструментарий для создания мобов любой сложности

1.3.0

Инструментарий для создания динамических моделей для мобов(в том числе и блоков-мобов). На данный момент ожидается использование FRP стиля.

1.4.0

Инструментарий для создания графических интерфейсов любой сложности. Так же ожидается FRP стиль.

1.5.0

Инструментарий для созданий структур любой сложности.

1.6.0

Инструментарий для создания биомов любой сложности.

1.7.0

Инструментарий для создания миров любой сложности.

2.0.0

На данном этапе возможности библиотеки должны быть сравнимы с разработкой через один из низкоуровневых апи(Forge, NeoForge, Fabric и тп)

// TODO Вписать в план создание подсистемы с юнит тестами.

Contribution and code style

// TODO

fmc's People

Contributors

googetan avatar

Watchers

 avatar

Forkers

hohserg1

fmc's Issues

monad syntax design is bad

All the monads are placed in one namespace what leads to compille errors especially when innerMonad is used.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.