Create README.MD

This commit is contained in:
2025-11-07 14:02:15 +01:00
parent 44f03857d2
commit 2e171030a1

110
README.MD Normal file
View File

@@ -0,0 +1,110 @@
DumbassConfigLib is a config library that is used for my mods. If you're a mod developer you can easily implement this library yourself.
# Java API
To start using the library first include it in your `build.gradle`:
```groovy
repositories {
...
maven {
name = "KaseToatz"
url = "https://maven.kasetoatz.com/"
}
}
dependencies {
modCompileOnly "com.kasetoatz:dumbassconfiglib:${project.dacl_version}"
}
```
Then add dacl_version to your `gradle.properties`, you can check the version on the [versions page](https://modrinth.com/mod/dacl/versions).
If you do not want to include this library in your mods folder, replace `modCompileOnly` with `modImplementation`, it is then included inside your mod.
## Creating options
Start by creating a new Config class, you can then add your options as public static classes to this class to access them later. You can create options like so:
```java
public static final BoolOption TEST_BOOL_OPT = new BoolOption("Test boolean option", "test_bool_opt", false);
public static final IntOption TEST_INT_OPT = new IntOption("Test integer option", "test_int_opt", 1);
public static final FloatOption TEST_FLOAT_OPT = new FloatOption("Test float option", "test_float_opt", 1.F);
```
The first parameter is the text displayed in the config UI, the second parameter is the unique identifier of the option and the third parameter is the default value.
## Validators
For options with an input field you can add a fourth parameter with an `AbstractValidator` to add restrictions to the option's value. To create an integer option that must be between 1 and 100 we can do that like this:
```java
public static final IntOption CLAMPED_INT_OPT = new IntOption("Clamped integer option", "clamp_int_opt", 50, new RangeValidator<>(1, 100));
```
You can also pass null to either the lower or higher bound in `RangeValidator` to remove that restriction.
## Building the config
When you're finished creating your options it's time to actually build your config. You can do this using the static `builder` method of `DumbassConfig` like so:
```java
public static final DumbassConfig CONFIG = DumbassConfig.builder(Text.literal("Test Screen Title"), "filename.json")
.withOption(TEST_BOOL_OPT)
.withOption(TEST_INT_OPT)
.withOption(TEST_FLOAT_OPT)
.build()
```
After building the config, the respective `AbstractOption`'s values are changed when the config is modified, so you can always access them by doing:
```java
bool enabled = TEST_BOOL_OPT.getValue();
```
## Sub options
You can also add sub options that are basically an entirely new screen with it's own options. To create this we can use the `builder` method of the `SubOption` class. We will use CLAMPED_INT_OPT as one of the sub options.
```java
public static final SubOption TEST_SUB_OPT = SubOption.builder("Sub Screen Title", "sub_opt")
.withOption(CLAMPED_INT_OPT)
.build();
```
We can now add this option to the config builder aswell. We can nest these sub options however deep we want.
## Modmenu support
To add our newly created config screen to `modmenu`, we must first add it as a dependency to our mod, you can read how to do so [here](https://modrinth.com/mod/modmenu).
Now we can modify our `fabric.mod.json` to set our class as a `modmenu` entrypoint:
```json
"entrypoints": {
"client": ...,
"server": ...,
"modmenu": [
"com.kasetoatz.mymod.MyConfig"
]
}
```
We can then implement `ModMenuApi` into our class and override `getModConfigScreenFactory` to return our config UI.
```java
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory()
{
return CONFIG::getUI;
}
```
## Example
```java
public class MyConfig implements ModMenuApi
{
public static final BoolOption TEST_BOOL_OPT = new BoolOption("Test boolean option", "test_bool_opt", false);
public static final IntOption TEST_INT_OPT = new IntOption("Test integer option", "test_int_opt", 1);
public static final FloatOption TEST_FLOAT_OPT = new FloatOption("Test float option", "test_float_opt", 1.F);
public static final IntOption CLAMPED_INT_OPT = new IntOption("Clamped integer option", "clamp_int_opt", 50, new RangeValidator<>(1, 100));
public static final SubOption TEST_SUB_OPT = SubOption.builder("Sub Screen Title", "sub_opt")
.withOption(CLAMPED_INT_OPT)
.build();
public static final DumbassConfig CONFIG = DumbassConfig.builder(Text.literal("Test Screen Title"), "filename.json")
.withOption(TEST_BOOL_OPT)
.withOption(TEST_INT_OPT)
.withOption(TEST_FLOAT_OPT)
.withOption(TEST_SUB_OPT)
.build()
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory()
{
return CONFIG::getUI;
}
}
```