FASTJSON2 Serializer for YACL
ModA config serializer for YetAnotherConfigLib using FASTJSON2
Type
Mod
Modrinth Downloads
5,217
Modrinth ID
PM2j1xwl
Last Updated
Aug 22, 2026
Description
Useage
// >= 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
// Replace file & field names with your mod's 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")); 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
- Is this faster than using the built-in Gson serializer?
- In a word, yes. In a few more words, based on pure library performance, yes. In practice it's a bit harder to say and will likely depend on the size of the config in question. Will it make a massive difference in anything when used in a single mod? Not noticeably; if you get several using it, you may start to see something a bit more tangible.
- Why make it if it wont improve performance much?
- IDK, becuse I can? Free will and what not.
- WAST has a better score on 3/4 of the tests, why not use it?†
- Becuse I was already familiar with FastJSON and didn't need to learn anything new to make it. If I need (or want) to learn WAST one day maybe I'll make something for it then.
*Until I set up another maven †As of June 28th, 2026
Compatibility
Mod Loaders
Game Versions
Recommended Gear
AffiliateHardware and extras that pair well with this mod.
As an Amazon Associate I earn from qualifying purchases.
Similar Mods
GobBob's Animated Blocks
Doors, Trap Doors and Levers that actually move!
Lil Tater Reloaded
LTR aims to automate a number of tasks that previously would be difficult, boring, or...
TFC - Rosia
A tech addon for TFC-TNG
Tree Excavation
Easy & Efficient Tree Excavation
Create Aeronautics: Curios Compat
A compatibility mod that enables Create Aeronautics’ Linked Typewriter to be used from Curios slots.
Thaumcraft No Research
Removes the need in Thaumcraft 6 research mini-game by giving players a bunch of theory/observation knowledge levels.