TooManyRecipeViewers (TMRV) avatar

TooManyRecipeViewers (TMRV) [1.21.1] [1.20.1]

TooManyRecipeViewers

TooManyRecipeViewers (или TMRV) представляет собой слой совместимости для запуска плагинов JEI с EMI без необходимости установки JEI. Разработан Nolij.

Для использования этого мода требуется установленный EMI.

Почему стоит выбрать TMRV вместо EMI+JEI (JEMI)?

JEMI — это встроенный в EMI слой совместимости, обеспечивающий частичную работу плагинов JEI с EMI. Он сильно зависит от внутренних механизмов JEI, загружая и обрабатывая данные рецептов сначала в JEI, а затем импортируя их в EMI. JEMI разработан максимально просто.

TMRV отличается от JEMI — он стремится полностью заменить API JEI (ПРИМЕЧАНИЕ: TMRV содержит некоторые неизмененные внутренние компоненты JEI). TMRV, где это возможно, заменяет API JEI прямыми преобразователями (мапперами) в API EMI, вместо загрузки всего реестра JEI и последующего его опроса. Это дает ряд преимуществ, включая более эффективное использование ресурсов системы, но является компромиссом, так как поддержка TMRV требует значительно больших усилий, чем JEMI. Такой подход JEMI позволяет сосредоточить разработку EMI на улучшении самого мода, что является правильной стратегией.

Кратко: TMRV значительно эффективнее JEMI, но требует гораздо больше усилий для поддержки, и не следует ожидать от EMI таких трудозатрат на поддержку API, который изначально не учитывался в её дизайне.

Тем не менее, TMRV имеет два основных преимущества перед JEMI:

1. Совместимость с плагинами

TMRV обеспечивает лучшее покрытие API JEI, чем JEMI (за одним исключением — см. Известные ограничения API). На момент написания это включает:

  • Лучшую конвертацию встроенных типов рецептов (JEMI поддерживает только типы крафта и информации; TMRV поддерживает все встроенные типы рецептов JEI).
  • Псевдонимы ингредиентов/поиска.

2. Эффективность

С TMRV загрузка мира всегда происходит быстрее, чем с JEMI. Это связано с тем, что инициализация плагинов JEI блокирует загрузку мира — вы не можете начать играть, пока все плагины JEI не инициализируются. EMI загружает плагины асинхронно после загрузки мира.

Это означает, что даже если бы TMRV загружал плагины JEI медленнее, чем сам JEI (что не так, он загружает их заметно быстрее — см. бенчмарки), миры всегда загружаются быстрее с TMRV, чем с JEMI.

TMRV заменяет значительную часть API JEI преобразователями в соответствующие API EMI — это позволяет полностью удалить многие внутренние компоненты JEI. Нет необходимости инициализировать и хранить весь реестр рецептов JEI — TMRV просто конвертирует вызовы API JEI в вызовы EMI, а ответы преобразует обратно в формат JEI. Можно представить TMRV как Wine или Proton, а JEMI — как виртуальную машину (VM). JEMI использует реальный JEI, поэтому возможны сценарии, где TMRV выдаст ошибку, а JEMI — нет (это не обязательно означает, что JEMI корректно поддерживает сценарий), но в целом TMRV эффективнее JEMI.

Бенчмарки

Полные результаты и методология их получения описаны в BENCHMARKS.md. Результаты не отобраны выборочно. Инструкции выполнялись в точности, как описано. Сообщество приглашается к их проверке.

Время загрузки

TMRVJEMIСравнение
Craftoria   3201ms (2ms до загрузки мира, 3199ms после)   8277ms (6751ms до загрузки мира, 1526ms после)   -5076ms (-6749ms до загрузки мира, +1673ms после)
ATM10   7484ms (2ms до загрузки мира, 7482ms после)   18658ms (14500ms до загрузки мира, 4158ms после)   -11174ms (-14498ms до загрузки мира, +3324ms после)
ATM9   32392ms (2ms до загрузки мира, 32390ms после)   49409ms (42590ms до загрузки мира, 6819ms после)   -17017ms (-42588ms до загрузки мира, +25571ms после)

