diff options
author | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-04-10 20:54:58 +0200 |
---|---|---|
committer | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-04-10 20:54:58 +0200 |
commit | 029800349b1af9fa8f81bd394bbb887f36dcb19f (patch) | |
tree | 02f5156057d01cb6adc98c35bed25a1cb5239ae5 /src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt | |
parent | 28bc87528709c76d85d90c065d428ef9c31d2bbb (diff) | |
download | skyhanni-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.kt | 172 |
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 |