package dev.isxander.yacl3.config.v3; import dev.isxander.yacl3.api.Binding; import org.jetbrains.annotations.ApiStatus; import java.util.function.Consumer; import java.util.function.UnaryOperator; @ApiStatus.Experimental public interface ConfigEntry extends ReadonlyConfigEntry { void set(T value); T defaultValue(); @Override ConfigEntry modifyGet(UnaryOperator modifier); @Override default ConfigEntry onGet(Consumer consumer) { return this.modifyGet(v -> { consumer.accept(v); return v; }); } ConfigEntry modifySet(UnaryOperator modifier); default ConfigEntry onSet(Consumer consumer) { return this.modifySet(v -> { consumer.accept(v); return v; }); } default Binding asBinding() { return Binding.generic(this.defaultValue(), this::get, this::set); } }