summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/inventory/MinisterInCalendar.kt
blob: d078f0d1a39fc44b64294d4acb7b3a2c994997f8 (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
80
81
82
83
84
85
86
package at.hannibal2.skyhanni.features.inventory

import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.data.Mayor
import at.hannibal2.skyhanni.data.MayorAPI
import at.hannibal2.skyhanni.events.InventoryCloseEvent
import at.hannibal2.skyhanni.events.InventoryOpenEvent
import at.hannibal2.skyhanni.events.render.gui.ReplaceItemEvent
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.ItemUtils.setLore
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName
import at.hannibal2.skyhanni.utils.NEUItems.getItemStack
import at.hannibal2.skyhanni.utils.RegexUtils.matches
import at.hannibal2.skyhanni.utils.StringUtils.splitLines
import net.minecraft.client.player.inventory.ContainerLocalMenu
import net.minecraft.item.ItemStack
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent

@SkyHanniModule
object MinisterInCalendar {

    private const val MINISTER_SLOT = 38
    private var ministerItemStack: ItemStack? = null

    private val prefix = listOf(
        "§8(from SkyHanni)",
        "",
        "§8§m--------------------------",
    )
    private val suffix = listOf(
        "§8§m--------------------------",
        "",
        "§7The Minister is who came in 2nd place",
        "§7during the election. They have one",
        "§7of their perks active.",
    )

    @SubscribeEvent
    fun onInventoryOpen(event: InventoryOpenEvent) {
        if (!isEnabled()) return
        if (!MayorAPI.calendarGuiPattern.matches(InventoryUtils.openInventoryName())) return
        val minister = MayorAPI.currentMinister ?: return

        val itemStack = "${minister.name}_MAYOR_MONSTER".asInternalName().getItemStack()
        val ministerColor = MayorAPI.mayorNameToColorCode(minister.mayorName)

        ministerItemStack = changeItem(ministerColor, minister, itemStack)
    }

    @SubscribeEvent
    fun onInventoryClose(event: InventoryCloseEvent) {
        if (!isEnabled()) return
        if (!MayorAPI.calendarGuiPattern.matches(InventoryUtils.openInventoryName())) return
        ministerItemStack = null
    }

    @SubscribeEvent
    fun replaceItem(event: ReplaceItemEvent) {
        if (!isEnabled()) return
        if (event.inventory !is ContainerLocalMenu || event.slot != MINISTER_SLOT) return
        if (!MayorAPI.calendarGuiPattern.matches(InventoryUtils.openInventoryName())) return
        event.replace(ministerItemStack ?: return)
    }

    private fun changeItem(
        ministerColor: String,
        minister: Mayor,
        item: ItemStack,
    ): ItemStack? {
        val ministerDisplayName = "${ministerColor}Minister ${minister.mayorName}"
        val ministerLore = buildList {
            addAll(prefix)
            for (perk in minister.activePerks) {
                add("$ministerColor${perk.perkName}")
                addAll(perk.description.splitLines(170).removePrefix("§r").split("\n").map { "§7$it" })
            }
            addAll(suffix)
        }

        return item.setLore(ministerLore).setStackDisplayName(ministerDisplayName)
    }

    fun isEnabled() = LorenzUtils.inSkyBlock && SkyHanniMod.feature.inventory.ministerInCalendar
}