diff --git a/build.gradle.kts b/build.gradle.kts index 4866d13..c643f82 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,7 +14,7 @@ plugins { } group = "dev.isxander" -version = "2.13.0" +version = "2.13.1" repositories { mavenCentral() diff --git a/changelogs/2.13.1.md b/changelogs/2.13.1.md new file mode 100644 index 0000000..17e163e --- /dev/null +++ b/changelogs/2.13.1.md @@ -0,0 +1 @@ +- Update to support Controlify 2.0 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index beb5b5a..ffe4c3e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ ktoml = "0.5.1" yet_another_config_lib = "3.3.1+1.20.4" mod_menu = "9.0.0" mixin_extras = "0.3.2" -controlify = "1.7.0+1.20.4" +controlify = "2.0.0-beta.1+1.20.4" settxi = "2.10.6" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 27313fb..fce403e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/kotlin/dev/isxander/zoomify/Zoomify.kt b/src/main/kotlin/dev/isxander/zoomify/Zoomify.kt index 5147015..09db4c7 100644 --- a/src/main/kotlin/dev/isxander/zoomify/Zoomify.kt +++ b/src/main/kotlin/dev/isxander/zoomify/Zoomify.kt @@ -3,6 +3,7 @@ package dev.isxander.zoomify import com.mojang.blaze3d.platform.InputConstants import dev.isxander.zoomify.config.* import dev.isxander.zoomify.config.migrator.Migrator +import dev.isxander.zoomify.integrations.constrainModVersionIfLoaded import dev.isxander.zoomify.zoom.* import net.fabricmc.api.ClientModInitializer import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal @@ -72,6 +73,8 @@ object Zoomify : ClientModInitializer { private var displayGui = false override fun onInitializeClient() { + constrainModVersionIfLoaded("controlify", "1.x.x") + // imports on ZoomifySettings diff --git a/src/main/kotlin/dev/isxander/zoomify/config/SettingsGuiFactory.kt b/src/main/kotlin/dev/isxander/zoomify/config/SettingsGuiFactory.kt index fb1a978..b44954b 100644 --- a/src/main/kotlin/dev/isxander/zoomify/config/SettingsGuiFactory.kt +++ b/src/main/kotlin/dev/isxander/zoomify/config/SettingsGuiFactory.kt @@ -109,7 +109,7 @@ fun createSettingsGui(parent: Screen? = null): Screen { controller { opt -> IntegerSliderControllerBuilder.create(opt).apply { range(ZoomifySettings::initialZoom.asSetting().range!!) step(1) - valueFormatter { Component.literal("%dx".format(it)) } + formatValue { Component.literal("%dx".format(it)) } }} updateDemo { v, _ -> initialZoomAmt = v } }.build()) @@ -522,9 +522,9 @@ private fun SliderControllerBuilder.range(range: ClosedRange) where } private fun ValueFormattableController<*, *>.formatSeconds() { - valueFormatter { Component.translatable("zoomify.gui.formatter.seconds", "%.1f".format(it)) } + formatValue { Component.translatable("zoomify.gui.formatter.seconds", "%.1f".format(it)) } } private fun EnumControllerBuilder.formatSettxiEnum() where T : Enum, T : SettingDisplayName { - valueFormatter { Component.translatable(it.displayName) } + formatValue { Component.translatable(it.displayName) } } diff --git a/src/main/kotlin/dev/isxander/zoomify/integrations/ControlifyIntegration.kt b/src/main/kotlin/dev/isxander/zoomify/integrations/ControlifyIntegration.kt index 3510439..d56f631 100644 --- a/src/main/kotlin/dev/isxander/zoomify/integrations/ControlifyIntegration.kt +++ b/src/main/kotlin/dev/isxander/zoomify/integrations/ControlifyIntegration.kt @@ -1,10 +1,11 @@ package dev.isxander.zoomify.integrations import dev.isxander.controlify.api.ControlifyApi +import dev.isxander.controlify.api.bind.ControlifyBindingsApi import dev.isxander.controlify.api.entrypoint.ControlifyEntrypoint import dev.isxander.controlify.api.event.ControlifyEvents import dev.isxander.controlify.api.ingameinput.LookInputModifier -import dev.isxander.controlify.controller.Controller +import dev.isxander.controlify.controller.ControllerEntity import dev.isxander.zoomify.Zoomify import dev.isxander.zoomify.config.ZoomifySettings import net.minecraft.util.Mth @@ -19,11 +20,11 @@ object ControlifyIntegration : ControlifyEntrypoint { } object SensitivityModifier : LookInputModifier { - override fun modifyX(x: Float, controller: Controller<*, *>): Float { + override fun modifyX(x: Float, controller: ControllerEntity): Float { return x * Mth.lerp(ZoomifySettings.relativeSensitivity / 100.0, 1.0, Zoomify.previousZoomDivisor).toFloat() } - override fun modifyY(y: Float, controller: Controller<*, *>): Float { + override fun modifyY(y: Float, controller: ControllerEntity): Float { return y * Mth.lerp(ZoomifySettings.relativeSensitivity / 100.0, 1.0, Zoomify.previousZoomDivisor).toFloat() } } diff --git a/src/main/kotlin/dev/isxander/zoomify/integrations/IntegrationHelper.kt b/src/main/kotlin/dev/isxander/zoomify/integrations/IntegrationHelper.kt new file mode 100644 index 0000000..2b325ef --- /dev/null +++ b/src/main/kotlin/dev/isxander/zoomify/integrations/IntegrationHelper.kt @@ -0,0 +1,16 @@ +package dev.isxander.zoomify.integrations + +import net.fabricmc.loader.api.FabricLoader +import net.fabricmc.loader.api.metadata.version.VersionPredicate + +fun constrainModVersionIfLoaded(modId: String, constraint: String) { + val predicate = VersionPredicate.parse(constraint) + + val modContainer = FabricLoader.getInstance().getModContainer(modId) + if (modContainer.isPresent) { + val version = modContainer.get().metadata.version + if (!predicate.test(version)) { + throw IllegalStateException("Mod $modId is not constrained to version $constraint") + } + } +}