1+ package com.lambda.client.gui.hudgui.elements.client
2+
3+ import com.lambda.client.commons.interfaces.DisplayEnum
4+ import com.lambda.client.event.SafeClientEvent
5+ import com.lambda.client.gui.hudgui.LabelHud
6+ import com.lambda.client.module.AbstractModule
7+ import com.lambda.client.module.ModuleManager
8+ import com.lambda.client.util.color.ColorHolder
9+ import com.lambda.client.util.graphics.font.HAlign
10+ import com.lambda.client.util.threads.safeAsyncListener
11+ import net.minecraftforge.fml.common.gameevent.TickEvent
12+
13+ internal object Bindings : LabelHud(
14+ name = " Bindings" ,
15+ category = Category .CLIENT ,
16+ description = " Display current module keybindings"
17+ ) {
18+
19+ private val sortingMode by setting(" Sorting Mode" , SortingMode .LENGTH )
20+ private val ignoreClientBindings by setting(" Ignore Client Category" , true ,
21+ description = " Ignore bindings for client specific bindings like the ClickGUI" )
22+
23+ @Suppress(" UNUSED" )
24+ private enum class SortingMode (
25+ override val displayName : String ,
26+ val comparator : Comparator <AbstractModule >
27+ ) : DisplayEnum {
28+ LENGTH (" Length" , compareByDescending { it.name.length }),
29+ ALPHABET (" Alphabet" , compareBy { it.name }),
30+ CATEGORY (" Category" , compareBy { it.category.ordinal })
31+ }
32+
33+ private var modulesWithBindings: List <AbstractModule > = emptyList()
34+
35+ init {
36+ dockingH = HAlign .RIGHT
37+
38+ safeAsyncListener<TickEvent .ClientTickEvent > { event ->
39+ if (event.phase != TickEvent .Phase .END ) return @safeAsyncListener
40+
41+ // this isn't terribly efficient, consider creating events for editing bindings and module toggle state
42+ modulesWithBindings = ModuleManager .modules
43+ .sortedWith(sortingMode.comparator)
44+ .filter { if (ignoreClientBindings) it.category != com.lambda.client.module.Category .CLIENT else true }
45+ .filterNot { it.bind.value.isEmpty }
46+ }
47+ }
48+
49+ override fun SafeClientEvent.updateText () {
50+ modulesWithBindings.forEach {
51+ displayText.add(it.name, if (it.isEnabled) ColorHolder (0 , 255 , 0 ) else primaryColor)
52+ displayText.addLine(it.bind.toString(), secondaryColor)
53+ }
54+ }
55+ }
0 commit comments