Add auto sprint toggle keybinding

This commit is contained in:
nea
2023-09-06 02:26:25 +02:00
parent 7515c6048c
commit d29f886e25
5 changed files with 76 additions and 2 deletions

View File

@@ -0,0 +1,23 @@
/*
* SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package moe.nea.firmament.mixins;
import moe.nea.firmament.events.HudRenderEvent;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.InGameHud;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(InGameHud.class)
public class MixinInGameHud {
@Inject(method = "render", at = @At(value = "INVOKE",target = "Lnet/minecraft/client/network/ClientPlayerEntity;getSleepTimer()I"))
public void renderCallBack(DrawContext context, float tickDelta, CallbackInfo ci) {
HudRenderEvent.Companion.publish(new HudRenderEvent(context, tickDelta));
}
}

View File

@@ -0,0 +1,16 @@
/*
* SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package moe.nea.firmament.events
import net.minecraft.client.gui.DrawContext
/**
* Called when hud elements should be rendered, before the screen, but after the world.
*/
data class HudRenderEvent(val context: DrawContext, val tickDelta: Float) : FirmamentEvent() {
companion object : FirmamentEventBus<HudRenderEvent>()
}

View File

@@ -6,11 +6,15 @@
package moe.nea.firmament.features.fixes package moe.nea.firmament.features.fixes
import moe.nea.firmament.events.HudRenderEvent
import moe.nea.firmament.events.WorldKeyboardEvent
import moe.nea.firmament.features.FirmamentFeature import moe.nea.firmament.features.FirmamentFeature
import moe.nea.firmament.gui.config.ManagedConfig import moe.nea.firmament.gui.config.ManagedConfig
import moe.nea.firmament.util.MC import moe.nea.firmament.util.MC
import moe.nea.jarvis.api.Point
import net.minecraft.client.MinecraftClient import net.minecraft.client.MinecraftClient
import net.minecraft.client.option.KeyBinding import net.minecraft.client.option.KeyBinding
import net.minecraft.text.Text
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable
object Fixes : FirmamentFeature { object Fixes : FirmamentFeature {
@@ -19,7 +23,9 @@ object Fixes : FirmamentFeature {
object TConfig : ManagedConfig(identifier) { object TConfig : ManagedConfig(identifier) {
val fixUnsignedPlayerSkins by toggle("player-skins") { true } val fixUnsignedPlayerSkins by toggle("player-skins") { true }
val autoSprint by toggle("auto-sprint") { false } var autoSprint by toggle("auto-sprint") { false }
val autoSprintKeyBinding by keyBindingWithDefaultUnbound("auto-sprint-keybinding")
val autoSprintHud by position("auto-sprint-hud", 80, 10) { Point(0.0, 1.0) }
val peekChat by keyBindingWithDefaultUnbound("peek-chat") val peekChat by keyBindingWithDefaultUnbound("peek-chat")
} }
@@ -35,6 +41,27 @@ object Fixes : FirmamentFeature {
} }
override fun onLoad() { override fun onLoad() {
WorldKeyboardEvent.subscribe {
if (it.matches(TConfig.autoSprintKeyBinding)) {
TConfig.autoSprint = !TConfig.autoSprint
}
}
HudRenderEvent.subscribe {
if (!TConfig.autoSprintKeyBinding.isBound) return@subscribe
it.context.matrices.push()
TConfig.autoSprintHud.applyTransformations(it.context.matrices)
it.context.drawText(
MC.font, Text.translatable(
if (TConfig.autoSprint)
"firmament.fixes.auto-sprint.on"
else if (MC.player?.isSprinting == true)
"firmament.fixes.auto-sprint.sprinting"
else
"firmament.fixes.auto-sprint.not-sprinting"
), 0, 0, -1, false
)
it.context.matrices.pop()
}
} }
fun shouldPeekChat(): Boolean { fun shouldPeekChat(): Boolean {

View File

@@ -19,6 +19,8 @@ data class SavedKeyBinding(
val ctrl: Boolean = false, val ctrl: Boolean = false,
val alt: Boolean = false, val alt: Boolean = false,
) : IKeyBinding { ) : IKeyBinding {
val isBound: Boolean get() = keyCode != GLFW.GLFW_KEY_UNKNOWN
constructor(keyCode: Int, mods: Triple<Boolean, Boolean, Boolean>) : this( constructor(keyCode: Int, mods: Triple<Boolean, Boolean, Boolean>) : this(
keyCode, keyCode,
mods.first && keyCode != GLFW.GLFW_KEY_LEFT_SHIFT && keyCode != GLFW.GLFW_KEY_RIGHT_SHIFT, mods.first && keyCode != GLFW.GLFW_KEY_LEFT_SHIFT && keyCode != GLFW.GLFW_KEY_RIGHT_SHIFT,
@@ -39,7 +41,7 @@ data class SavedKeyBinding(
} }
fun isPressed(atLeast: Boolean = false): Boolean { fun isPressed(atLeast: Boolean = false): Boolean {
if (this.keyCode == GLFW.GLFW_KEY_UNKNOWN) return false if (!isBound) return false
val h = MC.window.handle val h = MC.window.handle
if (!InputUtil.isKeyPressed(h, keyCode)) return false if (!InputUtil.isKeyPressed(h, keyCode)) return false

View File

@@ -89,6 +89,12 @@
"firmament.config.slot-locking": "Slot Locking", "firmament.config.slot-locking": "Slot Locking",
"firmament.config.slot-locking.lock": "Lock Slot", "firmament.config.slot-locking.lock": "Lock Slot",
"firmament.config.fixes.auto-sprint": "Auto Sprint", "firmament.config.fixes.auto-sprint": "Auto Sprint",
"firmament.config.fixes.auto-sprint-keybinding": "Auto Sprint KeyBinding",
"firmament.config.fixes.auto-sprint-hud": "Sprint State Hud",
"firmament.config.fixes.peek-chat": "Peek Chat",
"firmament.fixes.auto-sprint.on": "Sprint toggled",
"firmament.fixes.auto-sprint.sprinting": "Sprinting",
"firmament.fixes.auto-sprint.not-sprinting": "Not Sprinting",
"firmament.config.custom-skyblock-textures": "Custom SkyBlock Item Textures", "firmament.config.custom-skyblock-textures": "Custom SkyBlock Item Textures",
"firmament.config.custom-skyblock-textures.cache-duration": "Model Cache Duration", "firmament.config.custom-skyblock-textures.cache-duration": "Model Cache Duration",
"firmament.config.custom-skyblock-textures.enabled": "Enable Custom Item Textures", "firmament.config.custom-skyblock-textures.enabled": "Enable Custom Item Textures",