Tags
Creators
Details
3.2.0+1.20-fabric
Compatibility
Changes
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.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:1eAoo2KR:RBAUxw9P"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:1eAoo2KR:RBAUxw9P"
}