Использование памяти

TMRVJEMIСравнение
Craftoria   2.722 GiB   2.872 GiB   -153.6 MiB (приблизительно)
ATM10   3.580 GiB   4.491 GiB   -932.9 MiB (приблизительно)
ATM9   4.345 GiB   5.939 GiB   -1.594 GiB

Известные ограничения API

Конфигурационные файлы JEI

TMRV читает только файл .minecraft/config/jei/blacklist.json. Этот файл должен корректно работать для ванильных типов ингредиентов и типов, добавленных плагином JEI (это не включает моды с нативной поддержкой как JEI, так и EMI, например Mekanism). Это временное решение для сборок, переходящих с JEI. У JEMI был аналогичный недостаток. EMI имеет собственную настройку для скрытия ингредиентов — рекомендуется использовать её. Все остальные конфигурационные файлы JEI игнорируются TMRV, и их поддержка не планируется.

Плагины менеджера рецептов (Recipe Manager Plugins)

API JEI поддерживает "Recipe Manager Plugins". Эти плагины позволяют модам управлять своими собственными реестрами рецептов и обрабатывать поиск рецептов во время выполнения.

TMRV попытается извлечь рецепты из этих плагинов, но это работает не для большинства из них и не обеспечивает полноценной поддержки функции. Дальнейшая поддержка не планируется. Recipe Manager plugins — устаревшая концепция, которую используют очень немногие плагины, и их корректная поддержка невозможна без очень инвазивных миксинов в EMI, что не входит в задачи данного проекта.

Расширения ванильных категорий рецептов (Vanilla Recipe Category Extensions)

API JEI поддерживает "расширения" для ванильных категорий рецептов Крафта и Кузнечного дела. Достаточный анализ для определения возможности добавления поддержки этой части API JEI ещё не проведен. На данный момент эти функции не поддерживаются TMRV.

Изменения регистров во время выполнения (Runtime Registry Changes)

API JEI поддерживает модификацию реестров рецептов и ингредиентов во время выполнения (т.е. после завершения регистрации плагинов). Эта концепция несовместима с EMI и не является практикой, которую хотелось бы поддерживать. Поэтому после вызова IModPlugin.onRuntimeAvailable все API для изменения регистров во время выполнения будут выбрасывать IllegalStateException во избежание путаницы.

Повторное использование кода JEI

Планируется заменить больше внутренних компонентов JEI в будущих обновлениях. Однако некоторые части JEI просто нецелесообразно переписывать по разным причинам. Тем не менее, достаточно большая часть JEI уже заменена в TMRV, что позволяет уверенно утверждать:

  1. Достичь аналогичных улучшений по сравнению с JEMI с помощью миксинов было бы нецелесообразно (по крайней мере, разумным способом).
  2. Достаточно внутренних компонентов JEI заменено или удалено, чтобы не считать это несправедливым по отношению к JEI, особенно учитывая, что лицензия JEI явно разрешает это.

Требуемые зависимости

EMI avatarEMIEmilyPloszaj

Скачать TooManyRecipeViewers (TMRV)

 
Тип Скачать Версия Загрузчик Обновлено Размер
Release0.6.2+mc.20.11.20.1Forge31 июля 20251,2 МБ
Release0.6.2+mc.21.11.21.1NeoForge31 июля 20251,1 МБ
Release0.6.1+mc.20.11.20.1Forge30 июля 20251,2 МБ
Release0.6.1+mc.21.11.21.1NeoForge30 июля 20251,1 МБ
Release0.6.0+mc.20.11.20.1Forge1 июля 20251,2 МБ
Release0.6.0+mc.21.11.21.1NeoForge1 июля 20251,1 МБ
Release0.5.1+mc.20.11.20.1Forge14 июня 20251,2 МБ
Release0.5.1+mc.21.11.21.1NeoForge14 июня 20251,1 МБ
Release0.5.0+mc.20.11.20.1Forge4 июня 20251,2 МБ
Release0.5.0+mc.21.11.21.1NeoForge4 июня 20251 МБ
Пожалуйста авторизуйтесь, чтобы оставить свой комментарий.