aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/gui/TabWidgetDisplay.kt
blob: 2e598923d426e037ea3fced66a53875c7291f5f3 (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
68
69
70
71
72
73
74
75
76
77
78
79
package at.hannibal2.skyhanni.features.gui

import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.config.core.config.Position
import at.hannibal2.skyhanni.data.model.TabWidget
import at.hannibal2.skyhanni.events.GuiRenderEvent
import at.hannibal2.skyhanni.events.ProfileJoinEvent
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
import at.hannibal2.skyhanni.test.command.ErrorManager
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings
import at.hannibal2.skyhanni.utils.StringUtils.allLettersFirstUppercase
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent

enum class TabWidgetDisplay(private val configName: String?, vararg val widgets: TabWidget) {
    SOULFLOW(null, TabWidget.SOULFLOW),
    COINS("Bank and Interest", TabWidget.BANK, TabWidget.INTEREST),
    SB_LEVEL("Skyblock Level", TabWidget.SB_LEVEL),
    PROFILE(null, TabWidget.PROFILE),
    PLAYER_LIST("Players", TabWidget.PLAYER_LIST),
    PET(null, TabWidget.PET),
    PET_TRAINING("Pet Upgrade Info", TabWidget.PET_SITTER, TabWidget.PET_TRAINING),
    STATS(null, TabWidget.STATS, TabWidget.DUNGEON_SKILLS_AND_STATS),
    DUNGEON_TEAM("Dungeon Info about every person", TabWidget.DUNGEON_PARTY),
    DUNGEON_PUZZLE("Dungeon Info about puzzles", TabWidget.DUNGEON_PUZZLE),
    DUNGEON_OVERALL("Dungeon General Info (very long)", TabWidget.DUNGEON_STATS),
    BESTIARY(null, TabWidget.BESTIARY),
    DRAGON("Dragon Fight Info", TabWidget.DRAGON),
    PROTECTOR("Protector State", TabWidget.PROTECTOR),
    SHEN_RIFT("Shen's Auction inside the Rift", TabWidget.RIFT_SHEN),
    MINION("Minion Info", TabWidget.MINION),
    COLLECTION(null, TabWidget.COLLECTION),
    TIMERS(null, TabWidget.TIMERS),
    FIRE_SALE(null, TabWidget.FIRE_SALE),
    RAIN("Park Rain", TabWidget.RAIN),
    ;

    val position get() = config.displayPositions[ordinal]

    override fun toString(): String {
        return configName ?: name.lowercase().allLettersFirstUppercase()
    }

    @SkyHanniModule
    companion object {

        private val config get() = SkyHanniMod.feature.gui.tabWidget

        private fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled

        @SubscribeEvent
        fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) {
            if (!isEnabled()) return
            if (config?.displayPositions == null) return
            config.display.forEach { widget ->
                widget.position.renderStrings(
                    widget.widgets.flatMap { it.lines },
                    posLabel = "Display Widget: ${widget.name}",
                )
            }
        }

        @SubscribeEvent
        fun onJoin(event: ProfileJoinEvent) {
            // Validation that the displayPositions in the config is correct
            val sizeDiff = TabWidgetDisplay.entries.size - config.displayPositions.size
            if (sizeDiff == 0) return
            if (sizeDiff < 0) {
                ErrorManager.skyHanniError(
                    "Invalid State of config.displayPositions",
                    "Display" to TabWidgetDisplay.entries,
                    "Positions" to config.displayPositions,
                )
            } else {
                config.displayPositions.addAll(generateSequence { Position() }.take(sizeDiff))
            }
        }
    }
}