-
-
Notifications
You must be signed in to change notification settings - Fork 226
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature: add guide to dungeon hub races (#1471)
Co-authored-by: hannibal2 <[email protected]>
- Loading branch information
1 parent
0571553
commit 2917930
Showing
5 changed files
with
139 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
34 changes: 34 additions & 0 deletions
34
src/main/java/at/hannibal2/skyhanni/config/features/dungeon/DungeonsRaceGuideConfig.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package at.hannibal2.skyhanni.config.features.dungeon; | ||
|
||
import at.hannibal2.skyhanni.config.FeatureToggle; | ||
import com.google.gson.annotations.Expose; | ||
import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean; | ||
import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorColour; | ||
import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorSlider; | ||
import io.github.notenoughupdates.moulconfig.annotations.ConfigOption; | ||
import io.github.notenoughupdates.moulconfig.observer.Property; | ||
|
||
public class DungeonsRaceGuideConfig { | ||
|
||
@Expose | ||
@ConfigOption(name = "Enabled", desc = "Shows a guide for each of the Dungeon Hub races. " + | ||
"§eCurrently only works with No Return; Nothing at all races.") | ||
@ConfigEditorBoolean | ||
@FeatureToggle | ||
public boolean enabled = true; | ||
|
||
@Expose | ||
@ConfigOption(name = "Look Ahead", desc = "Change how many waypoints should be shown in front of you.") | ||
@ConfigEditorSlider(minStep = 1, maxValue = 30, minValue = 1) | ||
public Property<Integer> lookAhead = Property.of(3); | ||
|
||
@Expose | ||
@ConfigOption(name = "Rainbow Color", desc = "Show the rainbow color effect instead of a boring monochrome.") | ||
@ConfigEditorBoolean | ||
public Property<Boolean> rainbowColor = Property.of(true); | ||
|
||
@Expose | ||
@ConfigOption(name = "Monochrome Color", desc = "Set a boring monochrome color for the guide waypoints.") | ||
@ConfigEditorColour | ||
public Property<String> monochromeColor = Property.of("0:60:0:0:255"); | ||
} |
7 changes: 7 additions & 0 deletions
7
src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/DungeonHubRacesJson.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package at.hannibal2.skyhanni.data.jsonobjects.repo | ||
|
||
import com.google.gson.annotations.Expose | ||
|
||
data class DungeonHubRacesJson( | ||
@Expose val data: Map<String, Map<String, ParkourJson>>, | ||
) |
91 changes: 91 additions & 0 deletions
91
src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonsRaceGuide.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,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.StringUtils.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 | ||
} |