Перейти к содержимому

FASTJSON2 Serializer for YACL

Сериализатор конфигов для YetAnotherConfigLib с использованием FASTJSON2

FabricNeoForgeForgeQuilt
Загрузчики
FabricNeoForgeForgeQuilt
Скачиваний на Modrinth
14,8 тыс.
Подписчиков на Modrinth
3
версий
88
Обновлён
10 сентября 202610 сент.
Опубликован
в 2026
Это библиотека — она нужна другим модам и сама ничего не добавляет в игруНужна 1 модам. Скачайте её, если этого требует другой мод.

Коротко о моде

Библиотека — нужна другим модам: её требуют 1
Работает на Fabric, NeoForge, Forge и Quilt
Для Minecraft 1.20.1, 1.21.1–26.3
Работает и в игре, и на сервере — ставьте, где нужен
Последняя версия — 1.0.8-fabric+26.1 от 10 сентября 2026
Нужен Fabric API
Где нужен
В игренеобязателенНа серверенеобязателен

Работает и в игре, и на сервере — ставьте, где нужен

Версии игры1.20.1, 1.21.1–26.3
Описание переведено автоматическиПоказать оригинал (EN)
Сериализатор для YetAnotherConfigLib, созданный с использованием FASTJSON2.

Modrinth Downloads CurseForge Downloads

FASTJSON2 Serializer for YACL (fastjson4yacl) — это библиотечный мод, позволяющий другим модам использовать FastJSON2 для (де)сериализации конфигов. Сам по себе он ничего не делает, для использования fastjson4yacl нужны другие моды.

FASTJSON2 Serializer for YACL также доступен в Evening Star Lib

Присоединяйтесь к серверу Fluxer для общения и поддержки модов

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


Добавьте как зависимость, как указано на странице версии*
// >= 1.21.11
    public static ConfigClassHandler<Config> HANDLER = ConfigClassHandler.createBuilder(Config.class)
            .id(Identifier.fromNamespaceAndPath(MOD_ID, "config"))
            .serializer(config -> FastJsonConfigSerializerBuilder.create(config)
                    .setPath(YACLPlatform.getConfigDir().resolve("modid.json"))
                    .build())
            .build();

// <= 1.21.10
    public static ConfigClassHandler<Config> HANDLER = ConfigClassHandler.createBuilder(Config.class)
            .id(ResourceLoccation.fromNamespaceAndPath(MOD_ID, "config"))
            .serializer(config -> FastJsonConfigSerializerBuilder.create(config)
                    .setPath(YACLPlatform.getConfigDir().resolve("modid.json"))
                    .build())
            .build();

JSON5


FastJSON2 не поддерживает JSON5. Если вам по какой-то причине нужен JSON5, советую продолжать использовать встроенный Gson-сериализатор YACL. Если вы мигрируете с конфига Json5 обратно на обычный Json, вот пример того, как автоматически перенести конфиги ваших пользователей, из моего мода Am I Up To Date?:

Пример
// Замените имена файлов и полей на свои

