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
}
|