Skip to content

Commit

Permalink
Use YACL config instead of Settxi
Browse files Browse the repository at this point in the history
  • Loading branch information
isXander committed Jun 14, 2024
1 parent 4d5c8f4 commit 73bd8d8
Show file tree
Hide file tree
Showing 19 changed files with 546 additions and 869 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class AbstractClientPlayerEntityMixin {
at = @At(value = "CONSTANT", args = "floatValue=0.1f")
)
private float modifySpyglassFovMultiplier(float multiplier) {
if (ZoomifySettings.INSTANCE.getSpyglassBehaviour() != SpyglassBehaviour.COMBINE)
if (ZoomifySettings.INSTANCE.getSpyglassBehaviour().get() != SpyglassBehaviour.COMBINE)
return 1f;
return multiplier;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,13 @@ public class SpyglassItemMixin {
)
)
private boolean shouldPlaySpyglassSound(Player instance, SoundEvent event, float volume, float pitch) {
if (ZoomifySettings.INSTANCE.getSpyglassSoundBehaviour() == SoundBehaviour.NEVER)
if (ZoomifySettings.INSTANCE.getSpyglassSoundBehaviour().get() == SoundBehaviour.NEVER)
return false;

if (ZoomifySettings.INSTANCE.getSpyglassSoundBehaviour() == SoundBehaviour.WITH_OVERLAY && ZoomifySettings.INSTANCE.getSpyglassOverlayVisibility() == OverlayVisibility.NEVER)
if (ZoomifySettings.INSTANCE.getSpyglassSoundBehaviour().get() == SoundBehaviour.WITH_OVERLAY
&& ZoomifySettings.INSTANCE.getSpyglassOverlayVisibility().get() == OverlayVisibility.NEVER) {
return false;
}

return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ private double modifyFovWithZoom(double fov, Camera camera, float tickDelta, boo
}
)
private float modifyBobbingIntensity(float p) {
if (!ZoomifySettings.INSTANCE.getRelativeViewBobbing())
if (!ZoomifySettings.INSTANCE.getRelativeViewBobbing().get())
return p;

return (float) (p / Mth.lerp(0.2, 1.0, Zoomify.INSTANCE.getPreviousZoomDivisor()));
Expand All @@ -45,7 +45,7 @@ private float modifyBobbingIntensity(float p) {
)
)
private double keepHandFov(double fov, @Local(argsOnly=true) float tickDelta) {
if (!ZoomifySettings.INSTANCE.getAffectHandFov())
if (!ZoomifySettings.INSTANCE.getAffectHandFov().get())
return fov * Zoomify.getZoomDivisor(tickDelta);
return fov;
}
Expand Down
20 changes: 14 additions & 6 deletions src/main/java/dev/isxander/zoomify/mixins/zoom/MouseMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,9 @@ private void scrollStepCounter(CallbackInfo ci /*? if >1.20.1 { */, @Local(ordin
double scrollY = accumulatedScroll;
*//*? } */

if (ZoomifySettings.INSTANCE.getScrollZoom() && Zoomify.INSTANCE.getZooming() && scrollY != 0 && !ZoomifySettings.INSTANCE.getKeybindScrolling()) {
if (ZoomifySettings.INSTANCE.getScrollZoom().get()
&& Zoomify.INSTANCE.getZooming() && scrollY != 0
&& !ZoomifySettings.INSTANCE.getKeybindScrolling()) {
Zoomify.mouseZoom(scrollY);
ci.cancel();
}
Expand All @@ -47,7 +49,9 @@ private void scrollStepCounter(CallbackInfo ci /*? if >1.20.1 { */, @Local(ordin
at = @At(value = "FIELD", target = "Lnet/minecraft/client/Options;smoothCamera:Z")
)
private boolean smoothCameraIfZoom(boolean original) {
return original || Zoomify.INSTANCE.getSecondaryZooming() || (Zoomify.INSTANCE.getZooming() && ZoomifySettings.INSTANCE.getCinematicCamera() > 0);
return original
|| Zoomify.INSTANCE.getSecondaryZooming()
|| (Zoomify.INSTANCE.getZooming() && ZoomifySettings.INSTANCE.getCinematicCamera().get() > 0);
}

@ModifyExpressionValue(
Expand All @@ -60,7 +64,11 @@ private boolean smoothCameraIfZoom(boolean original) {
)
private Object applyRelativeSensitivity(Object genericValue) {
double value = (Double) genericValue;
return value / Mth.lerp(ZoomifySettings.INSTANCE.getRelativeSensitivity() / 100.0, 1.0, Zoomify.INSTANCE.getPreviousZoomDivisor());
return value / Mth.lerp(
ZoomifySettings.INSTANCE.getRelativeSensitivity().get() / 100.0,
1.0,
Zoomify.INSTANCE.getPreviousZoomDivisor()
);
}

@ModifyExpressionValue(
Expand All @@ -71,7 +79,7 @@ private Object applyRelativeSensitivity(Object genericValue) {
)
)
private boolean shouldApplySpyglassSensitivity(boolean isUsingSpyglass) {
if (ZoomifySettings.INSTANCE.getSpyglassBehaviour() != SpyglassBehaviour.COMBINE)
if (ZoomifySettings.INSTANCE.getSpyglassBehaviour().get() != SpyglassBehaviour.COMBINE)
return false;
return isUsingSpyglass;
}
Expand All @@ -85,8 +93,8 @@ private boolean shouldApplySpyglassSensitivity(boolean isUsingSpyglass) {
index = 1
)
private double modifyCinematicSmoothness(double smoother) {
if (Zoomify.INSTANCE.getZooming() && ZoomifySettings.INSTANCE.getCinematicCamera() > 0)
return smoother / (ZoomifySettings.INSTANCE.getCinematicCamera() / 100.0);
if (Zoomify.INSTANCE.getZooming() && ZoomifySettings.INSTANCE.getCinematicCamera().get() > 0)
return smoother / (ZoomifySettings.INSTANCE.getCinematicCamera().get() / 100.0);

return smoother;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ public class GameRendererMixin {
)
)
private boolean shouldHideHUD(boolean hideHUD) {
return hideHUD || (Zoomify.INSTANCE.getSecondaryZooming() && ZoomifySettings.INSTANCE.getSecondaryHideHUDOnZoom());
return hideHUD || (Zoomify.INSTANCE.getSecondaryZooming() && ZoomifySettings.INSTANCE.getSecondaryHideHUDOnZoom().get());
}
}
88 changes: 36 additions & 52 deletions src/main/kotlin/dev/isxander/zoomify/Zoomify.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package dev.isxander.zoomify

import com.mojang.blaze3d.platform.InputConstants
import dev.isxander.controlify.platform.client.PlatformClientUtil
import dev.isxander.yacl3.config.v3.value
import dev.isxander.zoomify.config.*
import dev.isxander.zoomify.config.migrator.Migrator
import dev.isxander.zoomify.integrations.constrainModVersionIfLoaded
import dev.isxander.zoomify.utils.MultiKeySource
import dev.isxander.zoomify.utils.toKeySource
import dev.isxander.zoomify.utils.toast
import dev.isxander.zoomify.zoom.*
import net.fabricmc.api.ClientModInitializer
Expand All @@ -28,58 +26,39 @@ import org.slf4j.LoggerFactory
object Zoomify : ClientModInitializer {
val LOGGER = LoggerFactory.getLogger("Zoomify")!!

val zoomHoldKey = MultiKeySource()
val zoomToggleKey = MultiKeySource()
val secondaryZoomKey = MultiKeySource()

val zoomHoldKeyMapping = KeyMapping(
"zoomify.key.zoom",
InputConstants.KEY_C,
"zoomify.key.category"
)
val zoomToggleKeyMapping = KeyMapping(
"zoomify.key.zoom_toggle",
-1,
"zoomify.key.category"
)
val secondaryZoomKeyMapping = KeyMapping(
"zoomify.key.zoom.secondary",
InputConstants.KEY_F6,
"zoomify.key.category"
)
private val zoomKey = KeyMapping("zoomify.key.zoom", InputConstants.Type.KEYSYM, InputConstants.KEY_C, "zoomify.key.category")
private val secondaryZoomKey = KeyMapping("zoomify.key.zoom.secondary", InputConstants.Type.KEYSYM, InputConstants.KEY_F6, "zoomify.key.category")
private val scrollZoomIn = KeyMapping("zoomify.key.zoom.in", -1, "zoomify.key.category")
private val scrollZoomOut = KeyMapping("zoomify.key.zoom.out", -1, "zoomify.key.category")

var zooming = false
private set
private var zoomToggled = false

private val zoomHelper = ZoomHelper(
TransitionInterpolator(
ZoomifySettings::zoomInTransition,
ZoomifySettings::zoomOutTransition,
ZoomifySettings::zoomInTime,
ZoomifySettings::zoomOutTime
ZoomifySettings.zoomInTransition::value,
ZoomifySettings.zoomOutTransition::value,
ZoomifySettings.zoomInTime::value,
ZoomifySettings.zoomOutTime::value
),
SmoothInterpolator {
Mth.lerp(
ZoomifySettings.scrollZoomSmoothness / 100.0,
ZoomifySettings.scrollZoomSmoothness.value / 100.0,
1.0,
0.1
)
},
initialZoom = ZoomifySettings::initialZoom,
scrollZoomAmount = ZoomifySettings::scrollZoomAmount,
initialZoom = ZoomifySettings.initialZoom::value,
scrollZoomAmount = ZoomifySettings.scrollZoomAmount::value,
maxScrollTiers = Zoomify::maxScrollTiers,
linearLikeSteps = ZoomifySettings::linearLikeSteps,
linearLikeSteps = ZoomifySettings.linearLikeSteps::value,
)

var secondaryZooming = false
private set
private val secondaryZoomHelper = ZoomHelper(
TimedInterpolator(ZoomifySettings::secondaryZoomInTime, ZoomifySettings::secondaryZoomOutTime),
TimedInterpolator(ZoomifySettings.secondaryZoomInTime::value, ZoomifySettings.secondaryZoomOutTime::value),
InstantInterpolator,
initialZoom = ZoomifySettings::secondaryZoomAmount,
initialZoom = ZoomifySettings.secondaryZoomAmount::value,
scrollZoomAmount = { 0 },
maxScrollTiers = { 0 },
linearLikeSteps = { false },
Expand All @@ -96,13 +75,14 @@ object Zoomify : ClientModInitializer {
private var displayGui = false

override fun onInitializeClient() {
// controlify compat only works on 2.x
constrainModVersionIfLoaded("controlify", "2.x.x")

// imports on <init>
ZoomifySettings

zoomHoldKey.addSource(zoomHoldKeyMapping.toKeySource(register = true))
zoomToggleKey.addSource(zoomToggleKeyMapping.toKeySource(register = true))
secondaryZoomKey.addSource(secondaryZoomKeyMapping.toKeySource(register = true))

KeyBindingHelper.registerKeyBinding(zoomKey)
KeyBindingHelper.registerKeyBinding(secondaryZoomKey)
if (ZoomifySettings.keybindScrolling) {
KeyBindingHelper.registerKeyBinding(scrollZoomIn)
KeyBindingHelper.registerKeyBinding(scrollZoomOut)
Expand All @@ -123,12 +103,16 @@ object Zoomify : ClientModInitializer {
private fun tick(minecraft: Minecraft) {
val prevZooming = zooming

if (zoomToggleKey.justPressed) {
zoomToggled = !zoomToggled
when (ZoomifySettings.zoomKeyBehaviour.value) {
ZoomKeyBehaviour.HOLD -> zooming = zoomKey.isDown
ZoomKeyBehaviour.TOGGLE -> {
while (zoomKey.consumeClick()) {
zooming = !zooming
}
}
}
zooming = zoomHoldKey.isDown || zoomToggled

if (secondaryZoomKey.justPressed) {
while (secondaryZoomKey.consumeClick()) {
secondaryZooming = !secondaryZooming
}

Expand Down Expand Up @@ -157,7 +141,7 @@ object Zoomify : ClientModInitializer {
@JvmStatic
fun getZoomDivisor(tickDelta: Float): Double {
if (!zooming) {
if (!ZoomifySettings.retainZoomSteps)
if (!ZoomifySettings.retainZoomSteps.value)
scrollSteps = 0

zoomHelper.reset()
Expand All @@ -180,7 +164,7 @@ object Zoomify : ClientModInitializer {
val cameraEntity = minecraft.cameraEntity

if (cameraEntity is AbstractClientPlayer) {
when (ZoomifySettings.spyglassBehaviour) {
when (ZoomifySettings.spyglassBehaviour.value) {
SpyglassBehaviour.ONLY_ZOOM_WHILE_HOLDING -> {
if (!cameraEntity.isHolding(Items.SPYGLASS))
zooming = false
Expand All @@ -194,7 +178,7 @@ object Zoomify : ClientModInitializer {
else -> {}
}

val requiresSpyglass = ZoomifySettings.spyglassBehaviour != SpyglassBehaviour.COMBINE
val requiresSpyglass = ZoomifySettings.spyglassBehaviour.value != SpyglassBehaviour.COMBINE
if (requiresSpyglass && cameraEntity.isScoping) {
zooming = true
}
Expand All @@ -205,7 +189,7 @@ object Zoomify : ClientModInitializer {
}
}

shouldPlaySound = when (ZoomifySettings.spyglassSoundBehaviour) {
shouldPlaySound = when (ZoomifySettings.spyglassSoundBehaviour.value) {
SoundBehaviour.NEVER -> false
SoundBehaviour.ALWAYS -> true
SoundBehaviour.ONLY_SPYGLASS -> cameraEntity.isScoping || (requiresSpyglass && zooming && cameraEntity.isHolding(Items.SPYGLASS))
Expand All @@ -225,12 +209,12 @@ object Zoomify : ClientModInitializer {

@JvmStatic
fun shouldRenderOverlay(player: AbstractClientPlayer, isUsingSpyglass: Boolean) =
when (ZoomifySettings.spyglassOverlayVisibility) {
when (ZoomifySettings.spyglassOverlayVisibility.value) {
OverlayVisibility.NEVER -> false
OverlayVisibility.ALWAYS -> zooming
OverlayVisibility.HOLDING -> isUsingSpyglass
|| (zooming && player.isHolding(Items.SPYGLASS))
&& ZoomifySettings.spyglassBehaviour != SpyglassBehaviour.COMBINE
&& ZoomifySettings.spyglassBehaviour.value != SpyglassBehaviour.COMBINE
OverlayVisibility.CARRYING -> zooming
&& player.inventory.hasAnyMatching { stack: ItemStack -> stack.`is`(Items.SPYGLASS) }
}
Expand All @@ -246,9 +230,9 @@ object Zoomify : ClientModInitializer {

fun unbindConflicting(): Boolean {
val minecraft = Minecraft.getInstance()
if (!zoomHoldKeyMapping.isUnbound) {
if (!zoomKey.isUnbound) {
for (key in minecraft.options.keyMappings) {
if (key != zoomHoldKeyMapping && key.same(zoomHoldKeyMapping)) {
if (key != zoomKey && key.equals(zoomKey)) {
minecraft.options.setKey(key, InputConstants.UNKNOWN)

toast(
Expand All @@ -270,10 +254,10 @@ object Zoomify : ClientModInitializer {
private fun detectConflictingToast() {
val minecraft = Minecraft.getInstance()

if (zoomHoldKeyMapping.isUnbound)
if (zoomKey.isUnbound)
return

if (minecraft.options.keyMappings.any { it != zoomHoldKeyMapping && it.same(zoomHoldKeyMapping) }) {
if (minecraft.options.keyMappings.any { it != zoomKey && it.equals(zoomKey) }) {
toast(
Component.translatable("zoomify.toast.conflictingKeybind.title"),
Component.translatable("zoomify.toast.conflictingKeybind.description",
Expand Down
51 changes: 29 additions & 22 deletions src/main/kotlin/dev/isxander/zoomify/config/Presets.kt
Original file line number Diff line number Diff line change
@@ -1,31 +1,38 @@
package dev.isxander.zoomify.config

import dev.isxander.settxi.Setting
import dev.isxander.settxi.impl.SettingDisplayName
import dev.isxander.yacl3.config.v3.ConfigEntry
import dev.isxander.yacl3.config.v3.default
import dev.isxander.yacl3.config.v3.value
import dev.isxander.zoomify.utils.TransitionType
import net.minecraft.network.chat.Component

enum class Presets(override val displayName: String, val apply: ZoomifySettings.() -> Unit) : SettingDisplayName {
DEFAULT("zoomify.gui.preset.default", {
this.settings.forEach(Setting<*>::reset)
enum class Presets(val displayName: Component, val apply: ZoomifySettings.() -> Unit) {
Default("zoomify.gui.preset.default", {
this.allSettings.forEach { it.setToDefault() }
}),
OPTIFINE("zoomify.gui.preset.optifine", {
DEFAULT.apply(this)
Optifine("zoomify.gui.preset.optifine", {
Default.apply(this)

this.zoomInTransition = TransitionType.INSTANT
this.zoomOutTransition = TransitionType.INSTANT
this.scrollZoom = false
this.relativeSensitivity = 0
this.relativeViewBobbing = false
this.cinematicCamera = 100
this.zoomInTransition.value = TransitionType.INSTANT
this.zoomOutTransition.value = TransitionType.INSTANT
this.scrollZoom.value = false
this.relativeSensitivity.value = 0
this.relativeViewBobbing.value = false
this.cinematicCamera.value = 100
}),
OK_ZOOMER("zoomify.gui.preset.ok_zoomer", {
DEFAULT.apply(this)
OkZoomer("zoomify.gui.preset.ok_zoomer", {
Default.apply(this)

this.zoomInTime = 0.25
this.zoomOutTime = 0.25
this.relativeSensitivity = 50
this.relativeViewBobbing = false
this.scrollZoomSmoothness = 25
this.linearLikeSteps = false
}),
this.zoomInTime.value = 0.25
this.zoomOutTime.value = 0.25
this.relativeSensitivity.value = 50
this.relativeViewBobbing.value = false
this.scrollZoomSmoothness.value = 25
this.linearLikeSteps.value = false
});

constructor(displayName: String, apply: ZoomifySettings.() -> Unit)
: this(Component.translatable(displayName), apply)
}

private fun <T> ConfigEntry<T>.setToDefault() = set(default)
Loading

0 comments on commit 73bd8d8

Please sign in to comment.