nineMinecraft is a joke site.
nineMinecraft is in no way affiliated with Modrinth or 9minecraft. (And frankly, who wants to be affiliated with the latter?)

3.2.0+1.20 (Fabric)

Changelog

YetAnotherConfigLib 3.2 for 1.20.1 & 1.20.0

The artifact for this release is dev.isxander.yacl:yet-another-config-lib-fabric:3.2.0+1.20 (assuming Fabric)

Config API V2

Starting this update, the previous config api is now deprecated.

The new API is much more modular, and is now fully API-safe.

What does it look like?

public class MyConfig {
    public static final ConfigClassHandler<MyConfig> HANDLER = ConfigClassHandler.createBuilder(MyConfig.class)
            .id(new ResourceLocation("my_mod", "my_config")) // unique ID for your config
            .serializer(config -> GsonConfigSerializerBuilder.create(config)
                    .setPath(FabricLoader.getInstance().getConfigDir().resolve("my_config.json"))
                    .setJson5(true) // json5 support, with GSON!
                    .build()) 
            .build();
    
    @SerialEntry(comment = "optional comment!")
    public boolean myOption = true;
    
    public static void save() {
        MyConfig.HANDLER.serializer().save();
    }
    
    public static void load() {
        MyConfig.HANDLER.serializer().load();
    }
}

As you can see from the above example, it's syntactically quite similar to the old API, but with a few key differences:

  • The method of serialization has been separated from the class handler itself, allowing an API safe implementation without needing to override the class handler.
  • Supports abstract serialization.
  • Names make a lot more sense.

Auto-gen

The new API can now fully auto-generate your config into a YACL GUI with annotations. I have been very wary of this feature, since usually it can be very limiting, destroying most of the core values of the powerful YACL builder interface. However, I believe I've found a great modular way so that developers can extend the auto-gen feature with their own custom annotations, adding support for their own custom controllers!

public class MyConfig {
    public static final ConfigClassHandler<MyConfig> HANDLER = ConfigClassHandler.createBuilder(MyConfig.class)
            .id(new ResourceLocation("my_mod", "my_config")) // unique ID for your config
            .serializer(config -> GsonConfigSerializerBuilder.create(config)
                    .setPath(FabricLoader.getInstance().getConfigDir().resolve("my_config.json"))
                    .setJson5(true) // json5 support, with GSON!
                    .build()) 
            .build();
    
    @AutoGen(category = "my_category", group = "my_group")
    @Boolean(formatter = Boolean.Formatter.YES_NO, colored = true)
    public boolean myOption = true;
    
    public static Screen createScreen(Screen parent) {
        return MyConfig.HANDLER.generateGui().generateScreen(parent);
    }
}

Above is an example of auto-generating a BooleanController. Notice how the field does not require @SerialEntry. These are completely separate, and you can use both at the same time.

For the full range of auto-gen annotations, check the source!

Documentation for the new API is still a work in progress. For now, it's best to look at the following class: dev.isxander.yacl3.test.AutogenConfigTest (not available on the artifact).

Fix Sodium crash

This is bringing the off-branch hotfix 3.1.1 to the main branch.

Dropdown controllers

Crendgrim has PRed a dropdown controller! Which is in this release!

This adds two new controller builders, DropdownStringControllerBuilder and ItemControllerBuilder. The latter renders the item in the dropdown, and suggests only the items.

Files

yet-another-config-lib-fabric-3.2.0+1.20.jar(948.24 KiB) Primary Download

External resources


Project members

isxander

Owner


Technical information

License
LGPL-3.0-or-later
Client side
optional
Server side
optional
Project ID