public class ConfigMigration {
    public static void migrate(){
        try {
            if (Files.exists(Path.of(YACLPlatform.getConfigDir() + "/aiutd.json5"))){
                AIUTD.LOG.info("Pre-2.5.0 config found. Migrating...!");

                String JSONContent = Files.readString(Path.of(YACLPlatform.getConfigDir() + "/aiutd.json5"));
                JSONObject oldConfig = JSON.parseObject(JSONContent, JSONReader.Feature.AllowUnQuotedFieldNames);

                Config.HANDLER.load();
                Config.menuAlert = Boolean.parseBoolean(oldConfig.getString("menuAlert"));
                Config.chatAlert = Boolean.parseBoolean(oldConfig.getString("chatAlert"));
                Config.multiLoaderBool = Boolean.parseBoolean(oldConfig.getString("multiLoaderBool"));
                Config.multiLoader = Config.LoaderEnum.valueOf(oldConfig.getString("multiLoader"));
                Config.localVersion = oldConfig.getString("localVersion");
                Config.modpackId = oldConfig.getString("versionAPI");
                Config.multiVersion = Boolean.parseBoolean(oldConfig.getString("multiVersion"));
                Config.useModpackName = Boolean.parseBoolean(oldConfig.getString("useModpackName"));
                Config.modpackName = oldConfig.getString("modpackName");
                Config.useCustomMessage = Boolean.parseBoolean(oldConfig.getString("useCustomMessage"));
                Config.customMessage = oldConfig.getString("customMessage");
                Config.linkChangelog = Boolean.parseBoolean(oldConfig.getString("linkChangelog"));
                Config.ignoreColor = Config.colorEnum.valueOf(oldConfig.getString("ignoreColor"));
                Config.messageColor = Config.colorEnum.valueOf(oldConfig.getString("messageColor"));
                Config.changelogColor = Config.colorEnum.valueOf(oldConfig.getString("changelogColor"));
                Config.HANDLER.save();
                AIUTD.LOG.info("Config migrated, please double check it for accuracy!");
                Files.deleteIfExists(Path.of(YACLPlatform.getConfigDir() + "/aiutd.json5"));
                AIUTD.LOG.info("Old config has been deleted");
            }
        } catch (IOException e) {
            AIUTD.LOG.error("Failed to migrate config! Please do so manually!", e);
        }

        try {
            if (Files.exists(Path.of(YACLPlatform.getConfigDir() + "/aiutd-enduser.json5"))){
                AIUTD.LOG.info("Pre-2.5.0 end user config found. Migrating...!");

                String JSONContent = Files.readString(Path.of(YACLPlatform.getConfigDir() + "/aiutd-enduser.json5"));
                JSONObject oldUserConfig = JSON.parseObject(JSONContent, JSONReader.Feature.AllowUnQuotedFieldNames);

                EndUserConfig.USERCONFIG.load();
                EndUserConfig.shouldIgnore = Boolean.parseBoolean(oldUserConfig.getString("shouldIgnore"));
                Config.HANDLER.save();

                AIUTD.LOG.info("End user config migrated, please double check it for accuracy!");
                Files.deleteIfExists(Path.of(YACLPlatform.getConfigDir() + "/aiutd.json5"));
                AIUTD.LOG.info("Old end user config has been deleted");
            }
        } catch (IOException e) {
            AIUTD.LOG.error("Failed to migrate end user config! Please do so manually!", e);
        }
    }
}

### FAQ

- Это быстрее, чем использовать встроенный сериализатор Gson?
  - Одним словом, [да](https://github.com/fabienrenaud/java-json-benchmark). Если чуть подробнее, то по чистой производительности библиотеки — да. На практике сказать сложнее, и скорее всего это будет зависеть от размера конфига. Даст ли это огромную разницу при использовании в одном моде? Заметно — нет; если таких модов наберётся несколько, возможно, вы начнёте замечать что-то более ощутимое.
- Зачем делать это, если производительность сильно не улучшится?
  - Не знаю, потому что могу? Свобода воли и всё такое.
- У WAST результат лучше в 3/4 тестов, почему не использовать его?†
  - Потому что я уже был знаком с FastJSON и мне не нужно было учить ничего нового, чтобы сделать это. Если однажды мне понадобится (или захочется) изучить WAST, может, тогда я что-нибудь для него и сделаю.


<sub>*Пока я не настрою ещё один maven</sub>
<br>
<sub>†По состоянию на 28 июня 2026 года</sub>

Частые вопросы

Как установить FASTJSON2 Serializer for YACL?

Установите Fabric под свою версию Minecraft, скачайте FASTJSON2 Serializer for YACL под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть FASTJSON2 Serializer for YACL?

У FASTJSON2 Serializer for YACL есть сборки для Minecraft 1.20.1, 1.21.1–26.3.

Нужен ли FASTJSON2 Serializer for YACL на сервере?

Работает и в игре, и на сервере — ставьте, где нужен

Лицензия и источник
MIT Licenseможно свободно использовать и распространять с указанием автора
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее