aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/features/inventory/SaveCursorPosition.kt
blob: c492a752d312ef4b4c3ca4658eb02893a07598c0 (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
package moe.nea.firmament.features.inventory

import org.lwjgl.glfw.GLFW
import kotlin.math.absoluteValue
import kotlin.time.Duration.Companion.milliseconds
import com.mojang.blaze3d.platform.InputConstants
import moe.nea.firmament.util.MC
import moe.nea.firmament.util.TimeMark
import moe.nea.firmament.util.assertNotNullOr
import moe.nea.firmament.util.data.Config
import moe.nea.firmament.util.data.ManagedConfig

object SaveCursorPosition {
	val identifier: String
		get() = "save-cursor-position"

	@Config
	object TConfig : ManagedConfig(identifier, Category.INVENTORY) {
		val enable by toggle("enable") { true }
		val tolerance by duration("tolerance", 10.milliseconds, 5000.milliseconds) { 500.milliseconds }
	}

	var savedPositionedP1: Pair<Double, Double>? = null
	var savedPosition: SavedPosition? = null

	data class SavedPosition(
		val middle: Pair<Double, Double>,
		val cursor: Pair<Double, Double>,
		val savedAt: TimeMark = TimeMark.now()
	)

	@JvmStatic
	fun saveCursorOriginal(positionedX: Double, positionedY: Double) {
		savedPositionedP1 = Pair(positionedX, positionedY)
	}

	@JvmStatic
	fun loadCursor(middleX: Double, middleY: Double): Pair<Double, Double>? {
		if (!TConfig.enable) return null
		val lastPosition = savedPosition?.takeIf { it.savedAt.passedTime() < TConfig.tolerance }
		savedPosition = null
		if (lastPosition != null &&
			(lastPosition.middle.first - middleX).absoluteValue < 1 &&
			(lastPosition.middle.second - middleY).absoluteValue < 1
		) {
			InputConstants.grabOrReleaseMouse(
				MC.window,
				InputConstants.CURSOR_NORMAL,
				lastPosition.cursor.first,
				lastPosition.cursor.second
			)
			return lastPosition.cursor
		}
		return null
	}

	@JvmStatic
	fun saveCursorMiddle(middleX: Double, middleY: Double) {
		if (!TConfig.enable) return
		val cursorPos = assertNotNullOr(savedPositionedP1) { return }
		savedPosition = SavedPosition(Pair(middleX, middleY), cursorPos)
	}
}