FASTJSON2 Serializer for YACL
Сериализатор конфигов для YetAnotherConfigLib с использованием FASTJSON2
- Загрузчики
- FabricNeoForgeForgeQuilt
- Скачиваний на Modrinth
- 14,8 тыс.
- Подписчиков на Modrinth
- 3
- версий
- 88
- Обновлён
- 10 сентября 202610 сент.
- Опубликован
- в 2026
Коротко о моде
Работает и в игре, и на сервере — ставьте, где нужен
Использование
// >= 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 на сервере?
Работает и в игре, и на сервере — ставьте, где нужен