Add left handed override for hypixel

This commit is contained in:
nea
2023-10-28 03:54:06 +02:00
parent 710d9ec3f7
commit 9e7da2829c
3 changed files with 56 additions and 5 deletions

View File

@@ -0,0 +1,27 @@
/*
* 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.features.fixes.Fixes;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.Arm;
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.CallbackInfoReturnable;
@Mixin(PlayerEntity.class)
public class PlayerLeftHandedPatch {
@Inject(
method = "getMainArm",
at = @At("HEAD"),
cancellable = true
)
public void onGetMainArm(CallbackInfoReturnable<Arm> cir) {
Fixes.INSTANCE.isLeftHandedHook((PlayerEntity) (Object) this, cir);
}
}

View File

@@ -6,16 +6,19 @@
package moe.nea.firmament.features.fixes package moe.nea.firmament.features.fixes
import moe.nea.jarvis.api.Point
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable
import net.minecraft.client.MinecraftClient
import net.minecraft.client.option.KeyBinding
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.text.Text
import net.minecraft.util.Arm
import moe.nea.firmament.events.HudRenderEvent import moe.nea.firmament.events.HudRenderEvent
import moe.nea.firmament.events.WorldKeyboardEvent 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 moe.nea.firmament.util.errorBoundary
import net.minecraft.client.MinecraftClient
import net.minecraft.client.option.KeyBinding
import net.minecraft.text.Text
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable
object Fixes : FirmamentFeature { object Fixes : FirmamentFeature {
override val identifier: String override val identifier: String
@@ -27,6 +30,7 @@ object Fixes : FirmamentFeature {
val autoSprintKeyBinding by keyBindingWithDefaultUnbound("auto-sprint-keybinding") val autoSprintKeyBinding by keyBindingWithDefaultUnbound("auto-sprint-keybinding")
val autoSprintHud by position("auto-sprint-hud", 80, 10) { Point(0.0, 1.0) } 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")
val useClientSidedHandedness by toggle("clientside-lefthand") { true }
} }
override val config: ManagedConfig override val config: ManagedConfig
@@ -40,6 +44,12 @@ object Fixes : FirmamentFeature {
cir.returnValue = true cir.returnValue = true
} }
fun isLeftHandedHook(entity: PlayerEntity, cit: CallbackInfoReturnable<Arm>) = errorBoundary {
if (TConfig.useClientSidedHandedness && entity.isMainPlayer) {
cit.returnValue = MC.instance.options.mainArm.value
}
}
override fun onLoad() { override fun onLoad() {
WorldKeyboardEvent.subscribe { WorldKeyboardEvent.subscribe {
if (it.matches(TConfig.autoSprintKeyBinding)) { if (it.matches(TConfig.autoSprintKeyBinding)) {

View File

@@ -0,0 +1,14 @@
/*
* SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package moe.nea.firmament.util
fun <T> errorBoundary(block: () -> T): T? {
// TODO: implement a proper error boundary here to avoid crashing minecraft code
return block()
}