aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com/ambientaddons/utils/SBLocation.kt
diff options
context:
space:
mode:
authorAppability <appable@icloud.com>2022-10-17 16:11:40 -0700
committerAppability <appable@icloud.com>2022-10-17 16:11:40 -0700
commitfcd49c8b59f9c76008b5112a2e296c164b168842 (patch)
treeba3be0850cfe2185a68e6ba9fd862e5c59fd57dc /src/main/kotlin/com/ambientaddons/utils/SBLocation.kt
parentd4245bb705c7d8965e6bf63c90614dcfef38dcf7 (diff)
downloadAmbientAddons-fcd49c8b59f9c76008b5112a2e296c164b168842.tar.gz
AmbientAddons-fcd49c8b59f9c76008b5112a2e296c164b168842.tar.bz2
AmbientAddons-fcd49c8b59f9c76008b5112a2e296c164b168842.zip
trapper esp
Diffstat (limited to 'src/main/kotlin/com/ambientaddons/utils/SBLocation.kt')
-rw-r--r--src/main/kotlin/com/ambientaddons/utils/SBLocation.kt89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/main/kotlin/com/ambientaddons/utils/SBLocation.kt b/src/main/kotlin/com/ambientaddons/utils/SBLocation.kt
new file mode 100644
index 0000000..bfd35eb
--- /dev/null
+++ b/src/main/kotlin/com/ambientaddons/utils/SBLocation.kt
@@ -0,0 +1,89 @@
+package com.ambientaddons.utils
+
+import AmbientAddons.Companion.mc
+import com.ambientaddons.utils.DungeonFloor.Companion.toDungeonFloor
+import com.ambientaddons.utils.Extensions.cleanSB
+import com.ambientaddons.utils.Extensions.stripControlCodes
+import com.ambientaddons.utils.Extensions.substringBetween
+import com.ambientaddons.utils.TabListUtils.fetchTabEntries
+import net.minecraft.scoreboard.Score
+import net.minecraft.scoreboard.ScorePlayerTeam
+import net.minecraftforge.event.world.WorldEvent
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import net.minecraftforge.fml.common.gameevent.TickEvent
+import net.minecraftforge.fml.common.network.FMLNetworkEvent
+
+object SBLocation {
+ private var areaRegex = Regex("^(?:Area|Dungeon): ([\\w ].+)\$")
+ var onHypixel = false
+ var inSkyblock = false
+ var area: Area? = null
+ private var areaString: String? = null
+ var dungeonFloor: DungeonFloor? = null
+ var ticks = 0
+
+ @SubscribeEvent
+ fun onWorldUnload(event: WorldEvent.Unload) {
+ inSkyblock = false
+ dungeonFloor = null
+ area = null
+ }
+
+ @SubscribeEvent
+ fun onConnect(event: FMLNetworkEvent.ClientConnectedToServerEvent) {
+ onHypixel = mc.runCatching {
+ !event.isLocal && ((thePlayer?.clientBrand?.lowercase()?.contains("hypixel")
+ ?: currentServerData?.serverIP?.lowercase()?.contains("hypixel")) == true)
+ }.getOrDefault(false)
+ }
+
+ @SubscribeEvent
+ fun onDisconnect(event: FMLNetworkEvent.ClientDisconnectionFromServerEvent) {
+ onHypixel = false
+ }
+
+ // from Skytils, under AGPL 3.0
+ fun fetchScoreboardLines(): List<String> {
+ val scoreboard = mc.theWorld?.scoreboard ?: return emptyList()
+ val objective = scoreboard.getObjectiveInDisplaySlot(1) ?: return emptyList()
+ val scores = scoreboard.getSortedScores(objective).filter { input: Score? ->
+ input != null && input.playerName != null && !input.playerName
+ .startsWith("#")
+ }.take(15)
+ return scores.map {
+ ScorePlayerTeam.formatPlayerName(scoreboard.getPlayersTeam(it.playerName), it.playerName).cleanSB()
+ }.asReversed()
+ }
+
+ // modified from Harry282/Skyblock-Client, under AGPL 3.0
+ @SubscribeEvent
+ fun onTick(event: TickEvent.ClientTickEvent) {
+ if (!onHypixel || event.phase != TickEvent.Phase.START) return
+ if (ticks % 10 == 0) {
+ val title = mc.theWorld?.scoreboard?.getObjectiveInDisplaySlot(1)?.displayName?.cleanSB()
+ if (!inSkyblock) {
+ inSkyblock = title?.contains("SKYBLOCK") == true
+ }
+ if (inSkyblock) {
+ if (areaString == null) {
+ val tab = fetchTabEntries()
+ val areaString = tab.firstNotNullOfOrNull { areaRegex.find(it.text.stripControlCodes()) }?.let {
+ it.groupValues.getOrNull(1)
+ }
+ area = Area.fromString(areaString)
+ }
+ if (area == Area.Dungeon && dungeonFloor == null) {
+ val dungeonLine = fetchScoreboardLines().find {
+ it.run { contains("The Catacombs (") && !contains("Queue") }
+ }
+ dungeonFloor = dungeonLine?.substringBetween("(", ")")?.toDungeonFloor()
+ }
+ }
+ }
+ ticks++
+ }
+
+ override fun toString(): String =
+ "onHypixel: $onHypixel, inSkyblock: $inSkyblock, location: $area, floor: $dungeonFloor"
+
+} \ No newline at end of file