aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/features/fixes/Fixes.kt
blob: 70303194f23e12a15a36ebd544fc83106ad98b14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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.text.Text
import moe.nea.firmament.annotations.Subscribe
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

object Fixes : FirmamentFeature {
	override val identifier: String
		get() = "fixes"

	object TConfig : ManagedConfig(identifier, Category.MISC) { // TODO: split this config
		val fixUnsignedPlayerSkins by toggle("player-skins") { true }
		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 hidePotionEffects by toggle("hide-mob-effects") { false }
	}

	override val config: ManagedConfig
		get() = TConfig

	fun handleIsPressed(
		keyBinding: KeyBinding,
		cir: CallbackInfoReturnable<Boolean>
	) {
		if (keyBinding === MinecraftClient.getInstance().options.sprintKey && TConfig.autoSprint && MC.player?.isSprinting != true)
			cir.returnValue = true
	}

	@Subscribe
	fun onRenderHud(it: HudRenderEvent) {
		if (!TConfig.autoSprintKeyBinding.isBound) return
		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()
	}

	@Subscribe
	fun onWorldKeyboard(it: WorldKeyboardEvent) {
		if (it.matches(TConfig.autoSprintKeyBinding)) {
			TConfig.autoSprint = !TConfig.autoSprint
		}
	}

	fun shouldPeekChat(): Boolean {
		return TConfig.peekChat.isPressed(atLeast = true)
	}
}