blob: aff27f79a0979a1d30606719f5723593fcd41a55 (
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
package at.hannibal2.skyhanni.features.nether.reputationhelper.dailykuudra
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.data.HyPixelData
import at.hannibal2.skyhanni.data.IslandType
import at.hannibal2.skyhanni.data.ScoreboardData
import at.hannibal2.skyhanni.events.LorenzChatEvent
import at.hannibal2.skyhanni.features.nether.reputationhelper.CrimsonIsleReputationHelper
import at.hannibal2.skyhanni.test.GriffinUtils.drawWaypointFilled
import at.hannibal2.skyhanni.utils.LorenzColor
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.LorenzVec
import at.hannibal2.skyhanni.utils.NEUItems
import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText
import net.minecraftforge.client.event.RenderWorldLastEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import java.util.*
import java.util.regex.Pattern
class DailyKuudraBossHelper(private val reputationHelper: CrimsonIsleReputationHelper) {
val kuudraTiers = mutableListOf<KuudraTier>()
private val pattern = Pattern.compile(" Kuudra's Hollow \\(T(.*)\\)")
private var kuudraLocation: LorenzVec? = null
private var allKuudraDone = true
@SubscribeEvent
fun onRenderWorld(event: RenderWorldLastEvent) {
if (!LorenzUtils.inSkyBlock) return
if (LorenzUtils.skyBlockIsland != IslandType.CRIMSON_ISLE) return
if (!SkyHanniMod.feature.misc.crimsonIsleReputationHelper) return
if (!SkyHanniMod.feature.misc.crimsonIsleReputationLocation) return
if (allKuudraDone) return
kuudraLocation?.let {
event.drawWaypointFilled(it, LorenzColor.WHITE.toColor())
event.drawDynamicText(it, "Kuudra", 1.5)
}
}
@SubscribeEvent
fun onChat(event: LorenzChatEvent) {
if (!HyPixelData.skyBlock) return
if (LorenzUtils.skyBlockIsland != IslandType.KUUDRA_ARENA) return
if (!SkyHanniMod.feature.misc.crimsonIsleReputationHelper) return
val message = event.message
if (message != " §r§6§lKUUDRA DOWN!") return
for (line in ScoreboardData.sidebarLines) {
val matcher = pattern.matcher(line)
if (matcher.matches()) {
val tier = matcher.group(1).toInt()
val kuudraTier = getByTier(tier)!!
finished(kuudraTier)
return
}
}
}
private fun finished(kuudraTier: KuudraTier) {
LorenzUtils.debug("Detected kuudra tier done: $kuudraTier")
reputationHelper.questHelper.finishKuudra(kuudraTier)
kuudraTier.doneToday = true
updateAllKuudraDone()
reputationHelper.update()
}
fun render(display: MutableList<List<Any>>) {
val done = kuudraTiers.count { it.doneToday }
display.add(Collections.singletonList(""))
display.add(Collections.singletonList("Daily Kuudra ($done/2 killed)"))
if (done != 2) {
for (tier in kuudraTiers) {
val result = if (tier.doneToday) "§7Done" else "§bTodo"
val displayName = tier.getDisplayName()
val displayItem = tier.displayItem
if (displayItem == null) {
display.add(Collections.singletonList(" $displayName: $result"))
} else {
val lineList = mutableListOf<Any>()
lineList.add(" ")
lineList.add(NEUItems.readItemFromRepo(displayItem))
lineList.add("$displayName: $result")
display.add(lineList)
}
}
}
}
fun reset() {
for (miniBoss in kuudraTiers) {
miniBoss.doneToday = false
}
updateAllKuudraDone()
}
fun saveConfig() {
SkyHanniMod.feature.hidden.crimsonIsleKuudraTiersDone.clear()
kuudraTiers.filter { it.doneToday }
.forEach { SkyHanniMod.feature.hidden.crimsonIsleKuudraTiersDone.add(it.name) }
}
fun load() {
kuudraTiers.clear()
//Repo
val repoData = reputationHelper.repoData
val jsonElement = repoData["KUUDRA"]
var tier = 1
for ((displayName, extraData) in jsonElement.asJsonObject.entrySet()) {
val data = extraData.asJsonObject
val displayItem = data["item"]?.asString
val location = reputationHelper.readLocationData(data)
kuudraTiers.add(KuudraTier(displayName, displayItem, location, tier))
if (location != null) {
kuudraLocation = location
}
tier++
}
//Config
for (name in SkyHanniMod.feature.hidden.crimsonIsleKuudraTiersDone) {
getByDisplayName(name)!!.doneToday = true
}
updateAllKuudraDone()
}
private fun updateAllKuudraDone() {
allKuudraDone = !kuudraTiers.any { !it.doneToday }
println("allKuudraDone: $allKuudraDone")
}
private fun getByDisplayName(name: String) = kuudraTiers.firstOrNull { it.name == name }
private fun getByTier(number: Int) = kuudraTiers.firstOrNull { it.tierNumber == number }
}
|