aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/ftbsc/bscv/tools/Setting.java24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/main/java/ftbsc/bscv/tools/Setting.java b/src/main/java/ftbsc/bscv/tools/Setting.java
index 7f4d627..99f5480 100644
--- a/src/main/java/ftbsc/bscv/tools/Setting.java
+++ b/src/main/java/ftbsc/bscv/tools/Setting.java
@@ -7,6 +7,7 @@ import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.server.command.EnumArgument;
import java.util.Optional;
+import java.util.function.Consumer;
import static ftbsc.bscv.Boscovicino.log;
@@ -15,12 +16,14 @@ public abstract class Setting<T> {
protected Optional<String> name;
protected Optional<String> comment;
protected Optional<T> fallback;
+ protected Optional<Consumer<T>> callback;
Setting() {
this.name = Optional.empty();
this.comment = Optional.empty();
this.fallback = Optional.empty();
+ this.callback = Optional.empty();
}
public Setting<T> name(String name) {
@@ -38,6 +41,11 @@ public abstract class Setting<T> {
return this;
}
+ public Setting<T> callback(Consumer<T> callback) {
+ this.callback = Optional.of(callback);
+ return this;
+ }
+
abstract ForgeConfigSpec.ConfigValue<T> value(ForgeConfigSpec.Builder builder);
abstract ArgumentType<T> argument();
@@ -47,21 +55,29 @@ public abstract class Setting<T> {
public ForgeConfigSpec.ConfigValue<T> build(IModule module) {
ForgeConfigSpec.ConfigValue<T> conf = this.value(module.getConfigBuilder());
+ String optName = this.name.get();
+ Class<T> clazz = this.clazz();
+ ArgumentType<T> arg = this.argument();
+ Consumer<T> cb = this.callback.isPresent() ? this.callback.get() : null;
+
module.getDispatcher().register(
Commands.literal(module.getName().toLowerCase())
.then(
- Commands.literal(this.name.get())
+ Commands.literal(optName)
.then(
- Commands.argument(this.name.get(), this.argument())
+ Commands.argument(optName, arg)
.executes( ctx -> {
- T value = ctx.getArgument(this.name.get(), this.clazz());
+ T value = ctx.getArgument(optName, clazz);
+ if (cb != null) {
+ cb.accept(value);
+ }
conf.set(value);
conf.save();
log(String.format("> %s -> %s <", String.join(".", conf.getPath()), conf.get().toString()));
return 1;
}))
.executes(ctx -> {
- log(String.format("> %s: %s <", name, conf.get().toString()));
+ log(String.format("> %s: %s <", optName, conf.get().toString()));
return 1;
})
)