chore: clean up config modules
This commit is contained in:
parent
f03f1c306d
commit
09466ce897
|
@ -20,8 +20,8 @@ repositories {
|
||||||
and include LibJF modules like this:
|
and include LibJF modules like this:
|
||||||
```groovy
|
```groovy
|
||||||
dependencies {
|
dependencies {
|
||||||
include modImplementation("io.gitlab.jfronny.libjf:libjf-config-core-v1:${project.libjf_version}")
|
include modImplementation("io.gitlab.jfronny.libjf:libjf-config-core-v2:${project.libjf_version}")
|
||||||
include modRuntimeOnly("io.gitlab.jfronny.libjf:libjf-config-ui-tiny-v1:${project.libjf_version}")
|
include modRuntimeOnly("io.gitlab.jfronny.libjf:libjf-config-ui-tiny:${project.libjf_version}")
|
||||||
include("io.gitlab.jfronny.libjf:libjf-base:${project.libjf_version}")
|
include("io.gitlab.jfronny.libjf:libjf-base:${project.libjf_version}")
|
||||||
|
|
||||||
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-config-reflect-v1:${project.libjf_version}")
|
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-config-reflect-v1:${project.libjf_version}")
|
||||||
|
|
|
@ -6,11 +6,10 @@
|
||||||
|
|
||||||
- [libjf-base](./libjf-base.md)
|
- [libjf-base](./libjf-base.md)
|
||||||
- [Config](./config/README.md)
|
- [Config](./config/README.md)
|
||||||
- [libjf-config-core-v1](./config/libjf-config-core-v1.md)
|
- [libjf-config-core-v2](./config/libjf-config-core-v2.md)
|
||||||
- [libjf-config-reflect-v1](./config/libjf-config-reflect-v1.md)
|
- [libjf-config-compiler-plugin-v2](./config/libjf-config-compiler-plugin-v2.md)
|
||||||
- [libjf-config-compiler-plugin](./config/libjf-config-compiler-plugin.md)
|
- [libjf-config-commands](./config/libjf-config-commands.md)
|
||||||
- [libjf-config-commands-v1](./config/libjf-config-commands-v1.md)
|
- [libjf-config-ui-tiny](./config/libjf-config-ui-tiny.md)
|
||||||
- [libjf-config-ui-tiny-v1](./config/libjf-config-ui-tiny-v1.md)
|
|
||||||
- [libjf-devutil](./libjf-devutil.md)
|
- [libjf-devutil](./libjf-devutil.md)
|
||||||
- [libjf-data-v0](./libjf-data-v0.md)
|
- [libjf-data-v0](./libjf-data-v0.md)
|
||||||
- [libjf-data-manipulation-v0](./libjf-data-manipulation-v0.md)
|
- [libjf-data-manipulation-v0](./libjf-data-manipulation-v0.md)
|
||||||
|
|
|
@ -11,8 +11,8 @@ repositories {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
include modImplementation("io.gitlab.jfronny.libjf:libjf-config-core-v1:${project.libjf_version}")
|
include modImplementation("io.gitlab.jfronny.libjf:libjf-config-core-v2:${project.libjf_version}")
|
||||||
include modRuntimeOnly("io.gitlab.jfronny.libjf:libjf-config-ui-tiny-v1:${project.libjf_version}")
|
include modRuntimeOnly("io.gitlab.jfronny.libjf:libjf-config-ui-tiny:${project.libjf_version}")
|
||||||
include("io.gitlab.jfronny.libjf:libjf-base:${project.libjf_version}")
|
include("io.gitlab.jfronny.libjf:libjf-base:${project.libjf_version}")
|
||||||
|
|
||||||
annotationProcessor("io.gitlab.jfronny.libjf:libjf-config-compiler-plugin-v2:${project.libjf_version}")
|
annotationProcessor("io.gitlab.jfronny.libjf:libjf-config-compiler-plugin-v2:${project.libjf_version}")
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# libjf-config-commands-v1
|
# libjf-config-commands
|
||||||
This serverside module provides commands for modifying configs using this library.
|
This serverside module provides commands for modifying configs using this library.
|
||||||
If you are developing a serverside mod, you may wish to include it to enable easier configuration.
|
If you are developing a serverside mod, you may wish to include it to enable easier configuration.
|
||||||
The commands are available under `/libjf config`, using auto-complete is recommended.
|
The commands are available under `/libjf config`, using auto-complete is recommended.
|
|
@ -1,4 +1,4 @@
|
||||||
# libjf-config-core-v1
|
# libjf-config-core-v2
|
||||||
The core module contains the abstractions and annotations used by other modules to interact with configs.
|
The core module contains the abstractions and annotations used by other modules to interact with configs.
|
||||||
It also contains the code for registering configs to mods, serialization and automatic reloads on change.
|
It also contains the code for registering configs to mods, serialization and automatic reloads on change.
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
# libjf-config-reflect-v1
|
|
||||||
This module uses reflection to register configs from files using the annotations as presented [here](./libjf-config-core-v1.md)
|
|
||||||
In order to register a config, simply add the class annotated as `@JfConfig` to the `libjf:config` entrypoint.
|
|
||||||
Please be aware that this module may load your config class before the game classes are available.
|
|
||||||
Using them there WILL result in problems!
|
|
||||||
|
|
||||||
Instead of using this implementation, you should use the [compiler plugin](./libjf-config-compiler-plugin-v2.md),
|
|
||||||
which removes the runtime overhead of this implementation.
|
|
|
@ -1,4 +0,0 @@
|
||||||
# libjf-config-ui-tiny-v1
|
|
||||||
This module provides an automatically registered, TinyConfig-based UI for all mods using libjf-config.
|
|
||||||
Embedding this is recommended when developing client-side mods.
|
|
||||||
Manually generating config screens is also possible through `ConfigScreen.create(config, parent)`
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
# libjf-config-ui-tiny
|
||||||
|
This module provides an automatically registered, TinyConfig-based UI for all mods using libjf-config.
|
||||||
|
Embedding this is recommended when developing client-side mods.
|
||||||
|
libjf-config-ui-tiny implements the config-core-provided `ConfigScreenFactory`, so you can `ConfigScreenFactory.getInstance().create(config, parent).get()` to obtain a screen for your config.
|
|
@ -1,7 +1,7 @@
|
||||||
# libjf-web-v0
|
# libjf-web-v0
|
||||||
libjf-web-v0 provides an HTTP web server you can use in your serverside (and technically also clientside) mods
|
libjf-web-v0 provides an HTTP web server you can use in your serverside (and technically also clientside) mods
|
||||||
to serve web content through a unified port.
|
to serve web content through a unified port.
|
||||||
libjf-web-v0 depends on libjf-config-v1 to provide its config, libjf-base, fabric-lifecycle-events-v1 and fabric-command-api-v1
|
libjf-web-v0 depends on libjf-config-core-v2 to provide its config, libjf-base, fabric-lifecycle-events-v1 and fabric-command-api-v1
|
||||||
|
|
||||||
### Getting started
|
### Getting started
|
||||||
Implement WebInit and register it as a libjf:web entrypoint. To enable the server, also add the following to your fabric.mod.json:
|
Implement WebInit and register it as a libjf:web entrypoint. To enable the server, also add the following to your fabric.mod.json:
|
||||||
|
|
|
@ -5,12 +5,12 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
base {
|
base {
|
||||||
archivesName.set("libjf-config-commands-v1")
|
archivesName.set("libjf-config-commands")
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
val fabricVersion: String by rootProject.extra
|
val fabricVersion: String by rootProject.extra
|
||||||
api(devProject(":libjf-base"))
|
api(devProject(":libjf-base"))
|
||||||
api(devProject(":libjf-config-core-v1"))
|
api(devProject(":libjf-config-core-v2"))
|
||||||
include(modImplementation(fabricApi.module("fabric-command-api-v2", fabricVersion))!!)
|
include(modImplementation(fabricApi.module("fabric-command-api-v2", fabricVersion))!!)
|
||||||
}
|
}
|
|
@ -8,11 +8,12 @@ import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
|
||||||
import io.gitlab.jfronny.commons.throwable.ThrowingRunnable;
|
import io.gitlab.jfronny.commons.throwable.ThrowingRunnable;
|
||||||
import io.gitlab.jfronny.commons.throwable.ThrowingSupplier;
|
import io.gitlab.jfronny.commons.throwable.ThrowingSupplier;
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
import io.gitlab.jfronny.libjf.config.api.v2.*;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.type.Type;
|
import io.gitlab.jfronny.libjf.config.api.v2.type.Type;
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
|
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
|
||||||
import net.minecraft.server.command.ServerCommandSource;
|
import net.minecraft.server.command.ServerCommandSource;
|
||||||
|
import net.minecraft.text.MutableText;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
@ -22,6 +23,12 @@ import static net.minecraft.server.command.CommandManager.argument;
|
||||||
import static net.minecraft.server.command.CommandManager.literal;
|
import static net.minecraft.server.command.CommandManager.literal;
|
||||||
|
|
||||||
public class JfConfigCommand implements ModInitializer {
|
public class JfConfigCommand implements ModInitializer {
|
||||||
|
private static final String MOD_ID = "libjf-config-commands";
|
||||||
|
|
||||||
|
private MutableText text(String text) {
|
||||||
|
return Text.literal("[" + MOD_ID + "] " + text);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize() {
|
public void onInitialize() {
|
||||||
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
|
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
|
||||||
|
@ -29,25 +36,24 @@ public class JfConfigCommand implements ModInitializer {
|
||||||
LiteralArgumentBuilder<ServerCommandSource> c_config = literal("config")
|
LiteralArgumentBuilder<ServerCommandSource> c_config = literal("config")
|
||||||
.requires((serverCommandSource) -> serverCommandSource.hasPermissionLevel(4))
|
.requires((serverCommandSource) -> serverCommandSource.hasPermissionLevel(4))
|
||||||
.executes(context -> {
|
.executes(context -> {
|
||||||
context.getSource().sendFeedback(() -> Text.literal("[libjf-config-v1] Loaded configs for:"), false);
|
MutableText text = text("Loaded configs for:");
|
||||||
ConfigHolder.getInstance().getRegistered().forEach((s, config) -> {
|
ConfigHolder.getInstance().getRegistered().forEach((s, config) -> text.append("\n- " + s));
|
||||||
context.getSource().sendFeedback(() -> Text.literal("- " + s), false);
|
context.getSource().sendFeedback(() -> text, false);
|
||||||
});
|
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
});
|
});
|
||||||
LiteralArgumentBuilder<ServerCommandSource> c_reload = literal("reload").executes(context -> {
|
LiteralArgumentBuilder<ServerCommandSource> c_reload = literal("reload").executes(context -> {
|
||||||
ConfigHolder.getInstance().getRegistered().forEach((mod, config) -> config.load());
|
ConfigHolder.getInstance().getRegistered().forEach((mod, config) -> config.load());
|
||||||
context.getSource().sendFeedback(() -> Text.literal("[libjf-config-v1] Reloaded configs"), true);
|
context.getSource().sendFeedback(() -> text("Reloaded configs"), true);
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
});
|
});
|
||||||
LiteralArgumentBuilder<ServerCommandSource> c_reset = literal("reset").executes(context -> {
|
LiteralArgumentBuilder<ServerCommandSource> c_reset = literal("reset").executes(context -> {
|
||||||
context.getSource().sendError(Text.literal("[libjf-config-v1] Please specify a config to reset"));
|
context.getSource().sendError(text("Please specify a config to reset"));
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
});
|
});
|
||||||
ConfigHolder.getInstance().getRegistered().forEach((id, config) -> {
|
ConfigHolder.getInstance().getRegistered().forEach((id, config) -> {
|
||||||
c_reload.then(literal(id).executes(context -> {
|
c_reload.then(literal(id).executes(context -> {
|
||||||
config.load();
|
config.load();
|
||||||
context.getSource().sendFeedback(() -> Text.literal("[libjf-config-v1] Reloaded config for " + id), true);
|
context.getSource().sendFeedback(() -> text("Reloaded config for " + id), true);
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
}));
|
}));
|
||||||
registerEntries(config, id, c_config, c_reset, cns -> {
|
registerEntries(config, id, c_config, c_reset, cns -> {
|
||||||
|
@ -63,7 +69,7 @@ public class JfConfigCommand implements ModInitializer {
|
||||||
private void registerEntries(ConfigCategory config, String subpath, LiteralArgumentBuilder<ServerCommandSource> c_config, LiteralArgumentBuilder<ServerCommandSource> c_reset, Function<Consumer<LiteralArgumentBuilder<ServerCommandSource>>, LiteralArgumentBuilder<ServerCommandSource>> pathGen) {
|
private void registerEntries(ConfigCategory config, String subpath, LiteralArgumentBuilder<ServerCommandSource> c_config, LiteralArgumentBuilder<ServerCommandSource> c_reset, Function<Consumer<LiteralArgumentBuilder<ServerCommandSource>>, LiteralArgumentBuilder<ServerCommandSource>> pathGen) {
|
||||||
c_config.then(pathGen.apply(cns -> {
|
c_config.then(pathGen.apply(cns -> {
|
||||||
cns.executes(context -> {
|
cns.executes(context -> {
|
||||||
context.getSource().sendFeedback(() -> Text.literal("[libjf-config-v1] " + subpath + " is a category"), false);
|
context.getSource().sendFeedback(() -> text(subpath + " is a category"), false);
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
});
|
});
|
||||||
for (EntryInfo<?> entry : config.getEntries()) {
|
for (EntryInfo<?> entry : config.getEntries()) {
|
||||||
|
@ -73,13 +79,13 @@ public class JfConfigCommand implements ModInitializer {
|
||||||
c_reset.then(pathGen.apply(cns -> {
|
c_reset.then(pathGen.apply(cns -> {
|
||||||
cns.executes(context -> {
|
cns.executes(context -> {
|
||||||
config.reset();
|
config.reset();
|
||||||
context.getSource().sendFeedback(() -> Text.literal("[libjf-config-v1] Reset config for " + subpath), true);
|
context.getSource().sendFeedback(() -> text("Reset config for " + subpath), true);
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
});
|
});
|
||||||
config.getPresets().forEach((id2, preset) -> {
|
config.getPresets().forEach((id2, preset) -> {
|
||||||
cns.then(literal(id2).executes(context -> {
|
cns.then(literal(id2).executes(context -> {
|
||||||
preset.run();
|
preset.run();
|
||||||
context.getSource().sendFeedback(() -> Text.literal("[libjf-config-v1] Loaded preset " + id2 + " for " + subpath), true);
|
context.getSource().sendFeedback(() -> text("Loaded preset " + id2 + " for " + subpath), true);
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
@ -103,8 +109,8 @@ public class JfConfigCommand implements ModInitializer {
|
||||||
|
|
||||||
private <T> void registerEntry(ConfigCategory config, String subpath, LiteralArgumentBuilder<ServerCommandSource> cns, EntryInfo<T> entry) {
|
private <T> void registerEntry(ConfigCategory config, String subpath, LiteralArgumentBuilder<ServerCommandSource> cns, EntryInfo<T> entry) {
|
||||||
LiteralArgumentBuilder<ServerCommandSource> c_entry = literal(entry.getName()).executes(context -> {
|
LiteralArgumentBuilder<ServerCommandSource> c_entry = literal(entry.getName()).executes(context -> {
|
||||||
String msg = "[libjf-config-v1] The value of " + subpath + "." + entry.getName() + " is " + tryRun(entry::getValue);
|
String msg = "The value of " + subpath + "." + entry.getName() + " is " + tryRun(entry::getValue);
|
||||||
context.getSource().sendFeedback(() -> Text.literal(msg), false);
|
context.getSource().sendFeedback(() -> text(msg), false);
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
});
|
});
|
||||||
ArgumentType<?> type = getType(entry);
|
ArgumentType<?> type = getType(entry);
|
||||||
|
@ -115,7 +121,7 @@ public class JfConfigCommand implements ModInitializer {
|
||||||
entry.setValue(value);
|
entry.setValue(value);
|
||||||
config.getRoot().write();
|
config.getRoot().write();
|
||||||
});
|
});
|
||||||
context.getSource().sendFeedback(() -> Text.literal("[libjf-config-v1] Set " + subpath + "." + entry.getName() + " to " + value), true);
|
context.getSource().sendFeedback(() -> text("Set " + subpath + "." + entry.getName() + " to " + value), true);
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@ -126,7 +132,7 @@ public class JfConfigCommand implements ModInitializer {
|
||||||
entry.setValue(enumConstant);
|
entry.setValue(enumConstant);
|
||||||
config.getRoot().write();
|
config.getRoot().write();
|
||||||
});
|
});
|
||||||
context.getSource().sendFeedback(() -> Text.literal("[libjf-config-v1] Set " + subpath + "." + entry.getName() + " to " + enumConstant), true);
|
context.getSource().sendFeedback(() -> text("Set " + subpath + "." + entry.getName() + " to " + enumConstant), true);
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
}));
|
}));
|
||||||
}
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"id": "libjf-config-commands-v1",
|
"id": "libjf-config-commands",
|
||||||
"name": "LibJF Config Commands",
|
"name": "LibJF Config Commands",
|
||||||
"version": "${version}",
|
"version": "${version}",
|
||||||
"authors": ["JFronny"],
|
"authors": ["JFronny"],
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
"minecraft": "*",
|
"minecraft": "*",
|
||||||
"fabric-command-api-v2": "*",
|
"fabric-command-api-v2": "*",
|
||||||
"libjf-base": ">=${version}",
|
"libjf-base": ">=${version}",
|
||||||
"libjf-config-core-v1": ">=${version}"
|
"libjf-config-core-v2": ">=${version}"
|
||||||
},
|
},
|
||||||
"custom": {
|
"custom": {
|
||||||
"modmenu": {
|
"modmenu": {
|
|
@ -22,7 +22,7 @@ dependencies {
|
||||||
val annotationsVersion: String by rootProject.extra
|
val annotationsVersion: String by rootProject.extra
|
||||||
val javapoetVersion: String by rootProject.extra
|
val javapoetVersion: String by rootProject.extra
|
||||||
implementation("io.gitlab.jfronny.gson:gson-compile-processor-core:$gsonCompileVersion")
|
implementation("io.gitlab.jfronny.gson:gson-compile-processor-core:$gsonCompileVersion")
|
||||||
implementation(devProject(":libjf-config-core-v1"))
|
implementation(devProject(":libjf-config-core-v2"))
|
||||||
implementation("org.jetbrains:annotations:$annotationsVersion")
|
implementation("org.jetbrains:annotations:$annotationsVersion")
|
||||||
implementation("io.gitlab.jfronny:commons:$commonsVersion")
|
implementation("io.gitlab.jfronny:commons:$commonsVersion")
|
||||||
implementation("io.gitlab.jfronny:commons-gson:$commonsVersion")
|
implementation("io.gitlab.jfronny:commons-gson:$commonsVersion")
|
||||||
|
|
|
@ -4,9 +4,9 @@ import com.squareup.javapoet.*;
|
||||||
import io.gitlab.jfronny.commons.StringFormatter;
|
import io.gitlab.jfronny.commons.StringFormatter;
|
||||||
import io.gitlab.jfronny.gson.compile.processor.core.*;
|
import io.gitlab.jfronny.gson.compile.processor.core.*;
|
||||||
import io.gitlab.jfronny.gson.reflect.TypeToken;
|
import io.gitlab.jfronny.gson.reflect.TypeToken;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
import io.gitlab.jfronny.libjf.config.api.v2.*;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.DSL;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.DSL;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.type.Type;
|
import io.gitlab.jfronny.libjf.config.api.v2.type.Type;
|
||||||
|
|
||||||
import javax.annotation.processing.*;
|
import javax.annotation.processing.*;
|
||||||
import javax.lang.model.SourceVersion;
|
import javax.lang.model.SourceVersion;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package io.gitlab.jfronny.libjf.config.plugin.test;
|
package io.gitlab.jfronny.libjf.config.plugin.test;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
import io.gitlab.jfronny.libjf.config.api.v2.*;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"libjf-config-core-v1.jfconfig.title": "LibJF Config",
|
|
||||||
"libjf-config-core-v1.jfconfig.watchForChanges": "Watch for changes",
|
|
||||||
"libjf-config-core-v1.jfconfig.watchForChanges.tooltip": "Automatically reload configs when they are changed",
|
|
||||||
"libjf-config-v1.presets": "Presets",
|
|
||||||
"libjf-config-v1.default": "Default",
|
|
||||||
"libjf-config-v1.see-also": "See also: %s",
|
|
||||||
"libjf-config-v1.reset": "Reset",
|
|
||||||
"libjf-config-core-v1.no-screen": "No screen",
|
|
||||||
"libjf-config-core-v1.no-screen.description": "No mod for rendering config UIs was discovered. Install LibJF to add one.",
|
|
||||||
"libjf-config-core-v1.edit": "Edit"
|
|
||||||
}
|
|
|
@ -5,7 +5,7 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
base {
|
base {
|
||||||
archivesName.set("libjf-config-core-v1")
|
archivesName.set("libjf-config-core-v2")
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
|
@ -1,6 +1,6 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v2.ui;
|
package io.gitlab.jfronny.libjf.config.api.v2.ui;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.ui.ConfigScreenFactoryDiscovery;
|
import io.gitlab.jfronny.libjf.config.impl.ui.ConfigScreenFactoryDiscovery;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
|
|
@ -3,8 +3,8 @@ package io.gitlab.jfronny.libjf.config.impl.ui;
|
||||||
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
|
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
|
||||||
import com.terraformersmc.modmenu.api.ModMenuApi;
|
import com.terraformersmc.modmenu.api.ModMenuApi;
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigHolder;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigHolder;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.ConfigCore;
|
import io.gitlab.jfronny.libjf.config.impl.ConfigCore;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
|
@ -7,10 +7,10 @@ import java.util.Objects;
|
||||||
|
|
||||||
public class PlaceholderScreen extends Screen {
|
public class PlaceholderScreen extends Screen {
|
||||||
private final Screen parent;
|
private final Screen parent;
|
||||||
private final Text description = Text.translatable("libjf-config-core-v1.no-screen.description");
|
private final Text description = Text.translatable("libjf-config-core-v2.no-screen.description");
|
||||||
|
|
||||||
protected PlaceholderScreen(Screen parent) {
|
protected PlaceholderScreen(Screen parent) {
|
||||||
super(Text.translatable("libjf-config-core-v1.no-screen"));
|
super(Text.translatable("libjf-config-core-v2.no-screen"));
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
addDrawable((context, mouseX, mouseY, delta) -> {
|
addDrawable((context, mouseX, mouseY, delta) -> {
|
||||||
context.drawCenteredTextWithShadow(textRenderer, description, width / 2, (height - textRenderer.fontHeight) / 2, 0xFFFFFF);
|
context.drawCenteredTextWithShadow(textRenderer, description, width / 2, (height - textRenderer.fontHeight) / 2, 0xFFFFFF);
|
|
@ -1,6 +1,6 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl.ui;
|
package io.gitlab.jfronny.libjf.config.impl.ui;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory;
|
import io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"libjf-config-core-v2.jfconfig.title": "LibJF Config",
|
||||||
|
"libjf-config-core-v2.jfconfig.watchForChanges": "Watch for changes",
|
||||||
|
"libjf-config-core-v2.jfconfig.watchForChanges.tooltip": "Automatically reload configs when they are changed",
|
||||||
|
"libjf-config-core-v2.presets": "Presets",
|
||||||
|
"libjf-config-core-v2.default": "Default",
|
||||||
|
"libjf-config-core-v2.see-also": "See also: %s",
|
||||||
|
"libjf-config-core-v2.reset": "Reset",
|
||||||
|
"libjf-config-core-v2.no-screen": "No screen",
|
||||||
|
"libjf-config-core-v2.no-screen.description": "No mod for rendering config UIs was discovered. Install LibJF to add one.",
|
||||||
|
"libjf-config-core-v2.edit": "Edit"
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1;
|
package io.gitlab.jfronny.libjf.config.api.v2;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1;
|
package io.gitlab.jfronny.libjf.config.api.v2;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1;
|
package io.gitlab.jfronny.libjf.config.api.v2;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.ConfigHolderImpl;
|
import io.gitlab.jfronny.libjf.config.impl.ConfigHolderImpl;
|
|
@ -1,4 +1,4 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1;
|
package io.gitlab.jfronny.libjf.config.api.v2;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
|
@ -1,4 +1,4 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1;
|
package io.gitlab.jfronny.libjf.config.api.v2;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1;
|
package io.gitlab.jfronny.libjf.config.api.v2;
|
||||||
|
|
||||||
import io.gitlab.jfronny.gson.JsonElement;
|
|
||||||
import io.gitlab.jfronny.gson.JsonParseException;
|
|
||||||
import io.gitlab.jfronny.gson.stream.*;
|
import io.gitlab.jfronny.gson.stream.*;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.type.Type;
|
import io.gitlab.jfronny.libjf.config.api.v2.type.Type;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.dsl.DslEntryInfo;
|
import io.gitlab.jfronny.libjf.config.impl.dsl.DslEntryInfo;
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1;
|
package io.gitlab.jfronny.libjf.config.api.v2;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1;
|
package io.gitlab.jfronny.libjf.config.api.v2;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.DSL;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.DSL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The interface for entrypoints performing custom config registrations
|
* The interface for entrypoints performing custom config registrations
|
|
@ -1,4 +1,4 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1;
|
package io.gitlab.jfronny.libjf.config.api.v2;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1;
|
package io.gitlab.jfronny.libjf.config.api.v2;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1.dsl;
|
package io.gitlab.jfronny.libjf.config.api.v2.dsl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.SamWithReceiver;
|
import io.gitlab.jfronny.commons.SamWithReceiver;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
import io.gitlab.jfronny.libjf.config.api.v2.*;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.type.Type;
|
import io.gitlab.jfronny.libjf.config.api.v2.type.Type;
|
||||||
|
import io.gitlab.jfronny.libjf.config.impl.ConfigCore;
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -14,7 +15,7 @@ import java.util.function.Supplier;
|
||||||
* @param <Builder> The class implementing this builder
|
* @param <Builder> The class implementing this builder
|
||||||
*/
|
*/
|
||||||
public interface CategoryBuilder<Builder extends CategoryBuilder<Builder>> {
|
public interface CategoryBuilder<Builder extends CategoryBuilder<Builder>> {
|
||||||
String CONFIG_PRESET_DEFAULT = "libjf-config-v1.default";
|
String CONFIG_PRESET_DEFAULT = ConfigCore.MOD_ID + ".default";
|
||||||
|
|
||||||
Builder setTranslationPrefix(String translationPrefix);
|
Builder setTranslationPrefix(String translationPrefix);
|
||||||
String getTranslationPrefix();
|
String getTranslationPrefix();
|
|
@ -1,7 +1,7 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1.dsl;
|
package io.gitlab.jfronny.libjf.config.api.v2.dsl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.SamWithReceiver;
|
import io.gitlab.jfronny.commons.SamWithReceiver;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
|
@ -1,7 +1,7 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1.dsl;
|
package io.gitlab.jfronny.libjf.config.api.v2.dsl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigHolder;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigHolder;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.dsl.DSLImpl;
|
import io.gitlab.jfronny.libjf.config.impl.dsl.DSLImpl;
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -1,4 +1,4 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1.dsl;
|
package io.gitlab.jfronny.libjf.config.api.v2.dsl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.gson.stream.JsonReader;
|
import io.gitlab.jfronny.gson.stream.JsonReader;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1.type;
|
package io.gitlab.jfronny.libjf.config.api.v2.type;
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl;
|
package io.gitlab.jfronny.libjf.config.impl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.serialize.gson.api.v1.GsonHolders;
|
import io.gitlab.jfronny.commons.serialize.gson.api.v1.GsonHolders;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.Category;
|
import io.gitlab.jfronny.libjf.config.api.v2.Category;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.JfConfig;
|
import io.gitlab.jfronny.libjf.config.api.v2.JfConfig;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.CategoryBuilder;
|
||||||
import io.gitlab.jfronny.libjf.gson.FabricLoaderGsonGenerator;
|
import io.gitlab.jfronny.libjf.gson.FabricLoaderGsonGenerator;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.fabricmc.loader.api.metadata.CustomValue;
|
import net.fabricmc.loader.api.metadata.CustomValue;
|
|
@ -1,10 +1,10 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl;
|
package io.gitlab.jfronny.libjf.config.impl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.DSL;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.DSL;
|
||||||
|
|
||||||
public class ConfigCore {
|
public class ConfigCore {
|
||||||
public static final String MOD_ID = "libjf-config-core-v1";
|
public static final String MOD_ID = "libjf-config-core-v2";
|
||||||
public static final String MODULE_ID = "libjf:config";
|
public static final String MODULE_ID = "libjf:config";
|
||||||
public static boolean watchForChanges = true;
|
public static boolean watchForChanges = true;
|
||||||
public static final ConfigInstance CONFIG_INSTANCE;
|
public static final ConfigInstance CONFIG_INSTANCE;
|
|
@ -2,8 +2,8 @@ package io.gitlab.jfronny.libjf.config.impl;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigHolder;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigHolder;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
|
|
|
@ -3,10 +3,10 @@ package io.gitlab.jfronny.libjf.config.impl.dsl;
|
||||||
import io.gitlab.jfronny.commons.throwable.Coerce;
|
import io.gitlab.jfronny.commons.throwable.Coerce;
|
||||||
import io.gitlab.jfronny.gson.stream.JsonReader;
|
import io.gitlab.jfronny.gson.stream.JsonReader;
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
import io.gitlab.jfronny.libjf.config.api.v2.*;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.CategoryBuilder;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.Migration;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.Migration;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.type.Type;
|
import io.gitlab.jfronny.libjf.config.api.v2.type.Type;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
|
@ -1,7 +1,7 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl.dsl;
|
package io.gitlab.jfronny.libjf.config.impl.dsl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.ConfigBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.ConfigBuilder;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
|
@ -1,9 +1,9 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl.dsl;
|
package io.gitlab.jfronny.libjf.config.impl.dsl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigHolder;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigHolder;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.ConfigBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.ConfigBuilder;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.DSL;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.DSL;
|
||||||
|
|
||||||
public class DSLImpl implements DSL {
|
public class DSLImpl implements DSL {
|
||||||
@Override
|
@Override
|
|
@ -4,7 +4,7 @@ import io.gitlab.jfronny.commons.serialize.gson.api.v1.GsonHolders;
|
||||||
import io.gitlab.jfronny.gson.*;
|
import io.gitlab.jfronny.gson.*;
|
||||||
import io.gitlab.jfronny.gson.stream.*;
|
import io.gitlab.jfronny.gson.stream.*;
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
import io.gitlab.jfronny.libjf.config.api.v2.*;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe;
|
import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.watch.JfConfigWatchService;
|
import io.gitlab.jfronny.libjf.config.impl.watch.JfConfigWatchService;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl.dsl;
|
package io.gitlab.jfronny.libjf.config.impl.dsl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.gson.stream.JsonReader;
|
import io.gitlab.jfronny.gson.stream.JsonReader;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
import io.gitlab.jfronny.libjf.config.api.v2.*;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.CategoryBuilder;
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
|
@ -1,8 +1,8 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl.dsl;
|
package io.gitlab.jfronny.libjf.config.impl.dsl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.gson.stream.JsonReader;
|
import io.gitlab.jfronny.gson.stream.JsonReader;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
import io.gitlab.jfronny.libjf.config.api.v2.*;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.CategoryBuilder;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
|
@ -5,9 +5,9 @@ import io.gitlab.jfronny.commons.throwable.ThrowingConsumer;
|
||||||
import io.gitlab.jfronny.commons.throwable.ThrowingSupplier;
|
import io.gitlab.jfronny.commons.throwable.ThrowingSupplier;
|
||||||
import io.gitlab.jfronny.gson.stream.*;
|
import io.gitlab.jfronny.gson.stream.*;
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.Entry;
|
import io.gitlab.jfronny.libjf.config.api.v2.Entry;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.EntryInfo;
|
import io.gitlab.jfronny.libjf.config.api.v2.EntryInfo;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.type.Type;
|
import io.gitlab.jfronny.libjf.config.api.v2.type.Type;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe;
|
import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
|
@ -1,8 +1,8 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl.entrypoint;
|
package io.gitlab.jfronny.libjf.config.impl.entrypoint;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.JfCustomConfig;
|
import io.gitlab.jfronny.libjf.config.api.v2.JfCustomConfig;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.DSL;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.DSL;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.ConfigCore;
|
import io.gitlab.jfronny.libjf.config.impl.ConfigCore;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.fabricmc.loader.api.entrypoint.EntrypointContainer;
|
import net.fabricmc.loader.api.entrypoint.EntrypointContainer;
|
|
@ -2,7 +2,7 @@ package io.gitlab.jfronny.libjf.config.impl.watch;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.throwable.ThrowingRunnable;
|
import io.gitlab.jfronny.commons.throwable.ThrowingRunnable;
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigHolder;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigHolder;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"id": "libjf-config-core-v1",
|
"id": "libjf-config-core-v2",
|
||||||
"name": "LibJF Config",
|
"name": "LibJF Config",
|
||||||
"version": "${version}",
|
"version": "${version}",
|
||||||
"authors": ["JFronny"],
|
"authors": ["JFronny"],
|
|
@ -1,15 +0,0 @@
|
||||||
import io.gitlab.jfronny.scripts.*
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
id("jfmod.module")
|
|
||||||
}
|
|
||||||
|
|
||||||
base {
|
|
||||||
archivesName.set("libjf-config-reflect-v1")
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
api(devProject(":libjf-base"))
|
|
||||||
api(devProject(":libjf-unsafe-v0"))
|
|
||||||
api(devProject(":libjf-config-core-v1"))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package io.gitlab.jfronny.libjf.config.api.v1.reflect;
|
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.ConfigBuilder;
|
|
||||||
import io.gitlab.jfronny.libjf.config.impl.reflect.ReflectiveConfigBuilderImpl;
|
|
||||||
|
|
||||||
public interface ReflectiveConfigBuilder extends ConfigBuilder.ConfigBuilderFunction {
|
|
||||||
static ReflectiveConfigBuilder of(String id, Class<?> klazz) {
|
|
||||||
return new ReflectiveConfigBuilderImpl(id, klazz);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,84 +0,0 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl.reflect;
|
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.reflect.Reflect;
|
|
||||||
import io.gitlab.jfronny.commons.throwable.ThrowingConsumer;
|
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.ConfigBuilder;
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.reflect.ReflectiveConfigBuilder;
|
|
||||||
import io.gitlab.jfronny.libjf.config.impl.AuxiliaryMetadata;
|
|
||||||
import io.gitlab.jfronny.libjf.config.impl.dsl.DslEntryInfo;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class ReflectiveConfigBuilderImpl implements ReflectiveConfigBuilder {
|
|
||||||
private final AuxiliaryMetadata rootMeta;
|
|
||||||
private final Class<?> rootClass;
|
|
||||||
private final Class<?> rootTweaker;
|
|
||||||
private final String id;
|
|
||||||
|
|
||||||
public ReflectiveConfigBuilderImpl(String id, Class<?> klazz) {
|
|
||||||
this.id = id;
|
|
||||||
this.rootClass = Objects.requireNonNull(klazz);
|
|
||||||
JfConfig annotation = klazz.getAnnotation(JfConfig.class);
|
|
||||||
rootTweaker = annotation.tweaker();
|
|
||||||
this.rootMeta = AuxiliaryMetadata.of(annotation).merge(AuxiliaryMetadata.forMod(id));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ConfigBuilder<?> apply(ConfigBuilder<?> builder) {
|
|
||||||
return applyCategory(builder, rootClass, findTweaker(rootTweaker, ConfigBuilder.class), rootMeta);
|
|
||||||
}
|
|
||||||
|
|
||||||
private <T extends CategoryBuilder<?>> T applyCategory(T builder, Class<?> configClass, Function<T, T> tweaker, AuxiliaryMetadata meta) {
|
|
||||||
meta.applyTo(builder);
|
|
||||||
for (Field field : configClass.getFields()) {
|
|
||||||
if (field.isAnnotationPresent(Entry.class)) {
|
|
||||||
builder.value(DslEntryInfo.ofField(field));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (Method method : configClass.getMethods()) {
|
|
||||||
try {
|
|
||||||
if (method.isAnnotationPresent(Preset.class)) {
|
|
||||||
builder.addPreset(builder.getTranslationPrefix() + method.getName(), ReflectiveConfigBuilderImpl.<ConfigCategory>staticToConsumer(configClass, method).addHandler(e -> LibJf.LOGGER.error("Could not apply preset", e)));
|
|
||||||
} else if (method.isAnnotationPresent(Verifier.class)) {
|
|
||||||
builder.addVerifier(ReflectiveConfigBuilderImpl.<ConfigCategory>staticToConsumer(configClass, method).addHandler(e -> LibJf.LOGGER.error("Could not run verifier", e)));
|
|
||||||
}
|
|
||||||
} catch (Throwable t) {
|
|
||||||
LibJf.LOGGER.error("Could not process method " + method.getName() + " of config class " + configClass.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Class<?> categoryClass : configClass.getClasses()) {
|
|
||||||
if (categoryClass.isAnnotationPresent(Category.class)) {
|
|
||||||
Category annotation = categoryClass.getAnnotation(Category.class);
|
|
||||||
String name = categoryClass.getSimpleName();
|
|
||||||
name = Character.toLowerCase(name.charAt(0)) + name.substring(1); // camelCase
|
|
||||||
var categoryTweaker = findTweaker(annotation.tweaker(), CategoryBuilder.class);
|
|
||||||
builder.category(name, builder1 -> applyCategory(builder1, categoryClass, categoryTweaker, AuxiliaryMetadata.of(categoryClass.getAnnotation(Category.class))));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tweaker.apply(builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
private <T> Function<T, T> findTweaker(Class<?> targetClass, Class<T> tweakedClass) {
|
|
||||||
try {
|
|
||||||
return Objects.equals(targetClass, void.class)
|
|
||||||
? Function.identity()
|
|
||||||
: Reflect.staticFunction(targetClass, "tweak", tweakedClass, tweakedClass);
|
|
||||||
} catch (Throwable t) {
|
|
||||||
LibJf.LOGGER.error("Could not find tweaker " + targetClass + " for mod " + id, t);
|
|
||||||
return Function.identity();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T> ThrowingConsumer<T, Throwable> staticToConsumer(Class<?> klazz, Method method) throws Throwable {
|
|
||||||
Runnable rn = Reflect.staticProcedure(klazz, method.getName());
|
|
||||||
return c -> rn.run();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl.reflect.entrypoint;
|
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.DSL;
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.reflect.ReflectiveConfigBuilder;
|
|
||||||
import io.gitlab.jfronny.libjf.config.impl.ConfigCore;
|
|
||||||
import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe;
|
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
|
||||||
import net.fabricmc.loader.api.entrypoint.EntrypointContainer;
|
|
||||||
import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint;
|
|
||||||
|
|
||||||
public class JfConfigReflectSafe implements PreLaunchEntrypoint {
|
|
||||||
@Override
|
|
||||||
public void onPreLaunch() {
|
|
||||||
LibJf.setup();
|
|
||||||
for (EntrypointContainer<Object> config : FabricLoader.getInstance().getEntrypointContainers(ConfigCore.MODULE_ID, Object.class)) {
|
|
||||||
registerIfMissing(config.getProvider().getMetadata().getId(), config.getEntrypoint());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void registerIfMissing(String modId, Object config) {
|
|
||||||
if (JfConfigSafe.REGISTERED_MODS.add(modId)) {
|
|
||||||
ConfigHolder.getInstance().migrateFiles(modId);
|
|
||||||
if (config instanceof JfCustomConfig cfg) {
|
|
||||||
cfg.register(DSL.create(modId));
|
|
||||||
} else {
|
|
||||||
Class<?> klazz = config.getClass();
|
|
||||||
if (klazz.isAnnotationPresent(JfConfig.class)) {
|
|
||||||
DSL.create(modId).register(ReflectiveConfigBuilder.of(modId, klazz));
|
|
||||||
} else {
|
|
||||||
LibJf.LOGGER.error("Attempted to register improper config for mod " + modId + " (missing @JfConfig annotation or JfCustomConfig interface)");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl.reflect.entrypoint;
|
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
|
||||||
import io.gitlab.jfronny.libjf.config.impl.ConfigCore;
|
|
||||||
import io.gitlab.jfronny.libjf.unsafe.DynamicEntry;
|
|
||||||
import io.gitlab.jfronny.libjf.unsafe.UltraEarlyInit;
|
|
||||||
|
|
||||||
public class JfConfigUnsafe implements UltraEarlyInit {
|
|
||||||
@Override
|
|
||||||
public void init() {
|
|
||||||
DynamicEntry.execute(ConfigCore.MODULE_ID, Object.class,
|
|
||||||
s -> JfConfigReflectSafe.registerIfMissing(s.modId(), s.instance())
|
|
||||||
);
|
|
||||||
LibJf.LOGGER.info("Finished LibJF config entrypoint");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
{
|
|
||||||
"schemaVersion": 1,
|
|
||||||
"id": "libjf-config-reflect-v1",
|
|
||||||
"name": "LibJF Config Reflect",
|
|
||||||
"version": "${version}",
|
|
||||||
"authors": ["JFronny"],
|
|
||||||
"contact": {
|
|
||||||
"email": "projects.contact@frohnmeyer-wds.de",
|
|
||||||
"homepage": "https://jfronny.gitlab.io",
|
|
||||||
"issues": "https://git.frohnmeyer-wds.de/JfMods/LibJF/issues",
|
|
||||||
"sources": "https://git.frohnmeyer-wds.de/JfMods/LibJF"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"environment": "*",
|
|
||||||
"entrypoints": {
|
|
||||||
"libjf:preEarly": [
|
|
||||||
"io.gitlab.jfronny.libjf.config.impl.reflect.entrypoint.JfConfigUnsafe"
|
|
||||||
],
|
|
||||||
"preLaunch": [
|
|
||||||
"io.gitlab.jfronny.libjf.config.impl.reflect.entrypoint.JfConfigReflectSafe"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"depends": {
|
|
||||||
"fabricloader": ">=0.12.0",
|
|
||||||
"minecraft": "*",
|
|
||||||
"libjf-base": ">=${version}",
|
|
||||||
"libjf-unsafe-v0": ">=${version}",
|
|
||||||
"libjf-config-core-v1": ">=${version}"
|
|
||||||
},
|
|
||||||
"custom": {
|
|
||||||
"modmenu": {
|
|
||||||
"badges": ["library"],
|
|
||||||
"parent": "libjf"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
package io.gitlab.jfronny.libjf.config.test.reflect;
|
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.serialize.gson.api.v1.Ignore;
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@JfConfig(referencedConfigs = {"libjf-web-v0"}, tweaker = TestConfigTweaker.class)
|
|
||||||
public class TestConfig {
|
|
||||||
@Entry public static boolean disablePacks = false;
|
|
||||||
@Entry public static Boolean disablePacks2 = false;
|
|
||||||
@Entry public static int intTest = 20;
|
|
||||||
@Entry(min = -5, max = 12) public static int intTestB = 20;
|
|
||||||
@Entry(min = -6) public static float floatTest = -5;
|
|
||||||
@Entry(min = 2, max = 21) public static double doubleTest = 20;
|
|
||||||
@Entry public static String dieStr = "lolz";
|
|
||||||
@Entry @Ignore public static String guiOnlyStr = "lolz";
|
|
||||||
public static String gsonOnlyStr = "lolz";
|
|
||||||
@Entry public static Test enumTest = Test.Test;
|
|
||||||
@Entry public static List<String> stringList;
|
|
||||||
|
|
||||||
@Preset
|
|
||||||
public static void moskau() {
|
|
||||||
disablePacks = true;
|
|
||||||
disablePacks2 = true;
|
|
||||||
intTest = -5;
|
|
||||||
floatTest = -6;
|
|
||||||
doubleTest = 4;
|
|
||||||
dieStr = "Moskau";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Verifier
|
|
||||||
public static void setIntTestIfDisable() {
|
|
||||||
if (disablePacks) intTest = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Verifier
|
|
||||||
public static void stringListVerifier() {
|
|
||||||
if (stringList == null) stringList = new ArrayList<>(List.of("Obama"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum Test {
|
|
||||||
Test, ER
|
|
||||||
}
|
|
||||||
|
|
||||||
@Category
|
|
||||||
public static class Subcategory {
|
|
||||||
@Entry public static boolean boolInSub = false;
|
|
||||||
@Entry public static int intIbSub = 15;
|
|
||||||
|
|
||||||
@Category
|
|
||||||
public static class Inception {
|
|
||||||
@Entry public static Test yesEnum = Test.ER;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
package io.gitlab.jfronny.libjf.config.test.reflect;
|
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.ConfigBuilder;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class TestConfigTweaker {
|
|
||||||
public static ConfigBuilder<?> tweak(ConfigBuilder<?> builder) {
|
|
||||||
if (!Objects.equals("libjf-config-reflect-v1-testmod", builder.getId())) throw new IllegalStateException("No!");
|
|
||||||
LibJf.LOGGER.info("Called config tweaker");
|
|
||||||
return builder.addMigration("joe", reader -> {
|
|
||||||
TestConfig.disablePacks = reader.nextBoolean();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
{
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.title": "JfConfig example",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.disablePacks": "Disable resource packs",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.intTest": "Int Test",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.decimalTest": "Decimal Test",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.dieStr": "String Test",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.gsonOnlyStr.tooltip": "George",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.enumTest": "Enum Test",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.enumTest.tooltip": "Enum Test Tooltip",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.enum.Test.Test": "Test",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.enum.Test.ER": "ER",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.moskau": "Moskau",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.stringList": "String list",
|
|
||||||
"libjf-config-reflect-v1-testmod.jfconfig.stringList.tooltip": "Tooltip of the String list"
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
"schemaVersion": 1,
|
|
||||||
"id": "libjf-config-reflect-v1-testmod",
|
|
||||||
"name": "LibJF Config Reflect",
|
|
||||||
"version": "1.0",
|
|
||||||
"environment": "*",
|
|
||||||
"entrypoints": {
|
|
||||||
"libjf:config": [
|
|
||||||
"io.gitlab.jfronny.libjf.config.test.reflect.TestConfig"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"custom": {
|
|
||||||
"modmenu": {
|
|
||||||
"parent": "libjf-testmod"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
{
|
|
||||||
"libjf-config-ui-tiny-v1.entry.json.read.fail.title": "Could not read",
|
|
||||||
"libjf-config-ui-tiny-v1.entry.json.read.fail.description": "The given entry could not be stringified. Please edit the config manually"
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.title": "JfConfig example",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca1.title": "Category 1",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca1.tooltip": "This is category 1\nIt has an excessively long description to test multiline descriptions and wrapping, which are required for this to look good.\nThis is supported btw.",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca1.value1": "Value 1",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca2.title": "Category 2",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca2.tooltip": "This is category 2",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca2.value2": "Value 2",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca3.title": "Category 3",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca3.tooltip": "This is category 3",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca3.value3": "Value 3",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca4.title": "Category 4",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca4.tooltip": "This is category 4",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca4.value4": "Value 4",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca5.title": "Category 5",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca5.tooltip": "This is category 5",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca5.value5": "Value 5",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca6.title": "Category 6",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca6.tooltip": "This is category 6",
|
|
||||||
"libjf-config-ui-tiny-v1-testmod.jfconfig.ca6.value6": "Value 6"
|
|
||||||
}
|
|
|
@ -5,12 +5,12 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
base {
|
base {
|
||||||
archivesName.set("libjf-config-ui-tiny-v1")
|
archivesName.set("libjf-config-ui-tiny")
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
val fabricVersion: String by rootProject.extra
|
val fabricVersion: String by rootProject.extra
|
||||||
api(devProject(":libjf-base"))
|
api(devProject(":libjf-base"))
|
||||||
api(devProject(":libjf-config-core-v1"))
|
api(devProject(":libjf-config-core-v2"))
|
||||||
include(fabricApi.module("fabric-resource-loader-v0", fabricVersion))
|
include(fabricApi.module("fabric-resource-loader-v0", fabricVersion))
|
||||||
}
|
}
|
|
@ -2,8 +2,9 @@ package io.gitlab.jfronny.libjf.config.impl.ui.tiny;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.throwable.Try;
|
import io.gitlab.jfronny.commons.throwable.Try;
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigCategory;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigCategory;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.CategoryBuilder;
|
||||||
|
import io.gitlab.jfronny.libjf.config.impl.ConfigCore;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe;
|
import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.EntryListWidget;
|
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.EntryListWidget;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.WidgetState;
|
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.WidgetState;
|
||||||
|
@ -98,7 +99,7 @@ public class TinyConfigScreen extends ScreenWithSaveHook {
|
||||||
this.addDrawableChild(done);
|
this.addDrawableChild(done);
|
||||||
|
|
||||||
if (tabs.size() == 1 && !config.getPresets().isEmpty()) {
|
if (tabs.size() == 1 && !config.getPresets().isEmpty()) {
|
||||||
this.addDrawableChild(ButtonWidget.builder(Text.translatable("libjf-config-v1.presets"),
|
this.addDrawableChild(ButtonWidget.builder(Text.translatable(ConfigCore.MOD_ID + ".presets"),
|
||||||
button -> Objects.requireNonNull(client).setScreen(new PresetsScreen(this, config, this::afterSelectPreset)))
|
button -> Objects.requireNonNull(client).setScreen(new PresetsScreen(this, config, this::afterSelectPreset)))
|
||||||
.dimensions(4, 6, 80, 20)
|
.dimensions(4, 6, 80, 20)
|
||||||
.build());
|
.build());
|
|
@ -2,10 +2,10 @@ package io.gitlab.jfronny.libjf.config.impl.ui.tiny;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.serialize.gson.api.v1.GsonHolders;
|
import io.gitlab.jfronny.commons.serialize.gson.api.v1.GsonHolders;
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.EntryInfo;
|
import io.gitlab.jfronny.libjf.config.api.v2.EntryInfo;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.CategoryBuilder;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.type.Type;
|
import io.gitlab.jfronny.libjf.config.api.v2.type.Type;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory;
|
import io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
@ -45,8 +45,8 @@ public class TinyConfigScreenFactory implements ConfigScreenFactory<Screen, Tiny
|
||||||
SystemToast.add(
|
SystemToast.add(
|
||||||
MinecraftClient.getInstance().getToastManager(),
|
MinecraftClient.getInstance().getToastManager(),
|
||||||
SystemToast.Type.PACK_LOAD_FAILURE,
|
SystemToast.Type.PACK_LOAD_FAILURE,
|
||||||
Text.translatable("libjf-config-ui-tiny-v1.entry.json.write.fail.title"),
|
Text.translatable("libjf-config-ui-tiny.entry.json.write.fail.title"),
|
||||||
Text.translatable("libjf-config-ui-tiny-v1.entry.json.write.fail.description")
|
Text.translatable("libjf-config-ui-tiny.entry.json.write.fail.description")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,7 +1,8 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl.ui.tiny;
|
package io.gitlab.jfronny.libjf.config.impl.ui.tiny;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigCategory;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigCategory;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigInstance;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigInstance;
|
||||||
|
import io.gitlab.jfronny.libjf.config.impl.ConfigCore;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.WidgetFactory;
|
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.WidgetFactory;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe;
|
import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.*;
|
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry.*;
|
||||||
|
@ -46,14 +47,14 @@ public class TinyConfigTab implements Tab {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!config.getPresets().isEmpty()) {
|
if (!config.getPresets().isEmpty()) {
|
||||||
this.list.addReference(Text.translatable("libjf-config-v1.presets"),
|
this.list.addReference(Text.translatable(ConfigCore.MOD_ID + ".presets"),
|
||||||
() -> new PresetsScreen(screen, config, screen::afterSelectPreset));
|
() -> new PresetsScreen(screen, config, screen::afterSelectPreset));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (WidgetState<?> info : widgets) {
|
for (WidgetState<?> info : widgets) {
|
||||||
MutableText name = Text.translatable(config.getTranslationPrefix() + info.entry.getName());
|
MutableText name = Text.translatable(config.getTranslationPrefix() + info.entry.getName());
|
||||||
WidgetFactory.Widget control = info.factory == null ? null : info.factory.build(screen, textRenderer);
|
WidgetFactory.Widget control = info.factory == null ? null : info.factory.build(screen, textRenderer);
|
||||||
ButtonWidget resetButton = ButtonWidget.builder(Text.translatable("libjf-config-v1.reset"), (button -> info.reset()))
|
ButtonWidget resetButton = ButtonWidget.builder(Text.translatable(ConfigCore.MOD_ID + ".reset"), (button -> info.reset()))
|
||||||
.dimensions(screen.width - 155, 0, 40, 20)
|
.dimensions(screen.width - 155, 0, 40, 20)
|
||||||
.build();
|
.build();
|
||||||
BooleanSupplier resetVisible = () -> {
|
BooleanSupplier resetVisible = () -> {
|
||||||
|
@ -70,7 +71,7 @@ public class TinyConfigTab implements Tab {
|
||||||
}
|
}
|
||||||
for (ConfigInstance ci : config.getReferencedConfigs()) {
|
for (ConfigInstance ci : config.getReferencedConfigs()) {
|
||||||
if (ci != null) {
|
if (ci != null) {
|
||||||
this.list.addReference(Text.translatable("libjf-config-v1.see-also", TinyConfigScreen.getTitle(ci.getTranslationPrefix())),
|
this.list.addReference(Text.translatable(ConfigCore.MOD_ID + ".see-also", TinyConfigScreen.getTitle(ci.getTranslationPrefix())),
|
||||||
() -> new TinyConfigScreen(ci, screen));
|
() -> new TinyConfigScreen(ci, screen));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -4,9 +4,9 @@ import io.gitlab.jfronny.commons.ref.R;
|
||||||
import io.gitlab.jfronny.commons.serialize.gson.api.v1.GsonHolders;
|
import io.gitlab.jfronny.commons.serialize.gson.api.v1.GsonHolders;
|
||||||
import io.gitlab.jfronny.commons.throwable.Try;
|
import io.gitlab.jfronny.commons.throwable.Try;
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigCategory;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigCategory;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.EntryInfo;
|
import io.gitlab.jfronny.libjf.config.api.v2.EntryInfo;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.type.Type;
|
import io.gitlab.jfronny.libjf.config.api.v2.type.Type;
|
||||||
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.EditorScreen;
|
import io.gitlab.jfronny.libjf.config.impl.ui.tiny.EditorScreen;
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
|
@ -156,7 +156,7 @@ public class EntryInfoWidgetBuilder {
|
||||||
state.managedTemp = false;
|
state.managedTemp = false;
|
||||||
state.tempValue = null;
|
state.tempValue = null;
|
||||||
return (screen, textRenderer) -> {
|
return (screen, textRenderer) -> {
|
||||||
final ButtonWidget button = ButtonWidget.builder(Text.translatable("libjf-config-core-v1.edit"), $ -> {
|
final ButtonWidget button = ButtonWidget.builder(Text.translatable("libjf-config-core-v2.edit"), $ -> {
|
||||||
final String jsonified;
|
final String jsonified;
|
||||||
if (state.tempValue == null) {
|
if (state.tempValue == null) {
|
||||||
try {
|
try {
|
||||||
|
@ -166,8 +166,8 @@ public class EntryInfoWidgetBuilder {
|
||||||
SystemToast.add(
|
SystemToast.add(
|
||||||
screen.getClient().getToastManager(),
|
screen.getClient().getToastManager(),
|
||||||
SystemToast.Type.PACK_LOAD_FAILURE,
|
SystemToast.Type.PACK_LOAD_FAILURE,
|
||||||
Text.translatable("libjf-config-ui-tiny-v1.entry.json.read.fail.title"),
|
Text.translatable("libjf-config-ui-tiny.entry.json.read.fail.title"),
|
||||||
Text.translatable("libjf-config-ui-tiny-v1.entry.json.read.fail.description")
|
Text.translatable("libjf-config-ui-tiny.entry.json.read.fail.description")
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -189,8 +189,8 @@ public class EntryInfoWidgetBuilder {
|
||||||
SystemToast.add(
|
SystemToast.add(
|
||||||
screen.getClient().getToastManager(),
|
screen.getClient().getToastManager(),
|
||||||
SystemToast.Type.PACK_LOAD_FAILURE,
|
SystemToast.Type.PACK_LOAD_FAILURE,
|
||||||
Text.translatable("libjf-config-ui-tiny-v1.entry.json.write.fail.title"),
|
Text.translatable("libjf-config-ui-tiny.entry.json.write.fail.title"),
|
||||||
Text.translatable("libjf-config-ui-tiny-v1.entry.json.write.fail.description")
|
Text.translatable("libjf-config-ui-tiny.entry.json.write.fail.description")
|
||||||
);
|
);
|
||||||
state.tempValue = json;
|
state.tempValue = json;
|
||||||
}
|
}
|
|
@ -2,7 +2,7 @@ package io.gitlab.jfronny.libjf.config.impl.ui.tiny.entry;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.ref.R;
|
import io.gitlab.jfronny.commons.ref.R;
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.EntryInfo;
|
import io.gitlab.jfronny.libjf.config.api.v2.EntryInfo;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
package io.gitlab.jfronny.libjf.config.impl.ui.tiny.presets;
|
package io.gitlab.jfronny.libjf.config.impl.ui.tiny.presets;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigCategory;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigCategory;
|
||||||
|
import io.gitlab.jfronny.libjf.config.impl.ConfigCore;
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
@ -19,7 +20,7 @@ public class PresetsScreen extends Screen {
|
||||||
private final Runnable afterSelect;
|
private final Runnable afterSelect;
|
||||||
|
|
||||||
public PresetsScreen(Screen parent, ConfigCategory config, Runnable afterSelect) {
|
public PresetsScreen(Screen parent, ConfigCategory config, Runnable afterSelect) {
|
||||||
super(Text.translatable("libjf-config-v1.presets"));
|
super(Text.translatable(ConfigCore.MOD_ID + ".presets"));
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.afterSelect = afterSelect;
|
this.afterSelect = afterSelect;
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"libjf-config-ui-tiny.entry.json.read.fail.title": "Could not read",
|
||||||
|
"libjf-config-ui-tiny.entry.json.read.fail.description": "The given entry could not be stringified. Please edit the config manually"
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"id": "libjf-config-ui-tiny-v1",
|
"id": "libjf-config-ui-tiny",
|
||||||
"name": "LibJF Config UI: Tiny",
|
"name": "LibJF Config UI: Tiny",
|
||||||
"version": "${version}",
|
"version": "${version}",
|
||||||
"authors": ["JFronny"],
|
"authors": ["JFronny"],
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
"minecraft": "*",
|
"minecraft": "*",
|
||||||
"fabric-resource-loader-v0": "*",
|
"fabric-resource-loader-v0": "*",
|
||||||
"libjf-base": ">=${version}",
|
"libjf-base": ">=${version}",
|
||||||
"libjf-config-core-v1": ">=${version}"
|
"libjf-config-core-v2": ">=${version}"
|
||||||
},
|
},
|
||||||
"custom": {
|
"custom": {
|
||||||
"modmenu": {
|
"modmenu": {
|
|
@ -1,7 +1,7 @@
|
||||||
package io.gitlab.jfronny.libjf.config.test.tiny;
|
package io.gitlab.jfronny.libjf.config.test.tiny;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.JfCustomConfig;
|
import io.gitlab.jfronny.libjf.config.api.v2.JfCustomConfig;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.DSL;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.DSL;
|
||||||
|
|
||||||
public class TestConfig implements JfCustomConfig {
|
public class TestConfig implements JfCustomConfig {
|
||||||
private int value1 = 0;
|
private int value1 = 0;
|
|
@ -1,6 +1,6 @@
|
||||||
package io.gitlab.jfronny.libjf.config.test.tiny.mixin;
|
package io.gitlab.jfronny.libjf.config.test.tiny.mixin;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigHolder;
|
import io.gitlab.jfronny.libjf.config.api.v2.ConfigHolder;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory;
|
import io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.client.gui.screen.option.OptionsScreen;
|
import net.minecraft.client.gui.screen.option.OptionsScreen;
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.title": "JfConfig example",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca1.title": "Category 1",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca1.tooltip": "This is category 1\nIt has an excessively long description to test multiline descriptions and wrapping, which are required for this to look good.\nThis is supported btw.",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca1.value1": "Value 1",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca2.title": "Category 2",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca2.tooltip": "This is category 2",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca2.value2": "Value 2",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca3.title": "Category 3",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca3.tooltip": "This is category 3",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca3.value3": "Value 3",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca4.title": "Category 4",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca4.tooltip": "This is category 4",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca4.value4": "Value 4",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca5.title": "Category 5",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca5.tooltip": "This is category 5",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca5.value5": "Value 5",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca6.title": "Category 6",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca6.tooltip": "This is category 6",
|
||||||
|
"libjf-config-ui-tiny-testmod.jfconfig.ca6.value6": "Value 6"
|
||||||
|
}
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"id": "libjf-config-ui-tiny-v1-testmod",
|
"id": "libjf-config-ui-tiny-testmod",
|
||||||
"name": "LibJF Config UI: Tiny",
|
"name": "LibJF Config UI: Tiny",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
"environment": "*",
|
"environment": "*",
|
||||||
"mixins": ["libjf-config-ui-tiny-v1-testmod.mixins.json"],
|
"mixins": ["libjf-config-ui-tiny-testmod.mixins.json"],
|
||||||
"entrypoints": {
|
"entrypoints": {
|
||||||
"libjf:config": [
|
"libjf:config": [
|
||||||
"io.gitlab.jfronny.libjf.config.test.tiny.TestConfig"
|
"io.gitlab.jfronny.libjf.config.test.tiny.TestConfig"
|
|
@ -10,5 +10,5 @@ base {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api(devProject(":libjf-base"))
|
api(devProject(":libjf-base"))
|
||||||
api(devProject(":libjf-config-core-v1"))
|
api(devProject(":libjf-config-core-v2"))
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.gitlab.jfronny.libjf.translate.impl;
|
package io.gitlab.jfronny.libjf.translate.impl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.JfCustomConfig;
|
import io.gitlab.jfronny.libjf.config.api.v2.JfCustomConfig;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.DSL;
|
import io.gitlab.jfronny.libjf.config.api.v2.dsl.DSL;
|
||||||
import io.gitlab.jfronny.libjf.translate.api.TranslateService;
|
import io.gitlab.jfronny.libjf.translate.api.TranslateService;
|
||||||
import io.gitlab.jfronny.libjf.translate.impl.google.GoogleTranslateService;
|
import io.gitlab.jfronny.libjf.translate.impl.google.GoogleTranslateService;
|
||||||
import io.gitlab.jfronny.libjf.translate.impl.libretranslate.LibreTranslateService;
|
import io.gitlab.jfronny.libjf.translate.impl.libretranslate.LibreTranslateService;
|
||||||
|
|
|
@ -11,7 +11,7 @@ base {
|
||||||
dependencies {
|
dependencies {
|
||||||
val fabricVersion: String by rootProject.extra
|
val fabricVersion: String by rootProject.extra
|
||||||
api(devProject(":libjf-base"))
|
api(devProject(":libjf-base"))
|
||||||
api(devProject(":libjf-config-core-v1"))
|
api(devProject(":libjf-config-core-v2"))
|
||||||
include(modImplementation(fabricApi.module("fabric-command-api-v2", fabricVersion))!!)
|
include(modImplementation(fabricApi.module("fabric-command-api-v2", fabricVersion))!!)
|
||||||
|
|
||||||
annotationProcessor(project(":libjf-config-compiler-plugin-v2"))
|
annotationProcessor(project(":libjf-config-compiler-plugin-v2"))
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.gitlab.jfronny.libjf.web.impl;
|
package io.gitlab.jfronny.libjf.web.impl;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.LibJf;
|
import io.gitlab.jfronny.libjf.LibJf;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.*;
|
import io.gitlab.jfronny.libjf.config.api.v2.*;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
"fabricloader": ">=0.12.0",
|
"fabricloader": ">=0.12.0",
|
||||||
"minecraft": "*",
|
"minecraft": "*",
|
||||||
"libjf-base": ">=${version}",
|
"libjf-base": ">=${version}",
|
||||||
"libjf-config-core-v1": ">=${version}",
|
"libjf-config-core-v2": ">=${version}",
|
||||||
"fabric-command-api-v2": "*"
|
"fabric-command-api-v2": "*"
|
||||||
},
|
},
|
||||||
"custom": {
|
"custom": {
|
||||||
|
|
|
@ -14,10 +14,9 @@ rootProject.name = "libjf"
|
||||||
|
|
||||||
include("libjf-base")
|
include("libjf-base")
|
||||||
|
|
||||||
include("libjf-config-core-v1")
|
include("libjf-config-core-v2")
|
||||||
include("libjf-config-reflect-v1")
|
include("libjf-config-commands")
|
||||||
include("libjf-config-commands-v1")
|
include("libjf-config-ui-tiny")
|
||||||
include("libjf-config-ui-tiny-v1")
|
|
||||||
include("libjf-data-v0")
|
include("libjf-data-v0")
|
||||||
include("libjf-data-manipulation-v0")
|
include("libjf-data-manipulation-v0")
|
||||||
include("libjf-devutil")
|
include("libjf-devutil")
|
||||||
|
|
Loading…
Reference in New Issue