Create README.MD
This commit is contained in:
110
README.MD
Normal file
110
README.MD
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user