diff options
author | Appability <appable@icloud.com> | 2022-10-17 16:11:40 -0700 |
---|---|---|
committer | Appability <appable@icloud.com> | 2022-10-17 16:11:40 -0700 |
commit | fcd49c8b59f9c76008b5112a2e296c164b168842 (patch) | |
tree | ba3be0850cfe2185a68e6ba9fd862e5c59fd57dc /src/main/kotlin/com/ambientaddons/utils/SBLocation.kt | |
parent | d4245bb705c7d8965e6bf63c90614dcfef38dcf7 (diff) | |
download | AmbientAddons-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.kt | 89 |
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 |