Ошибка мода sodium #1
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
При запуске игры зависимости не видят sodium в качестве мода
Эта ошибка появляется в некоторых случаях (нет точных и подробных данных для установки закономерностей) на новых версиях мода soidum. Она обусловлена принципом работы FML (Fancy Mod Loader, часть NeoForge) и его взаимодействием с внутренней структурой новых версий мода sodium.
В новых версиях этого мода его внутренняя структура представляет собой набор из основного мода, его зависимостей (некоторые части Forgified Fabric API), а также отдельного "локатора" для правильной и полноценной интеграции в sodium всех необходимых ему зависимостей. В идеале (как запланировано разработчиком), "локатор" мода sodium должен быть обнаружен FML при первом проходе списка модов, приоритетно запущен перед полным прочтением модов стандартным "локатором" FML, установить мод и все необходимые ему зависимости, а после вернуть управление FML для последующей загрузки модов.
Однако, иногда данный "локатор" не может быть обнаружен (или запущен) до отработки стандартного "локатора" FML (ModDiscoverer). Тогда, для обработки мода sodium будет применен стандартный алгоритм обработки, который при первом заходе в мод прочитает первый конфигурационный файл (который изначально предоставлялся для загрузчика мода, а не для самого мода), в котором мод указан как библиотека, но имеет тот же modID, что и основной мод, из-за чего пометит мод sodium как библиотеку, и на следующем этапе (обработки Jar-in-Jar зависимостей) успешно прочитает все встроенные в него зависимости (исключая основной мод, так как мод с таким modID уже существует). И на этом этапе возникает ошибка. Ведь мод, помеченный как библиотека, на этапе сортировки (выполняемом FML с помощью ModSorter) выбрасывается из списка обрабатываемых модов, что во-первых приводит к его полному отключению как мода, а во-вторых отключает доступ к нему всех модов-зависимостей, которые на него полагаются и ищут в этом списке.
На данный момент проблема решена довольно варварским способом.
Для решения данной ошибки мод sodium разбирается на различные компоненты: 4 части fabric api, основной мод и мод, отвечающий за его загрузку. Так как в рамках сборки уже есть моды, которые подтягивают вместе с собой в зависимостях fabric api (к примеру, iris и mafglib), 4 части fabric api мода soidum выбрасываются и дальше не используются (что, по факту, может привести к некоторым проблемам, ведь версия, необходимая моду sodium, и версия, подтягиваемая из других модов, может быть разной). Далее основной мод sodium устанавливается как отдельный независимый мод, а мод-загрузчик слегка переделывается (меняется название в конфиге, а также полностью убираются все Jar-in-Jar зависимости) и тоже устанавливается как отдельный независимый мод. Таким образом, мод sodium даже с использованием стандартной обработки модов устанавливается как мод (а не как библиотека) и продолжает работать.
Конечно, данное решение не идеально. Оно может привести к различным непредвиденным и неожиданным ошибкам. Поэтому данное решение лишь временное. Таким образом, данное issue все также остается открыто, и будет закрыто только если либо найдется более безопасное и надежное решение, либо проблема будет решена независимо на уровне мода (то есть командой разработчиков мода sodium) или на уровне загрузчика (то есть в данном случае FML).