From ba87b8b1fa4e2397a3e0ed5a18f7ea6137d42f77 Mon Sep 17 00:00:00 2001 From: Wyvest <45589059+Wyvest@users.noreply.github.com> Date: Sat, 21 May 2022 17:50:43 +0700 Subject: vigilance compat (#15) * vigilance compat reorganize ASM * remove non-RenderManager nanovg usage wherever possible fix build generalize utils * setupGradle task * migrate to kotlin gradle use essential gradle toolkit shade new gson * Small changes * Update .gitignore * fix natives * Fix all problems * null Co-authored-by: DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> --- build.gradle | 182 --------------- build.gradle.kts | 257 +++++++++++++++++++++ gradle.properties | 3 +- root.gradle.kts | 10 + settings.gradle | 8 - settings.gradle.kts | 34 +++ .../java/cc/polyfrost/oneconfig/OneConfig.java | 4 +- .../oneconfig/command/OneConfigCommand.java | 2 +- .../oneconfig/config/OneConfigConfig.java | 2 +- .../config/compatibility/VigilanceConfig.java | 135 +++++++++++ .../config/compatibility/VigilantAccessor.java | 7 + .../oneconfig/config/core/OneKeyBind.java | 2 +- .../cc/polyfrost/oneconfig/config/data/Mod.java | 11 + .../oneconfig/config/interfaces/Config.java | 19 +- .../java/cc/polyfrost/oneconfig/gui/HudGui.java | 6 +- .../cc/polyfrost/oneconfig/gui/OneConfigGui.java | 21 +- .../java/cc/polyfrost/oneconfig/gui/SideBar.java | 5 +- .../oneconfig/gui/elements/BasicElement.java | 1 + .../oneconfig/gui/elements/ColorSelector.java | 2 +- .../polyfrost/oneconfig/gui/elements/ModCard.java | 11 +- .../gui/elements/config/ConfigButton.java | 29 ++- .../gui/elements/config/ConfigCheckbox.java | 9 +- .../gui/elements/config/ConfigDropdown.java | 21 +- .../gui/elements/config/ConfigDualOption.java | 8 +- .../gui/elements/config/ConfigKeyBind.java | 8 +- .../gui/elements/config/ConfigPageButton.java | 8 +- .../gui/elements/config/ConfigSlider.java | 5 +- .../gui/elements/config/ConfigSwitch.java | 8 +- .../gui/elements/config/ConfigTextBox.java | 7 +- .../gui/elements/config/ConfigUniSelector.java | 17 +- .../gui/elements/text/NumberInputField.java | 11 +- .../gui/elements/text/TextInputField.java | 2 +- .../cc/polyfrost/oneconfig/gui/pages/ModsPage.java | 4 +- .../cc/polyfrost/oneconfig/gui/pages/Page.java | 3 +- .../java/cc/polyfrost/oneconfig/hud/HudCore.java | 2 +- .../cc/polyfrost/oneconfig/init/OneConfigInit.java | 10 +- .../cc/polyfrost/oneconfig/lwjgl/BlurHandler.java | 4 +- .../cc/polyfrost/oneconfig/lwjgl/OneColor.java | 2 +- .../polyfrost/oneconfig/lwjgl/RenderManager.java | 14 +- .../cc/polyfrost/oneconfig/lwjgl/font/Font.java | 2 - .../oneconfig/lwjgl/image/ImageLoader.java | 16 +- .../oneconfig/lwjgl/plugin/ClassTransformer.java | 56 ----- .../oneconfig/lwjgl/plugin/LoadingPlugin.java | 54 ----- .../oneconfig/lwjgl/scissor/ScissorManager.java | 1 - .../polyfrost/oneconfig/plugin/LoadingPlugin.java | 54 +++++ .../oneconfig/plugin/OneConfigMixinPlugin.java | 51 ++++ .../oneconfig/plugin/asm/ClassTransformer.java | 64 +++++ .../oneconfig/plugin/asm/ITransformer.java | 8 + .../asm/tweakers/NanoVGGLConfigTransformer.java | 43 ++++ .../plugin/asm/tweakers/VigilantTransformer.java | 105 +++++++++ .../java/cc/polyfrost/oneconfig/test/TestHud.java | 2 +- .../cc/polyfrost/oneconfig/test/TestNanoVGGui.java | 4 +- .../cc/polyfrost/oneconfig/utils/ColorUtils.java | 10 +- .../java/cc/polyfrost/oneconfig/utils/IOUtils.java | 1 + .../cc/polyfrost/oneconfig/utils/InputUtils.java | 2 +- .../cc/polyfrost/oneconfig/utils/MathUtils.java | 10 +- src/main/resources/mixins.oneconfig.json | 3 +- versions/mainProject | 1 + 58 files changed, 933 insertions(+), 448 deletions(-) delete mode 100644 build.gradle create mode 100644 build.gradle.kts create mode 100644 root.gradle.kts delete mode 100644 settings.gradle create mode 100644 settings.gradle.kts create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/compatibility/VigilanceConfig.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/compatibility/VigilantAccessor.java delete mode 100644 src/main/java/cc/polyfrost/oneconfig/lwjgl/plugin/ClassTransformer.java delete mode 100644 src/main/java/cc/polyfrost/oneconfig/lwjgl/plugin/LoadingPlugin.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/plugin/LoadingPlugin.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/plugin/OneConfigMixinPlugin.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/plugin/asm/ClassTransformer.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/plugin/asm/ITransformer.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/plugin/asm/tweakers/NanoVGGLConfigTransformer.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/plugin/asm/tweakers/VigilantTransformer.java create mode 100644 versions/mainProject diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 5342d39..0000000 --- a/build.gradle +++ /dev/null @@ -1,182 +0,0 @@ -//file:noinspection UnnecessaryQualifiedReference -//file:noinspection GroovyAssignabilityCheck -//file:noinspection GradlePackageUpdate -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar - -plugins { - id "dev.architectury.architectury-pack200" version "0.1.3" - id "com.github.johnrengelman.shadow" version "7.1.2" - id "cc.woverflow.loom" version "0.10.6" - id "net.kyori.blossom" version "1.3.0" - id "java" -} - -version = mod_version -group = "cc.polyfrost" -archivesBaseName = mod_name - -blossom { - String className = "src/main/java/cc/polyfrost/oneconfig/OneConfig.java" - replaceToken("@VER@", project.version, className) - replaceToken("@NAME@", mod_name, className) - replaceToken("@ID@", mod_id, className) -} - -sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8 -compileJava.options.encoding = 'UTF-8' - -loom { - launchConfigs { - client { - property("fml.coreMods.load", "cc.polyfrost.oneconfig.lwjgl.plugin.LoadingPlugin") - property("mixin.debug.export", "true") - } - } - runConfigs { - client { - ideConfigGenerated = true - } - } - forge { - pack200Provider = new dev.architectury.pack200.java.Pack200Adapter() - mixinConfig("mixins.oneconfig.json") - mixin.defaultRefmapName.set("mixins.oneconfig.refmap.json") - } -} - -configurations { - include - implementation.extendsFrom(include) - lwjgl - lwjglNative { - transitive = false - } -} - -sourceSets.main.runtimeClasspath += configurations.lwjglNative - -repositories { - maven { url 'https://repo.woverflow.cc/' } -} - -task lwjglJar(type: ShadowJar) { - group = "shadow" - archiveClassifier.set("lwjgl") - configurations = [project.configurations.lwjgl] - exclude "META-INF/versions/**" - exclude "**/module-info.class" - exclude "**/package-info.class" - relocate("org.lwjgl", "org.lwjgl3") { - include "org.lwjgl.PointerBuffer" - include "org.lwjgl.BufferUtils" - } -} - -dependencies { - minecraft("com.mojang:minecraft:1.8.9") - mappings("de.oceanlabs.mcp:mcp_stable:22-1.8.9") - forge("net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9") - - include("gg.essential:universalcraft-1.8.9-forge:209") { - transitive = false - } - - // for other mods and universalcraft - include("org.jetbrains.kotlin:kotlin-stdlib:1.6.21") - include("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21") - include("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21") - include("org.jetbrains.kotlin:kotlin-reflect:1.6.21") - include("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1") - include("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1") - include("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.1") - include("org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.3.2") - include("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.3.2") - include("org.jetbrains.kotlinx:kotlinx-serialization-cbor-jvm:1.3.2") - - include("org.spongepowered:mixin:0.7.11-SNAPSHOT") { - transitive = false - } - - lwjgl "org.lwjgl:lwjgl:3.3.1" - lwjgl "org.lwjgl:lwjgl-stb:3.3.1" - lwjgl "org.lwjgl:lwjgl-tinyfd:3.3.1" - lwjgl "org.lwjgl:lwjgl-nanovg:3.3.1" - lwjglNative "org.lwjgl:lwjgl:3.3.1:natives-windows" - lwjglNative "org.lwjgl:lwjgl-stb:3.3.1:natives-windows" - lwjglNative "org.lwjgl:lwjgl-tinyfd:3.3.1:natives-windows" - lwjglNative "org.lwjgl:lwjgl-nanovg:3.3.1:natives-windows" - lwjglNative "org.lwjgl:lwjgl:3.3.1:natives-linux" - lwjglNative "org.lwjgl:lwjgl-stb:3.3.1:natives-linux" - lwjglNative "org.lwjgl:lwjgl-tinyfd:3.3.1:natives-linux" - lwjglNative "org.lwjgl:lwjgl-nanovg:3.3.1:natives-linux" - lwjglNative "org.lwjgl:lwjgl:3.3.1:natives-macos" - lwjglNative "org.lwjgl:lwjgl-stb:3.3.1:natives-macos" - lwjglNative "org.lwjgl:lwjgl-tinyfd:3.3.1:natives-macos" - lwjglNative "org.lwjgl:lwjgl-nanovg:3.3.1:natives-macos" - include lwjglJar.outputs.files -} - -processResources { - // this will ensure that this task is redone when the versions change. - inputs.property "version", version - inputs.property "name", mod_name - inputs.property "id", mod_id - - filesMatching("mcmod.info") { - expand( - "id": mod_id, - "name": mod_name, - "version": version - ) - } - - rename '(.+_at.cfg)', 'META-INF/$1' -} - -sourceSets { - main { - output.resourcesDir = java.outputDir - } -} - -shadowJar { - archiveClassifier.set('dev') - configurations = [project.configurations.include, project.configurations.lwjglNative] - duplicatesStrategy DuplicatesStrategy.EXCLUDE - - relocate("gg.essential.universalcraft", "cc.polyfrost.oneconfig.libs.universalcraft") - exclude( - "**/LICENSE.md", - "**/LICENSE.txt", - "**/LICENSE", - "**/NOTICE", - "**/NOTICE.txt", - "pack.mcmeta", - "dummyThing", - "**/module-info.class", - "META-INF/proguard/**", - "META-INF/maven/**", - "META-INF/versions/**", - "META-INF/com.android.tools/**", - "fabric.mod.json" - ) -} - -remapJar { - archiveClassifier.set('') - from(shadowJar.archiveFile) -} - -jar { - manifest.attributes( - 'ModSide': 'CLIENT', - 'ForceLoadAsMod': true, - "TweakOrder": "0", - "MixinConfigs": "mixins.oneconfig.json", - "FMLCorePlugin": "cc.polyfrost.oneconfig.lwjgl.plugin.LoadingPlugin", - 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', - "FMLCorePluginContainsFMLMod": "lol" - ) - enabled = false -} -jar.dependsOn(shadowJar) diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..a6a59db --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,257 @@ +import gg.essential.gradle.util.noServerRunConfigs +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import gg.essential.gradle.util.RelocationTransform.Companion.registerRelocationAttribute +import gg.essential.gradle.util.prebundle + +plugins { + id("gg.essential.multi-version") + id("gg.essential.defaults.repo") + id("gg.essential.defaults.java") + id("gg.essential.defaults.loom") + id("com.github.johnrengelman.shadow") + id("net.kyori.blossom") version "1.3.0" + id("io.github.juuxel.loom-quiltflower-mini") + java +} + +java { + withJavadocJar() + withSourcesJar() +} + +val mod_name: String by project +val mod_version: String by project +val mod_id: String by project + +preprocess { + vars.put("MODERN", if (project.platform.mcMinor >= 16) 1 else 0) +} + +blossom { + replaceToken("@VER@", mod_version) + replaceToken("@NAME@", mod_name) + replaceToken("@ID@", mod_id) +} + +version = mod_version +group = "cc.polyfrost" +base { + archivesName.set(mod_name) +} + +loom.noServerRunConfigs() +loom { + if (project.platform.isLegacyForge) { + launchConfigs.named("client") { + property("fml.coreMods.load", "cc.polyfrost.oneconfig.plugin.LoadingPlugin") + property("mixin.debug.export", "true") + } + } + if (project.platform.isForge) { + forge { + mixinConfig("mixins.${mod_id}.json") + } + } + mixin.defaultRefmapName.set("mixins.${mod_id}.refmap.json") +} + +repositories { + maven("https://repo.woverflow.cc/") +} + +val relocated = registerRelocationAttribute("relocate") { + relocate("gg.essential", "cc.polyfrost.oneconfig.libs") +} + +val shadeRelocated: Configuration by configurations.creating { + attributes { attribute(relocated, true) } +} + +val shade: Configuration by configurations.creating { + configurations.implementation.get().extendsFrom(this) +} + +val lwjgl: Configuration by configurations.creating + +val lwjglNative: Configuration by configurations.creating { + isTransitive = false +} + +val dummyImpl: Configuration by configurations.creating { + configurations.implementation.get().extendsFrom(this) +} + +sourceSets { + val dummy by creating { + compileClasspath += dummyImpl + } + main { + compileClasspath += dummy.output + runtimeClasspath += lwjglNative + output.setResourcesDir(java.classesDirectory) + } +} + +val lwjglJar by tasks.registering(ShadowJar::class) { + group = "shadow" + archiveClassifier.set("lwjgl") + configurations = listOf(lwjgl) + exclude ("META-INF/versions/**") + exclude ("**/module-info.class") + exclude ("**/package-info.class") + relocate("org.lwjgl", "org.lwjgl3") { + include ("org.lwjgl.PointerBuffer") + include ("org.lwjgl.BufferUtils") + } +} + +dependencies { + dummyImpl("gg.essential:vigilance-1.8.9-forge:222") { + isTransitive = false + } + + shadeRelocated("gg.essential:universalcraft-1.8.9-forge:209") { + isTransitive = false + } + + // for other mods and universalcraft + shade("org.jetbrains.kotlin:kotlin-stdlib:1.6.21") + shade("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21") + shade("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21") + shade("org.jetbrains.kotlin:kotlin-reflect:1.6.21") + shade("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1") + shade("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1") + shade("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.1") + shade("org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.3.3") + shade("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.3.3") + shade("org.jetbrains.kotlinx:kotlinx-serialization-cbor-jvm:1.3.3") + + shade("org.spongepowered:mixin:0.7.11-SNAPSHOT") { + isTransitive = false + } + + lwjgl ("org.lwjgl:lwjgl:3.3.1") + lwjgl ("org.lwjgl:lwjgl-stb:3.3.1") + lwjgl ("org.lwjgl:lwjgl-tinyfd:3.3.1") + lwjgl ("org.lwjgl:lwjgl-nanovg:3.3.1") + lwjglNative ("org.lwjgl:lwjgl:3.3.1:natives-windows") + lwjglNative ("org.lwjgl:lwjgl-stb:3.3.1:natives-windows") + lwjglNative ("org.lwjgl:lwjgl-tinyfd:3.3.1:natives-windows") + lwjglNative ("org.lwjgl:lwjgl-nanovg:3.3.1:natives-windows") + lwjglNative ("org.lwjgl:lwjgl:3.3.1:natives-linux") + lwjglNative ("org.lwjgl:lwjgl-stb:3.3.1:natives-linux") + lwjglNative ("org.lwjgl:lwjgl-tinyfd:3.3.1:natives-linux") + lwjglNative ("org.lwjgl:lwjgl-nanovg:3.3.1:natives-linux") + lwjglNative ("org.lwjgl:lwjgl:3.3.1:natives-macos") + lwjglNative ("org.lwjgl:lwjgl-stb:3.3.1:natives-macos") + lwjglNative ("org.lwjgl:lwjgl-tinyfd:3.3.1:natives-macos") + lwjglNative ("org.lwjgl:lwjgl-nanovg:3.3.1:natives-macos") + shade(lwjglJar.get().outputs.files) + shade(prebundle(shadeRelocated)) +} + +tasks.processResources { + inputs.property("id", mod_id) + inputs.property("name", mod_name) + val java = if (project.platform.mcMinor >= 18) { + 17 + } else { + if (project.platform.mcMinor == 17) 16 else 8 + } + val compatLevel = "JAVA_${java}" + inputs.property("java", java) + inputs.property("java_level", compatLevel) + inputs.property("version", mod_version) + inputs.property("mcVersionStr", project.platform.mcVersionStr) + filesMatching(listOf("mcmod.info", "mixins.${mod_id}.json", "mods.toml")) { + expand( + mapOf( + "id" to mod_id, + "name" to mod_name, + "java" to java, + "java_level" to compatLevel, + "version" to mod_version, + "mcVersionStr" to project.platform.mcVersionStr + ) + ) + } + filesMatching("fabric.mod.json") { + expand( + mapOf( + "id" to mod_id, + "name" to mod_name, + "java" to java, + "java_level" to compatLevel, + "version" to mod_version, + "mcVersionStr" to project.platform.mcVersionStr.substringBeforeLast(".") + ".x" + ) + ) + } +} + +tasks { + withType(Jar::class.java) { + if (project.platform.isFabric) { + exclude("mcmod.info", "mods.toml") + } else { + exclude("fabric.mod.json") + if (project.platform.isLegacyForge) { + exclude("mods.toml") + } else { + exclude("mcmod.info") + } + } + } + named("shadowJar") { + archiveClassifier.set("dev") + configurations = listOf(shade, lwjglNative) + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + } + remapJar { + input.set(shadowJar.get().archiveFile) + archiveClassifier.set("") + } + jar { + manifest { + attributes( + mapOf( + "ModSide" to "CLIENT", + "ForceLoadAsMod" to true, + "TweakOrder" to "0", + "MixinConfigs" to "mixins.oneconfig.json", + "FMLCorePlugin" to "cc.polyfrost.oneconfig.plugin.LoadingPlugin", + "TweakClass" to "org.spongepowered.asm.launch.MixinTweaker", + "FMLCorePluginContainsFMLMod" to "lol" + ) + ) + } + dependsOn(shadowJar) + archiveClassifier.set("") + enabled = false + } +} + +afterEvaluate { + val checkFile = file(".gradle/loom-cache/SETUP") + val lwjglJarDelayed by tasks.creating { + dependsOn(lwjglJar) + } + + @Suppress("UNUSED_VARIABLE") + val setupGradle by tasks.creating { + dependsOn(lwjglJarDelayed) + val genSourcesWithQuiltflower = tasks.named("genSourcesWithQuiltflower").get() + dependsOn(genSourcesWithQuiltflower) + genSourcesWithQuiltflower.mustRunAfter(lwjglJarDelayed) + doLast { + checkFile.parentFile.mkdirs() + checkFile.createNewFile() + } + } + + if (!checkFile.exists()) { + logger.error("--------------") + logger.error("PLEASE RUN THE `setupGradle` TASK, OR ELSE UNEXPECTED THING MAY HAPPEN!") + logger.error("--------------") + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 527e3ee..2954b27 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,5 @@ mod_name = OneConfig mod_id = oneconfig mod_version = 1.0.0 -loom.platform = forge \ No newline at end of file +loom.platform = forge +essential.defaults.loom=0 \ No newline at end of file diff --git a/root.gradle.kts b/root.gradle.kts new file mode 100644 index 0000000..73e3461 --- /dev/null +++ b/root.gradle.kts @@ -0,0 +1,10 @@ +plugins { + kotlin("jvm") version "1.6.21" apply false + id("gg.essential.multi-version.root") + id("com.github.johnrengelman.shadow") version "7.1.2" apply false + id("io.github.juuxel.loom-quiltflower-mini") version "171a6e2e49" apply false +} + +preprocess { + "1.8.9-forge"(10809, "srg") {} +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 4f8d00d..0000000 --- a/settings.gradle +++ /dev/null @@ -1,8 +0,0 @@ -pluginManagement { - repositories { - gradlePluginPortal() - maven { url = "https://repo.woverflow.cc" } - } -} - -rootProject.name = mod_name \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..8cbfd4e --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,34 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + maven("https://repo.woverflow.cc") + } + plugins { + val egtVersion = "0.1.7" + id("gg.essential.multi-version.root") version egtVersion + } + resolutionStrategy { + eachPlugin { + if (requested.id.id == "io.github.juuxel.loom-quiltflower-mini") { + useModule("com.github.wyvest:loom-quiltflower-mini:${requested.version}") + } + } + } +} + +val mod_name: String by settings + +rootProject.name = mod_name +rootProject.buildFileName = "root.gradle.kts" + +listOf( + "1.8.9-forge" +).forEach { version -> + include(":$version") + project(":$version").apply { + projectDir = file("versions/$version") + buildFileName = "../../build.gradle.kts" + } + +} \ No newline at end of file diff --git a/src/main/java/cc/polyfrost/oneconfig/OneConfig.java b/src/main/java/cc/polyfrost/oneconfig/OneConfig.java index 3661c42..8812894 100644 --- a/src/main/java/cc/polyfrost/oneconfig/OneConfig.java +++ b/src/main/java/cc/polyfrost/oneconfig/OneConfig.java @@ -28,8 +28,8 @@ import java.util.List; @net.minecraftforge.fml.common.Mod(modid = "@ID@", name = "@NAME@", version = "@VER@") public class OneConfig { public static File jarFile; - public static File oneConfigDir = new File("./OneConfig/"); - public static File themesDir = new File(oneConfigDir, "themes/"); + public static File oneConfigDir = new File("./OneConfig"); + public static File themesDir = new File(oneConfigDir, "themes"); public static OneConfigConfig config; public static TestConfig testConfig; public static List loadedMods = new ArrayList<>(); diff --git a/src/main/java/cc/polyfrost/oneconfig/command/OneConfigCommand.java b/src/main/java/cc/polyfrost/oneconfig/command/OneConfigCommand.java index f21e569..fac2112 100644 --- a/src/main/java/cc/polyfrost/oneconfig/command/OneConfigCommand.java +++ b/src/main/java/cc/polyfrost/oneconfig/command/OneConfigCommand.java @@ -4,7 +4,7 @@ import cc.polyfrost.oneconfig.gui.HudGui; import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.test.TestNanoVGGui; import cc.polyfrost.oneconfig.utils.TickDelay; -import gg.essential.universal.UScreen; +import cc.polyfrost.oneconfig.libs.universal.UScreen; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; diff --git a/src/main/java/cc/polyfrost/oneconfig/config/OneConfigConfig.java b/src/main/java/cc/polyfrost/oneconfig/config/OneConfigConfig.java index a590536..407afdf 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/OneConfigConfig.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/OneConfigConfig.java @@ -89,7 +89,7 @@ public class OneConfigConfig extends Config { @Override public void load() { try (BufferedReader reader = new BufferedReader(new InputStreamReader(Files.newInputStream(Paths.get("OneConfig/" + configFile)), StandardCharsets.UTF_8))) { - deserializePart(new JsonParser().parse(reader).getAsJsonObject(), this.getClass()); + deserializePart(new JsonParser().parse(reader).getAsJsonObject(), this); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/cc/polyfrost/oneconfig/config/compatibility/VigilanceConfig.java b/src/main/java/cc/polyfrost/oneconfig/config/compatibility/VigilanceConfig.java new file mode 100644 index 0000000..14d1e72 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/compatibility/VigilanceConfig.java @@ -0,0 +1,135 @@ +package cc.polyfrost.oneconfig.config.compatibility; + +import cc.polyfrost.oneconfig.config.core.ConfigCore; +import cc.polyfrost.oneconfig.config.data.Mod; +import cc.polyfrost.oneconfig.config.data.OptionCategory; +import cc.polyfrost.oneconfig.config.data.OptionPage; +import cc.polyfrost.oneconfig.config.data.OptionSubcategory; +import cc.polyfrost.oneconfig.config.interfaces.BasicOption; +import cc.polyfrost.oneconfig.config.interfaces.Config; +import cc.polyfrost.oneconfig.gui.elements.config.*; +import gg.essential.vigilance.Vigilant; +import gg.essential.vigilance.data.*; +import kotlin.reflect.KMutableProperty0; +import kotlin.reflect.jvm.ReflectJvmMapping; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Objects; + +public class VigilanceConfig extends Config { + public final Vigilant vigilant; + + public VigilanceConfig(Mod modData, String configFile, Vigilant vigilant) { + super(modData, configFile); + this.vigilant = vigilant; + init(modData); + } + + @Override + public void init(Mod mod) { + if (vigilant != null) { + mod.config = this; + generateOptionsList(mod.defaultPage); + ConfigCore.oneConfigMods.add(mod); + this.mod = mod; + } + } + + @Override + public void save() { + vigilant.markDirty(); + vigilant.writeData(); + } + + @Override + public void load() { + //no-op + } + + private void generateOptionsList(OptionPage page) { + for (PropertyData option : ((VigilantAccessor) vigilant).getPropertyCollector().getProperties()) { + PropertyAttributesExt attributes = option.getAttributesExt(); + if (attributes.getHidden()) continue; + if (!page.categories.containsKey(attributes.getCategory())) + page.categories.put(attributes.getCategory(), new OptionCategory()); + OptionCategory category = page.categories.get(attributes.getCategory()); + if (category.subcategories.size() == 0 || !category.subcategories.get(category.subcategories.size() - 1).getName().equals(attributes.getSubcategory())) + category.subcategories.add(new OptionSubcategory(attributes.getSubcategory())); + ArrayList options = category.subcategories.get(category.subcategories.size() - 1).options; + switch (attributes.getType()) { + case SWITCH: + options.add(new ConfigSwitch(getFieldOfProperty(option), option.getInstance(), attributes.getName(), 2)); + break; + case CHECKBOX: + options.add(new ConfigCheckbox(getFieldOfProperty(option), option.getInstance(), attributes.getName(), 2)); + break; + case PARAGRAPH: + case TEXT: + options.add(new ConfigTextBox(getFieldOfProperty(option), option.getInstance(), attributes.getName(), 2, attributes.getPlaceholder(), attributes.getProtected(), attributes.getType() == PropertyType.PARAGRAPH)); + break; + case SELECTOR: + options.add(new ConfigDropdown(getFieldOfProperty(option), option.getInstance(), attributes.getName(), 2, attributes.getOptions().toArray(new String[0]))); + break; + case PERCENT_SLIDER: + options.add(new ConfigSlider(getFieldOfProperty(option), option.getInstance(), attributes.getName(), 2, 0, 1, 0)); + break; + case DECIMAL_SLIDER: + options.add(new ConfigSlider(getFieldOfProperty(option), option.getInstance(), attributes.getName(), 2, attributes.getMinF(), attributes.getMaxF(), 0)); + break; + case SLIDER: + options.add(new ConfigSlider(getFieldOfProperty(option), option.getInstance(), attributes.getName(), 2, attributes.getMin(), attributes.getMax(), 0)); + break; + /*case COLOR: TODO: find a way to go from Color to OneColor + options.add(new ConfigColorElement(getFieldOfProperty(option), option.getInstance(), attributes.getName(), 2)); + break;*/ + case BUTTON: + options.add(new ConfigButton(() -> ((CallablePropertyValue) option.getValue()).invoke(option.getInstance()), option.getInstance(), attributes.getName(), 2, attributes.getPlaceholder())); + break; + } + if (attributes.getType() == PropertyType.SWITCH || attributes.getType() == PropertyType.CHECKBOX) { + optionNames.put(PropertyKt.fullPropertyPath(option.getAttributesExt()), options.get(options.size() - 1)); + } + } + } + + private Field getFieldOfProperty(PropertyData data) { + if (data.getValue() instanceof FieldBackedPropertyValue) { + FieldBackedPropertyValue fieldBackedPropertyValue = (FieldBackedPropertyValue) data.getValue(); + try { + Field field = fieldBackedPropertyValue.getClass().getDeclaredField("field"); + field.setAccessible(true); + return (Field) field.get(fieldBackedPropertyValue); + } catch (IllegalAccessException | NoSuchFieldException e) { + throw new RuntimeException(e); + } + } else if (data.getValue() instanceof ValueBackedPropertyValue) { + ValueBackedPropertyValue valueBackedPropertyValue = (ValueBackedPropertyValue) data.getValue(); + try { + Field field = valueBackedPropertyValue.getClass().getDeclaredField("obj"); + field.setAccessible(true); + return (Field) field.get(valueBackedPropertyValue); + } catch (IllegalAccessException | NoSuchFieldException e) { + throw new RuntimeException(e); + } + } else if (data.getValue() instanceof KPropertyBackedPropertyValue) { + KPropertyBackedPropertyValue kPropertyBackedPropertyValue = (KPropertyBackedPropertyValue) data.getValue(); + try { + Field field = kPropertyBackedPropertyValue.getClass().getDeclaredField("property"); + field.setAccessible(true); + KMutableProperty0 property = (KMutableProperty0) field.get(kPropertyBackedPropertyValue); + return ReflectJvmMapping.getJavaField(property); + } catch (IllegalAccessException | NoSuchFieldException e) { + throw new RuntimeException(e); + } + } else throw new RuntimeException("Unknown property value type: " + data.getValue().getClass()); + } + + @SuppressWarnings("unused") + public void addDependency(PropertyData property, PropertyData dependency) { + BasicOption option = optionNames.get(PropertyKt.fullPropertyPath(property.getAttributesExt())); + if (option != null) { + option.setDependency(() -> Objects.equals(dependency.getValue().getValue(vigilant), true)); + } + } +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/compatibility/VigilantAccessor.java b/src/main/java/cc/polyfrost/oneconfig/config/compatibility/VigilantAccessor.java new file mode 100644 index 0000000..4c79a21 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/compatibility/VigilantAccessor.java @@ -0,0 +1,7 @@ +package cc.polyfrost.oneconfig.config.compatibility; + +import gg.essential.vigilance.data.PropertyCollector; + +public interface VigilantAccessor { + PropertyCollector getPropertyCollector(); +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/core/OneKeyBind.java b/src/main/java/cc/polyfrost/oneconfig/config/core/OneKeyBind.java index d455411..d62247c 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/core/OneKeyBind.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/core/OneKeyBind.java @@ -1,6 +1,6 @@ package cc.polyfrost.oneconfig.config.core; -import gg.essential.universal.UKeyboard; +import cc.polyfrost.oneconfig.libs.universal.UKeyboard; import java.util.ArrayList; diff --git a/src/main/java/cc/polyfrost/oneconfig/config/data/Mod.java b/src/main/java/cc/polyfrost/oneconfig/config/data/Mod.java index e38c062..c7e86cd 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/data/Mod.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/data/Mod.java @@ -2,6 +2,8 @@ package cc.polyfrost.oneconfig.config.data; import cc.polyfrost.oneconfig.config.interfaces.Config; +import java.util.ArrayList; + public class Mod { public final String name; public final ModType modType; @@ -10,6 +12,7 @@ public class Mod { public Config config; public final OptionPage defaultPage; public boolean isShortCut = false; + private static final ArrayList mods = new ArrayList<>(); /** * @param name Friendly name of the mod @@ -18,10 +21,18 @@ public class Mod { * @param version Version of the mod */ public Mod(String name, ModType modType, String creator, String version) { + int i = 1; + for (Mod mod : mods) { + if (mod.name.startsWith(name)) { + ++i; + name = name + " " + i; + } + } this.name = name; this.modType = modType; this.creator = creator; this.version = version; this.defaultPage = new OptionPage(name, this); + mods.add(this); } } diff --git a/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java b/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java index 694404a..49d2049 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/interfaces/Config.java @@ -10,9 +10,8 @@ import cc.polyfrost.oneconfig.gui.elements.config.*; import cc.polyfrost.oneconfig.gui.pages.ModConfigPage; import cc.polyfrost.oneconfig.hud.BasicHud; import cc.polyfrost.oneconfig.hud.HudCore; -import cc.polyfrost.oneconfig.lwjgl.RenderManager; import com.google.gson.*; -import gg.essential.universal.UScreen; +import cc.polyfrost.oneconfig.libs.universal.UScreen; import java.io.*; import java.lang.reflect.Field; @@ -20,14 +19,13 @@ import java.lang.reflect.Modifier; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.*; -import java.util.function.Consumer; import java.util.function.Supplier; public class Config { transient protected final String configFile; transient protected final Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).setPrettyPrinting().create(); - transient private Mod mod; - final transient private HashMap optionNames = new HashMap<>(); + transient public Mod mod; + public final transient HashMap optionNames = new HashMap<>(); public boolean enabled = true; /** @@ -35,8 +33,17 @@ public class Config { * @param configFile file where config is stored */ public Config(Mod modData, String configFile) { + this(modData, configFile, true); + } + + /** + * @param modData information about the mod + * @param configFile file where config is stored + * @param initialize whether to load the config immediately or not + */ + public Config(Mod modData, String configFile, boolean initialize) { this.configFile = configFile; - init(modData); + if (initialize) init(modData); } public void init(Mod mod) { diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/HudGui.java b/src/main/java/cc/polyfrost/oneconfig/gui/HudGui.java index e81fb86..4595725 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/HudGui.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/HudGui.java @@ -4,9 +4,9 @@ import cc.polyfrost.oneconfig.config.core.ConfigCore; import cc.polyfrost.oneconfig.hud.BasicHud; import cc.polyfrost.oneconfig.hud.HudCore; import cc.polyfrost.oneconfig.lwjgl.RenderManager; -import gg.essential.universal.UKeyboard; -import gg.essential.universal.UMatrixStack; -import gg.essential.universal.UScreen; +import cc.polyfrost.oneconfig.libs.universal.UKeyboard; +import cc.polyfrost.oneconfig.libs.universal.UMatrixStack; +import cc.polyfrost.oneconfig.libs.universal.UScreen; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java b/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java index 66bc2cd..d0e0625 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java @@ -14,11 +14,10 @@ import cc.polyfrost.oneconfig.lwjgl.scissor.Scissor; import cc.polyfrost.oneconfig.lwjgl.scissor.ScissorManager; import cc.polyfrost.oneconfig.utils.InputUtils; import cc.polyfrost.oneconfig.utils.MathUtils; -import gg.essential.universal.*; +import cc.polyfrost.oneconfig.libs.universal.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.lwjgl.input.Mouse; -import org.lwjgl.nanovg.NanoVG; import java.util.ArrayList; @@ -82,7 +81,7 @@ public class OneConfigGui extends UScreen { scale = Math.min(Math.min(1f, UResolution.getWindowWidth() / 1280f), Math.min(1f, UResolution.getWindowHeight() / 800f)); int x = (int) ((UResolution.getWindowWidth() - 1280 * scale) / 2f / scale); int y = (int) ((UResolution.getWindowHeight() - 800 * scale) / 2f / scale); - NanoVG.nvgScale(vg, scale, scale); + RenderManager.scale(vg, scale, scale); if (OneConfigConfig.ROUNDED_CORNERS) { RenderManager.drawRoundedRect(vg, x + 224, y, 1056, 800, OneConfigConfig.GRAY_800, OneConfigConfig.CORNER_RADIUS_WIN); RenderManager.drawRoundedRect(vg, x, y, 244, 800, OneConfigConfig.GRAY_900_80, OneConfigConfig.CORNER_RADIUS_WIN); @@ -103,22 +102,22 @@ public class OneConfigGui extends UScreen { if (previousPages.size() == 0) { backArrow.disable(true); - NanoVG.nvgGlobalAlpha(vg, 0.5f); + RenderManager.withAlpha(vg, 0.5f); } else { backArrow.disable(false); - if (!backArrow.isHovered() || Mouse.isButtonDown(0)) NanoVG.nvgGlobalAlpha(vg, 0.8f); + if (!backArrow.isHovered() || Mouse.isButtonDown(0)) RenderManager.withAlpha(vg, 0.8f); } RenderManager.drawSvg(vg, SVGs.ARROW_CIRCLE_LEFT, x + 249, y + 25, 22, 22); - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); if (nextPages.size() == 0) { forwardArrow.disable(true); - NanoVG.nvgGlobalAlpha(vg, 0.5f); + RenderManager.withAlpha(vg, 0.5f); } else { forwardArrow.disable(false); - if (!forwardArrow.isHovered() || Mouse.isButtonDown(0)) NanoVG.nvgGlobalAlpha(vg, 0.8f); + if (!forwardArrow.isHovered() || Mouse.isButtonDown(0)) RenderManager.withAlpha(vg, 0.8f); } RenderManager.drawSvg(vg, SVGs.ARROW_CIRCLE_RIGHT, x + 289, y + 25, 22, 22); - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); if (backArrow.isClicked() && previousPages.size() > 0) { try { @@ -138,7 +137,7 @@ public class OneConfigGui extends UScreen { Scissor scissor = ScissorManager.scissor(vg, x + 224, y + 88, 1056, 698); if (prevPage != null) { - pageProgress = MathUtils.easeInOutCirc(50, pageProgress, 832 - pageProgress, 600); + pageProgress = MathUtils.easeInOutCirc(50, pageProgress, 832 - pageProgress, 600, deltaTime); prevPage.scrollWithDraw(vg, (int) (x - pageProgress), y + 72); RenderManager.drawLine(vg, (int) (x - pageProgress + 1055), y + 72, (int) (x - pageProgress + 1057), y + 800, 2, OneConfigConfig.GRAY_700); // TODO might remove this currentPage.scrollWithDraw(vg, (int) (x - pageProgress + 1056), y + 72); @@ -225,7 +224,7 @@ public class OneConfigGui extends UScreen { /** * initialize a new ColorSelector and add it to the draw script. This method is used to make sure it is always rendered on top. * - * @implNote Correct usage: OneConfigGui.INSTANCE.initColorSelector(new ColorSelector(color, InputUtils.mouseX(), InputUtils.mouseY())); + * Correct usage: OneConfigGui.INSTANCE.initColorSelector(new ColorSelector(color, InputUtils.mouseX(), InputUtils.mouseY())); */ public void initColorSelector(ColorSelector colorSelector) { currentColorSelector = colorSelector; diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java b/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java index 059e69d..11e9c6e 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java @@ -6,10 +6,9 @@ import cc.polyfrost.oneconfig.gui.pages.HomePage; import cc.polyfrost.oneconfig.gui.pages.ModsPage; import cc.polyfrost.oneconfig.lwjgl.RenderManager; import cc.polyfrost.oneconfig.lwjgl.font.Fonts; -import cc.polyfrost.oneconfig.lwjgl.image.Images; import cc.polyfrost.oneconfig.lwjgl.image.SVGs; import cc.polyfrost.oneconfig.utils.MathUtils; -import gg.essential.universal.UScreen; +import cc.polyfrost.oneconfig.libs.universal.UScreen; import java.util.ArrayList; import java.util.List; @@ -38,7 +37,7 @@ public class SideBar { } public void draw(long vg, int x, int y) { - currentY = MathUtils.easeInOutCirc(50, currentY, targetY - currentY, 400); + currentY = MathUtils.easeInOutCirc(50, currentY, targetY - currentY, 400, OneConfigGui.INSTANCE.getDeltaTime()); RenderManager.drawRoundedRect(vg, x + 16, y + currentY, 192, 36, OneConfigConfig.BLUE_600, OneConfigConfig.CORNER_RADIUS); int i = 0; if (targetY == 0) { diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicElement.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicElement.java index 07c4a04..bcfebd3 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicElement.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicElement.java @@ -1,5 +1,6 @@ package cc.polyfrost.oneconfig.gui.elements; +import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.lwjgl.RenderManager; import cc.polyfrost.oneconfig.utils.ColorUtils; import cc.polyfrost.oneconfig.utils.InputUtils; diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java index dc257a8..3b37b53 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java @@ -129,7 +129,7 @@ public class ColorSelector { } i += 128; } - percentMove = MathUtils.easeOut(percentMove, mode, 100f); + percentMove = MathUtils.easeOut(percentMove, mode, 100f, OneConfigGui.INSTANCE.getDeltaTime()); RenderManager.drawString(vg, "HSB Box", x + 55, y + 81, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM); RenderManager.drawString(vg, "Color Wheel", x + 172.5f, y + 81, OneConfigConfig.WHITE, 12f, Fonts.MEDIUM); diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ModCard.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ModCard.java index 4942f9f..9518579 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ModCard.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ModCard.java @@ -8,16 +8,14 @@ import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.gui.pages.ModConfigPage; import cc.polyfrost.oneconfig.lwjgl.RenderManager; import cc.polyfrost.oneconfig.lwjgl.font.Fonts; -import cc.polyfrost.oneconfig.lwjgl.image.Images; import cc.polyfrost.oneconfig.lwjgl.image.SVGs; import cc.polyfrost.oneconfig.utils.ColorUtils; import cc.polyfrost.oneconfig.utils.InputUtils; -import gg.essential.universal.wrappers.UPlayer; +import cc.polyfrost.oneconfig.libs.universal.wrappers.UPlayer; import net.minecraftforge.client.ClientCommandHandler; import net.minecraftforge.fml.common.ModMetadata; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lwjgl.nanovg.NanoVG; import java.util.ArrayList; @@ -44,7 +42,7 @@ public class ModCard extends BasicElement { @Override public void draw(long vg, int x, int y) { - if (disabled) NanoVG.nvgGlobalAlpha(vg, 0.5f); + if (disabled) RenderManager.withAlpha(vg, 0.5f); RenderManager.drawRoundedRectVaried(vg, x, y, width, 87, colorGray, 12f, 12f, 0f, 0f); RenderManager.drawRoundedRectVaried(vg, x, y + 87, width, 32, colorPrimary, 0f, 0f, 12f, 12f); RenderManager.drawLine(vg, x, y + 86, x + width, y + 86, 2, OneConfigConfig.GRAY_300); @@ -80,15 +78,16 @@ public class ModCard extends BasicElement { if (!active & disabled) toggled = false; active = toggled; - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); } public void onClick() { if (isHoveredMain) { for (Mod data : OneConfig.loadedMods) { - if (data.modType != ModType.THIRD_PARTY) { + if (!data.isShortCut) { if (data.name.equalsIgnoreCase(modData.name)) { OneConfigGui.INSTANCE.openPage(new ModConfigPage(data.defaultPage)); + return; } } } diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigButton.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigButton.java index 2e8cb4f..d2a996d 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigButton.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigButton.java @@ -5,36 +5,43 @@ import cc.polyfrost.oneconfig.config.interfaces.BasicOption; import cc.polyfrost.oneconfig.gui.elements.BasicButton; import cc.polyfrost.oneconfig.lwjgl.RenderManager; import cc.polyfrost.oneconfig.lwjgl.font.Fonts; -import org.lwjgl.nanovg.NanoVG; import java.lang.reflect.Field; public class ConfigButton extends BasicOption { private final BasicButton button; + public ConfigButton(Runnable runnable, Object parent, String name, int size, String text) { + super(null, parent, name, size); + this.button = new BasicButton(size == 1 ? 128 : 256, 32, text, null, null, 1, BasicButton.ALIGNMENT_CENTER, runnable); + } + public ConfigButton(Field field, Object parent, String name, int size, String text) { super(field, parent, name, size); - Runnable runnable = () -> { - }; - try { - runnable = (Runnable) get(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - this.button = new BasicButton(size == 1 ? 128 : 256, 32, text, null, null, 1, BasicButton.ALIGNMENT_CENTER, runnable); + this.button = new BasicButton(size == 1 ? 128 : 256, 32, text, null, null, 1, BasicButton.ALIGNMENT_CENTER, getRunnableFromField(field, parent)); } @Override public void draw(long vg, int x, int y) { button.disable(!isEnabled()); - if(!isEnabled()) NanoVG.nvgGlobalAlpha(vg, 0.5f); + if(!isEnabled()) RenderManager.withAlpha(vg, 0.5f); RenderManager.drawString(vg, name, x, y + 17, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM); button.draw(vg, x + (size == 1 ? 352 : 736), y); - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); } @Override public int getHeight() { return 32; } + + private static Runnable getRunnableFromField(Field field, Object parent) { + Runnable runnable = () -> {}; + try { + runnable = (Runnable) field.get(parent); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return runnable; + } } diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigCheckbox.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigCheckbox.java index 36cd13f..4c864ec 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigCheckbox.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigCheckbox.java @@ -2,14 +2,13 @@ package cc.polyfrost.oneconfig.gui.elements.config; import cc.polyfrost.oneconfig.config.OneConfigConfig; import cc.polyfrost.oneconfig.config.interfaces.BasicOption; +import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.lwjgl.RenderManager; import cc.polyfrost.oneconfig.lwjgl.font.Fonts; -import cc.polyfrost.oneconfig.lwjgl.image.Images; import cc.polyfrost.oneconfig.lwjgl.image.SVGs; import cc.polyfrost.oneconfig.utils.ColorUtils; import cc.polyfrost.oneconfig.utils.InputUtils; import cc.polyfrost.oneconfig.utils.MathUtils; -import org.lwjgl.nanovg.NanoVG; import java.awt.*; import java.lang.reflect.Field; @@ -24,7 +23,7 @@ public class ConfigCheckbox extends BasicOption { @Override public void draw(long vg, int x, int y) { - if (!isEnabled()) NanoVG.nvgGlobalAlpha(vg, 0.5f); + if (!isEnabled()) RenderManager.withAlpha(vg, 0.5f); boolean toggled = false; try { toggled = (boolean) get(); @@ -48,7 +47,7 @@ public class ConfigCheckbox extends BasicOption { RenderManager.drawHollowRoundRect(vg, x, y + 4, 23.5f, 23.5f, OneConfigConfig.GRAY_300, 6f, 1f); // the 0.5f is to make it look better ok } RenderManager.drawString(vg, name, x + 32, y + 17, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM); - percentOn = MathUtils.clamp(MathUtils.easeOut(percentOn, toggled ? 1f : 0f, 50f)); + percentOn = MathUtils.clamp(MathUtils.easeOut(percentOn, toggled ? 1f : 0f, 50f, OneConfigGui.INSTANCE.getDeltaTime())); if (percentOn != 0 && percentOn != 1f) { RenderManager.drawRoundedRect(vg, x, y + 4, 24, 24, ColorUtils.setAlpha(OneConfigConfig.BLUE_500, (int) (percentOn * 255)), 6f); RenderManager.drawSvg(vg, SVGs.CHECKBOX_TICK, x, y + 4, 24, 24, new Color(1f, 1f, 1f, percentOn).getRGB()); @@ -57,7 +56,7 @@ public class ConfigCheckbox extends BasicOption { RenderManager.drawSvg(vg, SVGs.CHECKBOX_TICK, x, y + 4, 24, 24); } if(percentOn != 0 && hover) RenderManager.drawHollowRoundRect(vg, x - 1, y + 3, 24, 24, OneConfigConfig.BLUE_600, 6f, 2f); - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); } @Override diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java index f6041c9..d39566d 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java @@ -2,14 +2,13 @@ package cc.polyfrost.oneconfig.gui.elements.config; import cc.polyfrost.oneconfig.config.OneConfigConfig; import cc.polyfrost.oneconfig.config.interfaces.BasicOption; +import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.lwjgl.RenderManager; import cc.polyfrost.oneconfig.lwjgl.font.Fonts; -import cc.polyfrost.oneconfig.lwjgl.image.Images; import cc.polyfrost.oneconfig.lwjgl.image.SVGs; import cc.polyfrost.oneconfig.utils.ColorUtils; import cc.polyfrost.oneconfig.utils.InputUtils; import org.lwjgl.input.Mouse; -import org.lwjgl.nanovg.NanoVG; import java.awt.*; import java.lang.reflect.Field; @@ -27,7 +26,7 @@ public class ConfigDropdown extends BasicOption { // TODO: remove dividers and f @Override public void draw(long vg, int x, int y) { - if (!isEnabled()) NanoVG.nvgGlobalAlpha(vg, 0.5f); + if (!isEnabled()) RenderManager.withAlpha(vg, 0.5f); RenderManager.drawString(vg, name, x, y + 16, OneConfigConfig.WHITE_90, 14f, Fonts.MEDIUM); boolean hovered; @@ -49,7 +48,7 @@ public class ConfigDropdown extends BasicOption { // TODO: remove dividers and f } catch (IllegalAccessException ignored) { } - if (hovered && Mouse.isButtonDown(0)) NanoVG.nvgGlobalAlpha(vg, 0.8f); + if (hovered && Mouse.isButtonDown(0)) RenderManager.withAlpha(vg, 0.8f); if (size == 1) { RenderManager.drawRoundedRect(vg, x + 224, y, 256, 32, backgroundColor, 12); RenderManager.drawString(vg, options[selected], x + 236, y + 16, OneConfigConfig.WHITE_80, 14f, Fonts.MEDIUM); @@ -61,7 +60,7 @@ public class ConfigDropdown extends BasicOption { // TODO: remove dividers and f RenderManager.drawRoundedRect(vg, x + 964, y + 4, 24, 24, OneConfigConfig.BLUE_600, 8); RenderManager.drawSvg(vg, SVGs.DROPDOWN_LIST, x + 964, y + 4, 24, 24); } - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); } @Override @@ -79,15 +78,15 @@ public class ConfigDropdown extends BasicOption { // TODO: remove dividers and f } catch (IllegalAccessException ignored) { } - if (hovered && Mouse.isButtonDown(0)) NanoVG.nvgGlobalAlpha(vg, 0.8f); + if (hovered && Mouse.isButtonDown(0)) RenderManager.withAlpha(vg, 0.8f); if (size == 1) { RenderManager.drawRoundedRect(vg, x + 224, y, 256, 32, backgroundColor, 12); RenderManager.drawString(vg, options[selected], x + 236, y + 16, OneConfigConfig.WHITE_80, 14f, Fonts.MEDIUM); - if (hovered && Mouse.isButtonDown(0)) NanoVG.nvgGlobalAlpha(vg, 0.8f); + if (hovered && Mouse.isButtonDown(0)) RenderManager.withAlpha(vg, 0.8f); RenderManager.drawRoundedRect(vg, x + 452, y + 4, 24, 24, OneConfigConfig.BLUE_600, 8); RenderManager.drawSvg(vg, SVGs.DROPDOWN_LIST, x + 452, y + 4, 24, 24); - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); RenderManager.drawRoundedRect(vg, x + 224, y + 48, 256, options.length * 32 + 8, OneConfigConfig.GRAY_700, 12); RenderManager.drawHollowRoundRect(vg, x + 223, y + 47, 258, options.length * 32 + 10, new Color(204, 204, 204, 77).getRGB(), 12, 1); int optionY = y + 52; @@ -115,11 +114,11 @@ public class ConfigDropdown extends BasicOption { // TODO: remove dividers and f } else { RenderManager.drawRoundedRect(vg, x + 352, y, 640, 32, backgroundColor, 12); RenderManager.drawString(vg, options[selected], x + 364, y + 16, OneConfigConfig.WHITE_80, 14f, Fonts.MEDIUM); - if (hovered && Mouse.isButtonDown(0)) NanoVG.nvgGlobalAlpha(vg, 0.8f); + if (hovered && Mouse.isButtonDown(0)) RenderManager.withAlpha(vg, 0.8f); RenderManager.drawRoundedRect(vg, x + 964, y + 4, 24, 24, OneConfigConfig.BLUE_600, 8); RenderManager.drawSvg(vg, SVGs.DROPDOWN_LIST, x + 964, y + 4, 24, 24); - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); RenderManager.drawRoundedRect(vg, x + 352, y + 48, 640, options.length * 32 + 8, OneConfigConfig.GRAY_700, 12); RenderManager.drawHollowRoundRect(vg, x + 351, y + 47, 642, options.length * 32 + 10, new Color(204, 204, 204, 77).getRGB(), 12, 1); int optionY = y + 52; @@ -146,7 +145,7 @@ public class ConfigDropdown extends BasicOption { // TODO: remove dividers and f optionY += 32; } } - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); } @Override diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDualOption.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDualOption.java index 599c094..cc1af3c 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDualOption.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDualOption.java @@ -2,12 +2,12 @@ package cc.polyfrost.oneconfig.gui.elements.config; import cc.polyfrost.oneconfig.config.OneConfigConfig; import cc.polyfrost.oneconfig.config.interfaces.BasicOption; +import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.lwjgl.RenderManager; import cc.polyfrost.oneconfig.lwjgl.font.Fonts; import cc.polyfrost.oneconfig.utils.ColorUtils; import cc.polyfrost.oneconfig.utils.InputUtils; import cc.polyfrost.oneconfig.utils.MathUtils; -import org.lwjgl.nanovg.NanoVG; import java.lang.reflect.Field; @@ -36,7 +36,7 @@ public class ConfigDualOption extends BasicOption { toggled = (boolean) get(); } catch (IllegalAccessException ignored) { } - if (!isEnabled()) NanoVG.nvgGlobalAlpha(vg, 0.5f); + if (!isEnabled()) RenderManager.withAlpha(vg, 0.5f); boolean hovered = InputUtils.isAreaHovered(x + 226, y, 256, 32) && isEnabled(); colorSelected = ColorUtils.smoothColor(colorSelected, OneConfigConfig.BLUE_600, OneConfigConfig.BLUE_500, hovered, 40f); colorUnselected = ColorUtils.smoothColor(colorUnselected, OneConfigConfig.GRAY_500, OneConfigConfig.GRAY_400, hovered, 40f); @@ -47,7 +47,7 @@ public class ConfigDualOption extends BasicOption { RenderManager.drawString(vg, left, x + 290 - RenderManager.getTextWidth(vg, left, 12f, Fonts.MEDIUM) / 2, y + 17, OneConfigConfig.WHITE_90, 12f, Fonts.MEDIUM); RenderManager.drawString(vg, right, x + 418 - RenderManager.getTextWidth(vg, right, 12f, Fonts.MEDIUM) / 2, y + 17, OneConfigConfig.WHITE_90, 12f, Fonts.MEDIUM); - NanoVG.nvgGlobalAlpha(vg, 1); + RenderManager.withAlpha(vg, 1); if (hovered && InputUtils.isClicked()) { toggled = !toggled; try { @@ -57,6 +57,6 @@ public class ConfigDualOption extends BasicOption { e.printStackTrace(); } } - percentMove = MathUtils.clamp(MathUtils.easeOut(percentMove, toggled ? 1f : 0f, 75)); + percentMove = MathUtils.clamp(MathUtils.easeOut(percentMove, toggled ? 1f : 0f, 75, OneConfigGui.INSTANCE.getDeltaTime())); } } diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java index 5b3efae..0ddcab3 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java @@ -7,10 +7,8 @@ import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.gui.elements.BasicButton; import cc.polyfrost.oneconfig.lwjgl.RenderManager; import cc.polyfrost.oneconfig.lwjgl.font.Fonts; -import cc.polyfrost.oneconfig.lwjgl.image.Images; import cc.polyfrost.oneconfig.lwjgl.image.SVGs; -import gg.essential.universal.UKeyboard; -import org.lwjgl.nanovg.NanoVG; +import cc.polyfrost.oneconfig.libs.universal.UKeyboard; import java.lang.reflect.Field; @@ -26,7 +24,7 @@ public class ConfigKeyBind extends BasicOption { @Override public void draw(long vg, int x, int y) { - if (!isEnabled()) NanoVG.nvgGlobalAlpha(vg, 0.5f); + if (!isEnabled()) RenderManager.withAlpha(vg, 0.5f); RenderManager.drawString(vg, name, x, y + 17, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM); OneKeyBind keyBind = getKeyBind(); String text = keyBind.getDisplay(); @@ -47,7 +45,7 @@ public class ConfigKeyBind extends BasicOption { } else if (text.equals("")) text = "None"; button.setText(text); button.draw(vg, x + (size == 1 ? 224 : 736), y); - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); } @Override diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigPageButton.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigPageButton.java index 81cd946..5878cc0 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigPageButton.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigPageButton.java @@ -7,12 +7,10 @@ import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.gui.pages.ModConfigPage; import cc.polyfrost.oneconfig.lwjgl.RenderManager; import cc.polyfrost.oneconfig.lwjgl.font.Fonts; -import cc.polyfrost.oneconfig.lwjgl.image.Images; import cc.polyfrost.oneconfig.lwjgl.image.SVGs; import cc.polyfrost.oneconfig.utils.ColorUtils; import cc.polyfrost.oneconfig.utils.InputUtils; import org.lwjgl.input.Mouse; -import org.lwjgl.nanovg.NanoVG; import java.lang.reflect.Field; @@ -34,8 +32,8 @@ public class ConfigPageButton extends BasicOption { boolean clicked = hovered && InputUtils.isClicked(); backgroundColor = ColorUtils.smoothColor(backgroundColor, OneConfigConfig.GRAY_500, OneConfigConfig.GRAY_400, hovered, 100); - if (hovered && Mouse.isButtonDown(0)) NanoVG.nvgGlobalAlpha(vg, 0.8f); - if (!isEnabled()) NanoVG.nvgGlobalAlpha(vg, 0.5f); + if (hovered && Mouse.isButtonDown(0)) RenderManager.withAlpha(vg, 0.8f); + if (!isEnabled()) RenderManager.withAlpha(vg, 0.5f); RenderManager.drawRoundedRect(vg, x - 16, y, 1024, height, backgroundColor, 20); RenderManager.drawString(vg, name, x + 10, y + 32, OneConfigConfig.WHITE_90, 24, Fonts.MEDIUM); @@ -44,7 +42,7 @@ public class ConfigPageButton extends BasicOption { RenderManager.drawSvg(vg, SVGs.CHEVRON_RIGHT, x + 981f, y + (description.equals("") ? 20f : 36f), 13, 22); if (clicked) OneConfigGui.INSTANCE.openPage(new ModConfigPage(page)); - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); } @Override diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java index c9f2691..3f8a2d9 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java @@ -8,7 +8,6 @@ import cc.polyfrost.oneconfig.lwjgl.font.Fonts; import cc.polyfrost.oneconfig.utils.InputUtils; import cc.polyfrost.oneconfig.utils.MathUtils; import org.lwjgl.input.Mouse; -import org.lwjgl.nanovg.NanoVG; import java.lang.reflect.Field; @@ -34,7 +33,7 @@ public class ConfigSlider extends BasicOption { float value = 0; boolean hovered = InputUtils.isAreaHovered(x + 352, y, 512, 32) && isEnabled(); inputField.disable(!isEnabled()); - if (!isEnabled()) NanoVG.nvgGlobalAlpha(vg, 0.5f); + if (!isEnabled()) RenderManager.withAlpha(vg, 0.5f); boolean isMouseDown = Mouse.isButtonDown(0); if (hovered && isMouseDown && !mouseWasDown) dragging = true; mouseWasDown = isMouseDown; @@ -80,7 +79,7 @@ public class ConfigSlider extends BasicOption { if (step == 0) RenderManager.drawRoundedRect(vg, xCoordinate - 12, y + 4, 24, 24, OneConfigConfig.WHITE, 12f); else RenderManager.drawRoundedRect(vg, xCoordinate - 4, y + 4, 8, 24, OneConfigConfig.WHITE, 4f); inputField.draw(vg, x + 892, y); - NanoVG.nvgGlobalAlpha(vg, 1f); + RenderManager.withAlpha(vg, 1f); } private int getStepCoordinate(int xCoordinate, int x) { diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSwitch.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSwitch.java index 92961a6..5eadad2 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSwitch.java +++ b/src/main/java/cc/polyfro