SuperMartijn642's Config Lib: что это и зачем моддерам
Если вы увлекаетесь модами для Minecraft, рано или поздно сталкиваетесь с настройками: баланс урона, шансы дропа, радиусы и десятки других параметров. Для игрока это обычный конфиг в папке мода, для разработчика — целая рутина: хранить значения, перечитывать их между загрузками мира, не рассинхронить клиент и сервер и не заставлять людей перезапускать игру без нужды. SuperMartijn642's Config Lib как раз про то, чтобы один раз описать конфигурацию и дальше не тратить нервы на инфраструктуру вокруг неё.
Библиотека не «игровой» мод в привычном смысле: она тащится как зависимость другими проектами и делает жизнь авторам аддонов проще. Блоки, биомы и механики по-прежнему остаются на совести вашего кода, а вот рутину с конфигами она берёт на себя.
Идея в двух словах: задали один раз — получили порядок
Суть проста: вы описываете параметры через ModConfigBuilder, сохраняете на будущее Supplier для каждого значения и вызываете build(). После этого библиотека сама занимается перезагрузкой между загрузками мира, синхронизацией там, где это уместно, и генерацией отдельных веток для клиента или сервера — без ручного копания в низкоуровневых деталях Forge/Fabric-подобных пайплайнов конфигов.
Пока вы подбираете сборку с техническими модами, полезно помнить про удобные инструменты управления профилями: многие библиотеки типа Config Lib ставятся рядом с контент-модами, и если не хочется возиться с ручной подстановкой jar-файлов, этот мод можно легко установить через лаунчер foxygame.net — удобный, гибкий и современный лаунчер для Minecraft, где можно скачать моды прямо из меню и держать зависимости в одном месте без лишних кликов по папкам.
Создание конфига: от билдера к готовым значениям
Старт всегда один: новый экземпляр ModConfigBuilder(). Дальше вы добавляете поля методом define с именем и значением по умолчанию. Для целых и дробных чисел обычно указывают ещё минимум и максимум — так игрок не сможет «сломать» баланс одним опечатанным нулём, а мод получит предсказуемый диапазон.
Важный момент для разработки: define возвращает Supplier. Его и нужно сохранить — через него вы потом читаете актуальное значение из конфига, уже после перезагрузок и синхронизации. Это аккуратнее, чем таскать статические копии, которые внезапно устаревают после смены мира.
Комментарии, перезапуск игры и синхронизация
Чтобы подсказать игроку, что означает параметр, перед define зовут comment с текстом пояснения — в файле настроек это превращается в понятные подсказки, а не в «магические» имена переменных.
По умолчанию значения перечитываются при загрузке мира. Если параметр трогать нельзя без полного рестарта клиента (например, он завязан на тяжёлую инициализацию), перед определением вызывают gameRestart() — тогда значение не будет гоняться «на лету» между мирами так же свободно, как остальные.
Для конфигов уровня COMMON или SERVER синхронизация с клиентами включена по умолчанию: сервер «раздаёт» согласованные правила, и у игроков не возникает ситуации, когда локальный файл спорит с логикой мира. Если по дизайну нужно оставить вещь строго локальной, перед определением вызывают dontSync() — и это поле перестаёт уезжать по сети.
Категории и финальный build
Когда опций много, без групп в конфиге тесно. Здесь помогают push(String) и pop(): вы заходите в категорию, описываете её поля и выходите обратно. Для пояснения целой секции есть categoryComment — удобно для крупных блоков вроде «клиент», «сервер», «генерация», «баланс».
После того как все значения объявлены, обязательно вызывают build(). Без этой точки сборка остаётся черновиком: именно завершение билдера запускает «магию» автоматической перезагрузки и синхронизации, о которой говорили в начале.
Совместимость и что почитать дальше
По задумке авторов библиотека покрывает несколько поколений Minecraft с модами, включая 1.12, 1.14, 1.15 и 1.16. Перед обновлением сборки всё равно сверяйтесь с требованиями конкретных модов и загрузчика: терминология версий и цепочки зависимостей в экосистеме Forge менялись, и «либа есть» ещё не значит «подходит вашему набору блоков и механик без доп. патчей».
Если хочется увидеть всё в сборе не на сухой документации, а в живом коде, ищите пример-мод от автора — там обычно собраны типичные паттерны: комментарии, лимиты чисел, категории и разные режимы синхронизации. Сообщество SuperMartijn642 в Discord часто обсуждает будущие релизы и совместимость — полезно, если вы ведёте свой сервер с кастомной связкой аддонов.
Вывод
SuperMartijn642's Config Lib — это про аккуратную инженерную базу под капотом модов Minecraft: меньше ручного геморроя с перезагрузкой настроек, меньше рассинхрона между клиентом и сервером, понятнее структура файлов для игроков. Разработчик экономит время на инфраструктуре и может сфокусироваться на контенте — редких рудах, новых биомах, необычных механиках крафта — а игрок получает предсказуемые, снабжённые подсказками конфиги. Если вы только входите в моддинг, освоение такого слоя — хороший шаг к чистым обновлениям и стабильным релизам без «ой, мы забыли перечитать конфиг».