aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/.gitignore42
-rw-r--r--common/build.gradle.kts52
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/Binding.java64
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/ButtonOption.java66
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/ConfigCategory.java94
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/Controller.java28
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/LabelOption.java41
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/ListOption.java152
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/ListOptionEntry.java23
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/NameableEnum.java10
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/Option.java227
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/OptionAddable.java19
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/OptionFlag.java23
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/OptionGroup.java94
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/PlaceholderCategory.java52
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/YetAnotherConfigLib.java107
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/utils/Dimension.java33
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/utils/MutableDimension.java11
-rw-r--r--common/src/main/java/dev/isxander/yacl/api/utils/OptionUtils.java39
-rw-r--r--common/src/main/java/dev/isxander/yacl/config/ConfigEntry.java11
-rw-r--r--common/src/main/java/dev/isxander/yacl/config/ConfigInstance.java48
-rw-r--r--common/src/main/java/dev/isxander/yacl/config/GsonConfigInstance.java212
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/AbstractWidget.java107
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/CategoryListWidget.java99
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/CategoryWidget.java38
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/ElementListWidgetExt.java177
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/LowProfileButtonWidget.java28
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java570
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/RequireRestartScreen.java21
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/SearchFieldWidget.java66
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/TextScaledButtonWidget.java34
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/TooltipButtonWidget.java33
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/YACLScreen.java319
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/ActionController.java120
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/BooleanController.java157
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/ColorController.java221
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java170
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java193
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/ListEntryWidget.java135
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/TickBoxController.java120
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/cycling/CyclingControllerElement.java60
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/cycling/CyclingListController.java79
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/cycling/EnumController.java60
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/cycling/ICyclingController.java38
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/package-info.java12
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/slider/DoubleSliderController.java114
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/slider/FloatSliderController.java114
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/slider/ISliderController.java54
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/slider/IntegerSliderController.java111
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/slider/LongSliderController.java111
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java164
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/slider/package-info.java10
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/string/IStringController.java44
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/string/StringController.java37
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java408
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/string/number/DoubleFieldController.java104
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/string/number/FloatFieldController.java104
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/string/number/IntegerFieldController.java109
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/string/number/LongFieldController.java109
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/string/number/NumberFieldController.java69
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/controllers/string/number/package-info.java10
-rw-r--r--common/src/main/java/dev/isxander/yacl/gui/utils/GuiUtils.java41
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/ButtonOptionImpl.java218
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/ConfigCategoryImpl.java137
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/GenericBindingImpl.java35
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/LabelOptionImpl.java154
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/ListOptionEntryImpl.java149
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/ListOptionImpl.java338
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/OptionGroupImpl.java129
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/OptionImpl.java303
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/PlaceholderCategoryImpl.java99
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/YetAnotherConfigLibImpl.java122
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/utils/DimensionIntegerImpl.java115
-rw-r--r--common/src/main/java/dev/isxander/yacl/impl/utils/YACLConstants.java8
-rw-r--r--common/src/main/java/dev/isxander/yacl/mixin/AbstractSelectionListMixin.java25
-rw-r--r--common/src/main/java/dev/isxander/yacl/mixin/OptionInstanceAccessor.java13
-rw-r--r--common/src/main/resources/architectury.common.json3
-rw-r--r--common/src/main/resources/assets/yet_another_config_lib/lang/el_gr.json23
-rw-r--r--common/src/main/resources/assets/yet_another_config_lib/lang/en_us.json29
-rw-r--r--common/src/main/resources/assets/yet_another_config_lib/lang/et_ee.json18
-rw-r--r--common/src/main/resources/assets/yet_another_config_lib/lang/fr_fr.json29
-rw-r--r--common/src/main/resources/assets/yet_another_config_lib/lang/pl_pl.json23
-rw-r--r--common/src/main/resources/assets/yet_another_config_lib/lang/pt_br.json18
-rw-r--r--common/src/main/resources/assets/yet_another_config_lib/lang/ru_ru.json24
-rw-r--r--common/src/main/resources/assets/yet_another_config_lib/lang/sl_si.json22
-rw-r--r--common/src/main/resources/assets/yet_another_config_lib/lang/zh_cn.json29
-rw-r--r--common/src/main/resources/assets/yet_another_config_lib/lang/zh_tw.json23
-rw-r--r--common/src/main/resources/yacl-128x.pngbin0 -> 13813 bytes
-rw-r--r--common/src/main/resources/yacl.accesswidener6
-rw-r--r--common/src/main/resources/yacl.mixins.json12
90 files changed, 8122 insertions, 0 deletions
diff --git a/common/.gitignore b/common/.gitignore
new file mode 100644
index 0000000..b63da45
--- /dev/null
+++ b/common/.gitignore
@@ -0,0 +1,42 @@
+.gradle
+build/
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store \ No newline at end of file
diff --git a/common/build.gradle.kts b/common/build.gradle.kts
new file mode 100644
index 0000000..fb79bd1
--- /dev/null
+++ b/common/build.gradle.kts
@@ -0,0 +1,52 @@
+plugins {
+ alias(libs.plugins.architectury.loom)
+}
+
+base {
+ archivesName.set("yet-another-config-lib")
+}
+
+architectury {
+ common("fabric", "forge")
+}
+
+loom {
+ silentMojangMappingsLicense()
+
+ accessWidenerPath.set(file("src/main/resources/yacl.accesswidener"))
+}
+
+dependencies {
+ minecraft(libs.minecraft)
+ mappings(loom.layered {
+ mappings("org.quiltmc:quilt-mappings:${libs.versions.minecraft.get()}+build.${libs.versions.quilt.mappings.get()}:intermediary-v2")
+ officialMojangMappings()
+ })
+ modImplementation(libs.fabric.loader)
+}
+
+java {
+ withSourcesJar()
+}
+
+tasks {
+ remapJar {
+ archiveClassifier.set(null as String?)
+
+ from(rootProject.file("LICENSE"))
+ }
+}
+
+publishing {
+ publications {
+ create<MavenPublication>("common") {
+ groupId = "dev.isxander.yacl"
+ artifactId = "yet-another-config-lib-common"
+
+ from(components["java"])
+ }
+ }
+}
+tasks.findByPath("publishCommonPublicationToReleasesRepository")?.let {
+ rootProject.tasks["releaseMod"].dependsOn(it)
+}
diff --git a/common/src/main/java/dev/isxander/yacl/api/Binding.java b/common/src/main/java/dev/isxander/yacl/api/Binding.java
new file mode 100644
index 0000000..b4cd2d0
--- /dev/null
+++ b/common/src/main/java/dev/isxander/yacl/api/Binding.java
@@ -0,0 +1,64 @@
+package dev.isxander.yacl.api;
+
+import dev.isxander.yacl.impl.GenericBindingImpl;
+import dev.isxander.yacl.mixin.OptionInstanceAccessor;
+import net.minecraft.client.OptionInstance;
+import org.apache.commons.lang3.Validate;
+
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+/**
+ * Controls modifying the bound option.
+ * Provides the default value, a setter and a getter.
+ */
+public interface Binding<T> {
+ void setValue(T value);
+
+ T getValue();
+
+ T defaultValue();
+
+ /**
+ * Creates a generic binding.
+ *
+ * @param def default value of the option, used to reset
+ * @param getter should return the current value of the option
+ * @param setter should set the option to the supplied value
+ */
+ static <T> Binding<T> generic(T def, Supplier<T> getter, Consumer<T> setter) {
+ Validate.notNull(def, "`def` must not be null");
+ Validate.notNull(getter, "`getter` must not be null");
+ Validate.notNull(setter, "`setter` must not be null");
+
+ return new GenericBindingImpl<>(def, getter, setter);
+ }
+
+ /**
+ * Creates a {@link Binding} for Minecraft's {@link OptionInstance}
+ */
+ static <T> Binding<T> minecraft(OptionInstance<T> minecraftOption) {
+ Validate.notNull(minecraftOption, "`minecraftOption` must not be null");
+
+ return new GenericBindingImpl<>(
+ ((OptionInstanceAccessor<T>) (Object) minecraftOption).getInitialValue(),
+ minecraftOption::get,
+ minecraftOption::set
+ );
+ }
+
+ /**
+ * Creates an immutable binding that has no default and cannot be modified.
+ *
+ * @param value the value for the binding
+ */
+ static <T> Binding<T> immutable(T value) {
+ Validate.notNull(value, "`value` must not be null");
+
+ return new GenericBindingImpl<>(
+ value,
+ () -> value,
+ changed -> {}
+ );
+ }
+}
diff --git a/common/src/main/java/dev/isxander/yacl/api/ButtonOption.java b/common/src/main/java/dev/isxander/yacl/api/ButtonOption.java
new file mode 100644
index 0000000..88e1c4b
--- /dev/null
+++ b/common/src/main/java/dev/isxander/yacl/api/ButtonOption.java
@@ -0,0 +1,66 @@
+package dev.isxander.yacl.api;
+
+import dev.isxander.yacl.gui.YACLScreen;
+import dev.isxander.yacl.impl.ButtonOptionImpl;
+import net.minecraft.network.chat.Component;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+public interface ButtonOption extends Option<BiConsumer<YACLScreen, ButtonOption>> {
+ /**
+ * Action to be executed upon button press
+ */
+ BiConsumer<YACLScreen, ButtonOption> action();
+
+ static dev.isxander.yacl.api.ButtonOption.Builder createBuilder() {
+ return new ButtonOptionImpl.BuilderImpl();
+ }
+
+ interface Builder {
+ /**
+ * Sets the name to be used by the option.
+ *
+ * @see Option#name()
+ */
+ dev.isxander.yacl.api.ButtonOption.Builder name(@NotNull Component name);
+
+ /**
+ * Sets the tooltip to be used by the option.
+ * Can be invoked twice to append more lines.
+ * No need to wrap the text yourself, the gui does this itself.
+ *
+ * @param tooltips text lines - merged with a new-line on {@link Option.Builder#build()}.
+ */
+ dev.isxander.yacl.api.ButtonOption.Builder tooltip(@NotNull Component... tooltips);
+
+ dev.isxander.yacl.api.ButtonOption.Builder action(@NotNull BiConsumer<YACLScreen, ButtonOption> action);
+
+ /**
+ * Action to be executed upon button press
+ *
+ * @see ButtonOption#action()
+ */
+ @Deprecated
+ dev.isxander.yacl.api.ButtonOption.Builder action(@NotNull Consumer<YACLScreen> action);
+
+ /**
+ * Sets if the option can be configured
+ *
+ * @see Option#available()
+ */
+ dev.isxander.yacl.api.ButtonOption.Builder available(boolean available);
+
+ /**
+ * Sets the controller for the option.
+ * This is how you interact and change the options.
+ *
+ * @see dev.isxander.yacl.gui.controllers
+ */
+ dev.isxander.yacl.api.ButtonOption.Builder controller(@NotNull Function<ButtonOption, Controller<BiConsumer<YACLScreen, ButtonOption>>> control);
+
+ ButtonOption build();
+ }
+}
diff --git a/common/src/main/java/dev/isxander/yacl/api/ConfigCategory.java b/common/src/main/java/dev/isxander/yacl/api/ConfigCategory.java
new file mode 100644
index 0000000..7764479
--- /dev/null
+++ b/common/src/main/java/dev/isxander/yacl/api/ConfigCategory.java
@@ -0,0 +1,94 @@
+package dev.isxander.yacl.api;
+
+import com.google.common.collect.ImmutableList;
+import dev.isxander.yacl.impl.ConfigCategoryImpl;
+import net.minecraft.network.chat.Component;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Collection;
+
+/**
+ * Separates {@link Option}s or {@link OptionGroup}s into multiple distinct sections.
+ * Served to a user as a button in the left column,
<