generated from isXander/FabricModTemplate
-
-
Notifications
You must be signed in to change notification settings - Fork 44
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
92 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters