blob: a5e11cbd071d45f6457885ca475a5b32718d2df2 (
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
|
package at.hannibal2.skyhanni.features.dungeon
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.data.IslandType
import at.hannibal2.skyhanni.data.jsonobjects.repo.DungeonHubRacesJson
import at.hannibal2.skyhanni.events.ActionBarUpdateEvent
import at.hannibal2.skyhanni.events.ConfigLoadEvent
import at.hannibal2.skyhanni.events.IslandChangeEvent
import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent
import at.hannibal2.skyhanni.events.RepositoryReloadEvent
import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor
import at.hannibal2.skyhanni.utils.ConditionalUtils
import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland
import at.hannibal2.skyhanni.utils.ParkourHelper
import at.hannibal2.skyhanni.utils.RegexUtils.findMatcher
import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
class DungeonsRaceGuide {
private val config get() = SkyHanniMod.feature.dungeon.dungeonsRaceGuide
private val raceActivePattern by RepoPattern.pattern(
"dungeon.race.active",
"§.§.(?<race>[\\w ]+) RACE §.[\\d:.]+"
)
private val parkourHelpers: MutableMap<String, ParkourHelper> = mutableMapOf()
private var currentRace: String? = null
@SubscribeEvent
fun onIslandChange(event: IslandChangeEvent) {
parkourHelpers.forEach { it.value.reset() }
currentRace = null
}
@SubscribeEvent
fun onRepoReload(event: RepositoryReloadEvent) {
val data = event.getConstant<DungeonHubRacesJson>("DungeonHubRaces")
data.data.forEach {
val nothingNoReturn = it.value["nothing:no_return"]
parkourHelpers[it.key] = ParkourHelper(
nothingNoReturn?.locations ?: listOf(),
nothingNoReturn?.shortCuts ?: listOf(),
platformSize = 1.0,
detectionRange = 7.0,
depth = false,
)
}
updateConfig()
}
@SubscribeEvent
fun onConfigLoad(event: ConfigLoadEvent) {
ConditionalUtils.onToggle(config.rainbowColor, config.monochromeColor, config.lookAhead) {
updateConfig()
}
}
@SubscribeEvent
fun onActionBarUpdate(event: ActionBarUpdateEvent) {
if (!isEnabled()) return
currentRace = null
raceActivePattern.findMatcher(event.actionBar) {
currentRace = group("race").replace(" ", "_").lowercase()
}
if (currentRace == null) {
parkourHelpers.forEach {
it.value.reset()
}
}
}
private fun updateConfig() {
parkourHelpers.forEach {
it.value.rainbowColor = config.rainbowColor.get()
it.value.monochromeColor = config.monochromeColor.get().toChromaColor()
it.value.lookAhead = config.lookAhead.get() + 1
}
}
@SubscribeEvent
fun onRenderWorld(event: LorenzRenderWorldEvent) {
if (!isEnabled()) return
if (currentRace == null) return
parkourHelpers[currentRace]?.render(event)
}
fun isEnabled() = IslandType.DUNGEON_HUB.isInIsland() && config.enabled
}
|