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
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.WorldKeyboardEvent
import moe.nea.firmament.features.FirmamentFeature
import moe.nea.firmament.gui.config.ManagedConfig
import moe.nea.firmament.util.MC
import moe.nea.jarvis.api.Point
import net.minecraft.client.MinecraftClient
import net.minecraft.client.option.KeyBinding
import net.minecraft.text.Text
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable
import moe.nea.firmament.util.errorBoundary
object Fixes : FirmamentFeature {
override val identifier: String
@@ -27,6 +30,7 @@ object Fixes : FirmamentFeature {
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 useClientSidedHandedness by toggle("clientside-lefthand") { true }
}
override val config: ManagedConfig
@@ -40,6 +44,12 @@ object Fixes : FirmamentFeature {
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() {
WorldKeyboardEvent.subscribe {
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()
}