promotional bannermobile promotional banner

YetAnotherConfigLib

A builder-based configuration library for Minecraft.

File Details

[Fabric] 3.2.0+1.20

  • R
  • Sep 24, 2023
  • 948.24 KB
  • 51.3K
  • 1.20.1+1
  • Fabric + 1

File Name

yet-another-config-lib-fabric-3.2.0+1.20.jar

Supported Versions

  • 1.20.1
  • 1.20

Curse Maven Snippet

Fabric

modImplementation "curse.maven:yacl-667299:4767003"

Quilt

modImplementation "curse.maven:yacl-667299:4767003"
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

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?

```java 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!

```java 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.