aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-04-10 20:54:58 +0200
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-04-10 20:54:58 +0200
commit029800349b1af9fa8f81bd394bbb887f36dcb19f (patch)
tree02f5156057d01cb6adc98c35bed25a1cb5239ae5 /src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt
parent28bc87528709c76d85d90c065d428ef9c31d2bbb (diff)
downloadskyhanni-029800349b1af9fa8f81bd394bbb887f36dcb19f.tar.gz
skyhanni-029800349b1af9fa8f81bd394bbb887f36dcb19f.tar.bz2
skyhanni-029800349b1af9fa8f81bd394bbb887f36dcb19f.zip
renamed HypixelData
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt172
1 files changed, 172 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt
new file mode 100644
index 000000000..cab37ecc0
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt
@@ -0,0 +1,172 @@
+package at.hannibal2.skyhanni.data
+
+import at.hannibal2.skyhanni.events.IslandChangeEvent
+import at.hannibal2.skyhanni.events.LorenzChatEvent
+import at.hannibal2.skyhanni.events.ProfileJoinEvent
+import at.hannibal2.skyhanni.utils.LorenzLogger
+import at.hannibal2.skyhanni.utils.StringUtils.removeColor
+import at.hannibal2.skyhanni.utils.TabListData
+import net.minecraft.client.Minecraft
+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
+
+class HypixelData {
+
+ companion object {
+ var hypixel = false
+ var skyBlock = false
+ var skyBlockIsland = IslandType.UNKNOWN
+
+ //Ironman, Stranded and Bingo
+ var noTrade = false
+
+ var ironman = false
+ var stranded = false
+ var bingo = false
+
+ var profileName = ""
+
+ fun readSkyBlockArea(): String {
+ return ScoreboardData.sidebarLinesFormatted
+ .firstOrNull { it.startsWith(" §7⏣ ") }
+ ?.substring(5)?.removeColor()
+ ?: "invalid"
+ }
+ }
+
+ private var loggerIslandChange = LorenzLogger("debug/island_change")
+
+ @SubscribeEvent
+ fun onConnect(event: FMLNetworkEvent.ClientConnectedToServerEvent) {
+ hypixel = Minecraft.getMinecraft().runCatching {
+ !event.isLocal && (thePlayer?.clientBrand?.lowercase()?.contains("hypixel")
+ ?: currentServerData?.serverIP?.lowercase()?.contains("hypixel") ?: false)
+ }.onFailure { it.printStackTrace() }.getOrDefault(false)
+ }
+
+ @SubscribeEvent
+ fun onWorldChange(event: WorldEvent.Load) {
+ skyBlock = false
+ }
+
+ @SubscribeEvent
+ fun onDisconnect(event: FMLNetworkEvent.ClientDisconnectionFromServerEvent) {
+ hypixel = false
+ skyBlock = false
+ }
+
+ @SubscribeEvent
+ fun onChatMessage(event: LorenzChatEvent) {
+ if (!hypixel) return
+
+ val message = event.message.removeColor().lowercase()
+ if (message.startsWith("your profile was changed to:")) {
+ val newProfile = message.replace("your profile was changed to:", "").replace("(co-op)", "").trim()
+ profileName = newProfile
+ ProfileJoinEvent(newProfile).postAndCatch()
+ }
+ if (message.startsWith("you are playing on profile:")) {
+ val newProfile = message.replace("you are playing on profile:", "").replace("(co-op)", "").trim()
+ if (profileName == newProfile) return
+ profileName = newProfile
+ ProfileJoinEvent(newProfile).postAndCatch()
+ }
+ }
+
+ var tick = 0
+
+ @SubscribeEvent
+ fun onTick(event: TickEvent.ClientTickEvent) {
+ if (!hypixel) return
+ if (event.phase != TickEvent.Phase.START) return
+
+ tick++
+
+ if (tick % 5 != 0) return
+
+ val inSkyBlock = checkScoreboard()
+ if (inSkyBlock) {
+ checkIsland()
+ checkSidebar()
+ }
+
+ if (inSkyBlock == skyBlock) return
+ skyBlock = inSkyBlock
+ }
+
+ private fun checkSidebar() {
+ ironman = false
+ stranded = false
+ bingo = false
+
+ for (line in ScoreboardData.sidebarLinesFormatted) {
+ when (line) {
+ " §7Ⓑ §7Bingo", // No Rank
+ " §aⒷ §aBingo", // Rank 1
+ " §9Ⓑ §9Bingo", // Rank 2
+ " §5Ⓑ §5Bingo", // Rank 3
+ " §6Ⓑ §6Bingo", // Rank 4
+ -> {
+ bingo = true
+ }
+
+ " §7♲ §7Ironman" -> {
+ ironman = true
+ }
+
+ " §a☀ §aStranded" -> {
+ stranded = true
+ }
+ }
+ }
+
+ noTrade = ironman || stranded || bingo
+ }
+
+ private fun checkIsland() {
+ var newIsland = ""
+ var guesting = false
+ for (line in TabListData.getTabList()) {
+ if (line.startsWith("§b§lArea: ")) {
+ newIsland = line.split(": ")[1].removeColor()
+ }
+ if (line == " Status: §r§9Guest") {
+ guesting = true
+ }
+ }
+
+ val islandType = getIslandType(newIsland, guesting)
+ if (skyBlockIsland != islandType) {
+ IslandChangeEvent(islandType, skyBlockIsland).postAndCatch()
+ if (islandType == IslandType.UNKNOWN) {
+ println("Unknown island detected: '$newIsland'")
+ loggerIslandChange.log("Unknown: '$newIsland'")
+ } else {
+ loggerIslandChange.log(islandType.name)
+ }
+ skyBlockIsland = islandType
+ }
+ }
+
+ private fun getIslandType(newIsland: String, guesting: Boolean): IslandType {
+ val islandType = IslandType.getBySidebarName(newIsland)
+ if (guesting) {
+ if (islandType == IslandType.PRIVATE_ISLAND) return IslandType.PRIVATE_ISLAND_GUEST
+ if (islandType == IslandType.GARDEN) return IslandType.GARDEN_GUEST
+ }
+ return islandType
+ }
+
+ private fun checkScoreboard(): Boolean {
+ val minecraft = Minecraft.getMinecraft()
+ val world = minecraft.theWorld ?: return false
+
+ val objective = world.scoreboard.getObjectiveInDisplaySlot(1) ?: return false
+ val displayName = objective.displayName
+ val scoreboardTitle = displayName.removeColor()
+ return scoreboardTitle.contains("SKYBLOCK") ||
+ scoreboardTitle.contains("SKIBLOCK") // April 1st jokes are so funny
+ }
+} \ No newline at end of file