Skip to content

Commit

Permalink
changelog
Browse files Browse the repository at this point in the history
  • Loading branch information
isXander committed Sep 24, 2023
1 parent 554646d commit 1924786
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 1 deletion.
89 changes: 89 additions & 0 deletions changelogs/3.2.0+1.20.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# 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`](https://github.com/isXander/YetAnotherConfigLib/blob/1.20.x/dev/test-common/src/main/java/dev/isxander/yacl3/test/AutogenConfigTest.java) (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](https://github.com/isXander/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.
1 change: 1 addition & 0 deletions fabric/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ if (hasProperty("curseforge.token") && curseforgeId.isNotEmpty()) {
addGameVersion("1.20")
addGameVersion("1.20.1")
addGameVersion("Fabric")
addGameVersion("Quilt")
addGameVersion("Java 17")

changelog = changelogText
Expand Down
3 changes: 2 additions & 1 deletion forge/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ if (modrinthId.isNotEmpty()) {
versionType.set(if (isBeta) "beta" else "release")
uploadFile.set(tasks["remapJar"])
gameVersions.set(listOf("1.20", "1.20.1"))
loaders.set(listOf("forge"))
loaders.set(listOf("forge", "neoforge"))
changelog.set(changelogText)
syncBodyFrom.set(rootProject.file("README.md").readText())
}
Expand All @@ -168,6 +168,7 @@ if (hasProperty("curseforge.token") && curseforgeId.isNotEmpty()) {
addGameVersion("1.20")
addGameVersion("1.20.1")
addGameVersion("Forge")
addGameVersion("NeoForge")
addGameVersion("Java 17")

changelog = changelogText
Expand Down

0 comments on commit 1924786

Please sign in to comment.