TooManyRecipeViewers
tmrv · 1048515 загрузок · LicenseRef-OSL-3.0
клиент: required · сервер: unsupported (заявлено автором мода)
Уровень совместимости для запуска плагинов JEI с EMI, написанный Nolij.
Описание
ВАЖНОЕ УВЕДОМЛЕНИЕ О ЛИЦЕНЗИИ
Используя этот проект в любой форме, вы тем самым даете свое «выраженное согласие» на условия лицензии этого проекта (см. Лицензия) и подтверждаете, что я (автор этого проекта) выполнил свое обязательство по лицензии «приложить разумные усилия в данных обстоятельствах для получения явного согласия получателей с условиями настоящей Лицензии».
TooManyRecipeViewers
TooManyRecipeViewers (или TMRV) — это уровень совместимости для запуска плагинов JEI с EMI без необходимости установки JEI, написанный Nolij.
Для использования этого мода вам понадобится установленный EMI.
Зачем использовать TMRV вместо EMI+JEI (AKA JEMI)?
JEMI — это уровень совместимости, встроенный в EMI, позволяющий плагинам JEI в основном работать с EMI, в значительной степени полагаясь на внутренние компоненты JEI. Он разработан максимально упрощенным и использует JEI для обработки данных рецептов перед их импортом в EMI.
TMRV не похож на JEMI — он призван полностью заменить JEI API (ПРИМЕЧАНИЕ: TMRV действительно содержит некоторые немодифицированные внутренние компоненты JEI — см. Повторное использование кода JEI). TMRV (там, где это возможно) заменяет API-интерфейсы JEI прямыми преобразователями в API-интерфейсы EMI вместо загрузки всего реестра JEI и запроса его постфактум. Это имеет ряд преимуществ, включая более эффективное использование системных ресурсов, но также является и компромиссом, поскольку подход TMRV делает обслуживание гораздо более сложным, чем того требует JEMI. JEMI намеренно спроектирован таким образом, чтобы развитие EMI было сосредоточено на улучшении самой EMI, и этот подход я полностью поддерживаю.
TL;DR: TMRV намного эффективнее, чем JEMI, но требует гораздо больше усилий для поддержки, чем JEMI, и никто не должен ожидать, что EMI приложит столько усилий для поддержки API, на который намеренно не ссылались во время проектирования. Будьте счастливы, что EMI может даже загружать плагины JEI «из коробки» — это все равно требует изрядных усилий.
При этом TMRV имеет два основных преимущества перед JEMI:
1. Совместимость плагинов
TMRV лучше описывает API JEI, чем JEMI (за одним исключением — см. Известные ограничения API). На момент написания это включает в себя:
- Лучшее преобразование встроенных типов рецептов (JEMI поддерживает только типы рецептов крафта и информации; TMRV поддерживает все встроенные типы рецептов JEI)
- Поддержка псевдонимов ингредиентов/поиска
createRecipeExtrasподдержка
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 — как о виртуальной машине. JEMI использует настоящий JEI, поэтому в некоторых сценариях TMRV будет выдавать ошибку, а JEMI — нет (обратите внимание, что это не обязательно означает, что JEMI правильно поддерживает сценарий, это просто означает, что так оно и есть), но TMRV, как правило, будет более эффективным, чем JEMI.
Тесты
Полные результаты и шаги, предпринятые для их получения, описаны в BENCHMARKS.md. Эти результаты не были выбраны случайно. Инструкции были выполнены точно так, как описано в этом файле. Я призываю сообщество проверить их.
Время загрузки
| | ТМРВ | ДЖЕМИ | Сравнение | |-----------------|---------------------------------------------------------|------------------------------------------------------------------------------|------------------------------------------------| | Крафтория | 1582 мс (5 мс до мировой загрузки, 1577 мс после мировой загрузки) | 11036мс (10000мс до мировой загрузки, 1036мс после мировой загрузки) | -9454 мс (-9995 мс до мировой загрузки, +541 мс после мировой загрузки) | | Банкомат10 | 4951 мс (3 мс до мировой загрузки, 4948 мс после мировой загрузки) | 20132мс (15550мс до мировой загрузки, 4582мс после мировой загрузки) | -15181мс (-15547мс до мировой загрузки, +366мс после мировой загрузки) | | Окончательность: Омния | 3010 мс (6 мс до мировой загрузки, 3004 мс после мировой загрузки) | 6354 мс (4425 мс до мировой загрузки, 1929 мс после мировой загрузки) | -3344 мс (-4419 мс до мировой загрузки, +1075 мс после мировой загрузки) |
Использование памяти
| | ТМРВ | ДЖЕМИ | Сравнение | |-----------------|-----------|-----------|--------------------------| | Крафтория | 4,278 ГиБ | 4,386 ГиБ | -110,6 МБ (приблизительно) | | Банкомат10 | 4,401 ГиБ | 5,273 ГиБ | -892,9 МБ (приблизительно) | | Окончательность: Омния | 1,947 ГиБ | 2,065 ГиБ | -120,8 МБ (приблизительно) |
Известные ограничения API
Файлы конфигурации JEI
.minecraft/config/jei/blacklist.json — единственный файл конфигурации JEI, который вообще читает TMRV. Этот файл должен нормально работать для ванильных типов ингредиентов и для модифицированных типов ингредиентов, добавленных плагином JEI (это не включает моды, которые изначально поддерживают как JEI, так и EMI, такие как Mekanism). Это задумано как временная остановка для пакетов, переходящих с JEI. У JEMI был аналогичный недостаток. У EMI есть собственная конфигурация для скрытия ингредиентов — используйте ее. Все остальные файлы конфигурации JEI полностью игнорируются TMRV, и их поддержка не планируется.
Плагины диспетчера рецептов
JEI API поддерживает «Плагины диспетчера рецептов». Эти плагины позволяют модам контролировать свои собственные реестры рецептов и самостоятельно выполнять поиск рецептов во время выполнения.
TMRV попытается извлечь рецепты из этих плагинов, но это не работает для большинства плагинов и ни в коем случае не обеспечивает должной поддержки этой функции. Дополнительная поддержка не планируется. Плагины Recipe Manager — это устаревшая концепция, которую до сих пор используют очень немногие плагины, и их невозможно правильно поддерживать без очень агрессивных миксинов EMI — что я не собираюсь использовать в этом проекте.
Изменения реестра среды выполнения
JEI API поддерживает изменение реестров рецептов и ингредиентов во время выполнения (т. е. после завершения регистрации плагина). Эта концепция несовместима с EMI, и я не хочу поддерживать эту практику. Таким образом, после вызова IModPlugin.onRuntimeAvailable все API для изменений реестра во время выполнения будут выдавать IllegalStateException при вызове, чтобы избежать потенциальной путаницы.
Повторное использование кода JEI
Планируется заменить больше внутренних компонентов JEI в будущих обновлениях. Однако некоторые части JEI просто не заслуживают повторной реализации по разным причинам. Тем не менее, в TMRV уже заменено достаточное количество JEI, поэтому я могу с уверенностью сказать:
- Было бы невозможно добиться тех же улучшений по сравнению с JEMI с помощью миксинов (по крайней мере, разумно), и
- Было заменено или удалено достаточное количество внутренних компонентов JEI, и я не считаю это несправедливым по отношению к JEI, особенно учитывая тот факт, что лицензия JEI явно разрешает это делать.
Лицензия
Этот проект распространяется под лицензией OSL-3.0. Для получения дополнительной информации см. ЛИЦЕНЗИЯ.
Некоторый код был скопирован с EMI и JEI] в соответствии с их лицензиями на авторские права. Все модификации, представленные в этом проекте, лицензируются по той же лицензии, что и остальная часть этого проекта, OSL-3.0.
Версии (43)
| Версия | Minecraft | Загрузчики | Файл |
|---|---|---|---|
0.9.0+mc.21.1 |
1.21.1 | neoforge | скачать |
0.9.0+mc.20.1 |
1.20.1 | forge | скачать |
0.8.1+mc.21.1 |
1.21.1 | neoforge | скачать |
0.8.1+mc.20.1 |
1.20.1 | forge | скачать |
0.8.0+mc.21.1 |
1.21.1 | neoforge | скачать |
0.8.0+mc.20.1 |
1.20.1 | forge | скачать |
0.7.3+mc.21.1 |
1.21.1 | neoforge | скачать |
0.7.3+mc.20.1 |
1.20.1 | forge | скачать |
0.7.2+mc.21.1 |
1.21.1 | neoforge | скачать |
0.7.2+mc.20.1 |
1.20.1 | forge | скачать |
0.7.1+mc.21.1 |
1.21.1 | neoforge | скачать |
0.7.1+mc.20.1 |
1.20.1 | forge | скачать |
0.7.0+mc.21.1 |
1.21.1 | neoforge | скачать |
0.7.0+mc.20.1 |
1.20.1 | forge | скачать |
0.6.4+mc.21.1 |
1.21.1 | neoforge | скачать |
0.6.4+mc.20.1 |
1.20.1 | forge | скачать |
0.6.3+mc.21.1 |
1.21.1 | neoforge | скачать |
0.6.3+mc.20.1 |
1.20.1 | forge | скачать |
0.6.2+mc.21.1 |
1.21.1 | neoforge | скачать |
0.6.2+mc.20.1 |
1.20.1 | forge | скачать |
0.6.1+mc.21.1 |
1.21.1 | neoforge | скачать |
0.6.1+mc.20.1 |
1.20.1 | forge | скачать |
0.6.0+mc.21.1 |
1.21.1 | neoforge | скачать |
0.6.0+mc.20.1 |
1.20.1 | forge | скачать |
0.5.1+mc.21.1 |
1.21.1 | neoforge | скачать |
0.5.1+mc.20.1 |
1.20.1 | forge | скачать |
0.5.0+mc.21.1 |
1.21.1 | neoforge | скачать |
0.5.0+mc.20.1 |
1.20.1 | forge | скачать |
0.4.2+mc.21.1 |
1.21.1 | neoforge | скачать |
0.4.2+mc.20.1 |
1.20.1 | forge | скачать |
0.4.1+mc.21.1 |
1.21.1 | neoforge | скачать |
0.4.1+mc.20.1 |
1.20.1 | forge | скачать |
0.4.0+mc.21.1 |
1.21.1 | neoforge | скачать |
0.4.0+mc.20.1 |
1.20.1 | forge | скачать |
0.3.3 |
1.21.1 | neoforge | скачать |
0.3.2 |
1.21.1 | neoforge | скачать |
0.3.1 |
1.21.1 | neoforge | скачать |
0.3.0 |
1.21.1 | neoforge | скачать |
0.2.3 |
1.21.1 | neoforge | скачать |
0.2.2 |
1.21.1 | neoforge | скачать |
0.2.1 |
1.21.1 | neoforge | скачать |
0.2.0 |
1.21.1 | neoforge | скачать |
0.1.0 |
1.21.1 | neoforge | скачать |