Skip to content

Commit 122bbf2

Browse files
feat: allow searching others' trophy fish data with /trophyfish
1 parent 91135ad commit 122bbf2

File tree

3 files changed

+54
-21
lines changed

3 files changed

+54
-21
lines changed

src/main/kotlin/gg/skytils/skytilsmod/Skytils.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,9 @@ class Skytils {
485485
?: currentServerData?.serverIP?.lowercase()?.contains("hypixel") ?: false)
486486
}.onFailure { it.printStackTrace() }.getOrDefault(false)
487487

488-
TrophyFish.loadFromApi()
488+
IO.launch {
489+
TrophyFish.loadFromApi()
490+
}
489491
}
490492

491493
@SubscribeEvent(priority = EventPriority.HIGHEST)

src/main/kotlin/gg/skytils/skytilsmod/commands/impl/TrophyFishCommand.kt

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,53 @@
1818

1919
package gg.skytils.skytilsmod.commands.impl
2020

21-
import gg.essential.universal.ChatColor
2221
import gg.essential.universal.UChat
2322
import gg.essential.universal.wrappers.message.UMessage
24-
import gg.skytils.skytilsmod.commands.BaseCommand
23+
import gg.skytils.hypixel.types.skyblock.Member
24+
import gg.skytils.skytilsmod.Skytils
25+
import gg.skytils.skytilsmod.commands.stats.StatCommand
26+
import gg.skytils.skytilsmod.core.MC
2527
import gg.skytils.skytilsmod.features.impl.crimson.TrophyFish
28+
import kotlinx.coroutines.Dispatchers
29+
import kotlinx.coroutines.launch
30+
import kotlinx.coroutines.withContext
2631
import net.minecraft.client.entity.EntityPlayerSP
32+
import java.util.*
2733

28-
object TrophyFishCommand : BaseCommand("trophy", listOf("tf", "trophyfish")) {
29-
override fun processCommand(player: EntityPlayerSP, args: Array<String>) {
30-
if (args.isEmpty()) {
31-
UChat.chat(TrophyFish.generateTrophyFishList().joinToString("\n"))
32-
return
34+
object TrophyFishCommand : StatCommand("trophy", aliases = listOf("tf", "trophyfish")) {
35+
36+
override fun displayStats(username: String, uuid: UUID, profileData: Member) {
37+
Skytils.IO.launch {
38+
val trophyFishData = TrophyFish.getTrophyFishData(uuid)
39+
withContext(Dispatchers.MC) {
40+
if (trophyFishData == null) {
41+
printMessage("${Skytils.failPrefix} §cFailed to retrieve trophy fish data for ${username}.")
42+
} else printMessage("${Skytils.prefix} §bTrophy Fish for $username\n${TrophyFish.generateTrophyFishList(trophyFishData)}")
43+
}
3344
}
34-
when(args[0]) {
45+
}
46+
47+
override fun processCommand(player: EntityPlayerSP, args: Array<String>) {
48+
when(args.getOrNull(0)) {
3549
"reload" -> {
36-
val text = UMessage("${ChatColor.BLUE}Loading data...").mutable()
50+
val text = UMessage("${Skytils.prefix} §9Loading data...").mutable()
3751
text.chat()
38-
TrophyFish.loadFromApi()
39-
text.edit("${ChatColor.BLUE}Loaded!")
52+
Skytils.IO.launch {
53+
TrophyFish.loadFromApi()
54+
withContext(Dispatchers.MC) {
55+
text.edit("${Skytils.successPrefix} §aLoaded!")
56+
}
57+
}
4058
}
4159
"total" -> {
42-
UChat.chat(TrophyFish.generateTrophyFishList(true).joinToString("\n"))
60+
UChat.chat(TrophyFish.generateLocalTrophyFishList(true).joinToString("\n"))
61+
}
62+
null -> {
63+
UChat.chat(TrophyFish.generateLocalTrophyFishList().joinToString("\n"))
64+
}
65+
else -> {
66+
super.processCommand(player, args)
4367
}
44-
else -> getCommandUsage(player)
4568
}
4669
}
4770
}

src/main/kotlin/gg/skytils/skytilsmod/features/impl/crimson/TrophyFish.kt

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import gg.skytils.skytilsmod.utils.graphics.SmartFontRenderer
3030
import gg.skytils.skytilsmod.utils.graphics.colors.CommonColors
3131
import net.minecraftforge.client.event.ClientChatReceivedEvent
3232
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
33+
import java.util.UUID
3334

3435
object TrophyFish {
3536
private val trophyFish = mutableMapOf<String, Fish>()
@@ -40,11 +41,15 @@ object TrophyFish {
4041
Skytils.guiManager.registerElement(TrophyFishDisplay())
4142
}
4243

43-
fun loadFromApi() {
44+
suspend fun loadFromApi() {
4445
trophyFish.clear()
45-
val trophyFishData = API.getSelectedSkyblockProfileSync(UPlayer.getUUID())?.members?.get(UPlayer.getUUID().nonDashedString())?.trophy_fish
46-
trophyFishData?.fish_count?.forEach { (fish, data) ->
47-
trophyFish[fish] = Fish(data.bronze, data.silver, data.gold, data.diamond)
46+
trophyFish.putAll(getTrophyFishData(UPlayer.getUUID()) ?: return)
47+
}
48+
49+
suspend fun getTrophyFishData(uuid: UUID): Map<String, Fish>? {
50+
val trophyFishData = API.getSelectedSkyblockProfile(uuid)?.members?.get(uuid.nonDashedString())?.trophy_fish
51+
return trophyFishData?.fish_count?.entries?.associate { (fish, data) ->
52+
fish to Fish(data.bronze, data.silver, data.gold, data.diamond)
4853
}
4954
}
5055

@@ -70,8 +75,11 @@ object TrophyFish {
7075
}
7176
}
7277

73-
fun generateTrophyFishList(total: Boolean = false) =
74-
trophyFish.entries.sortedBy { (fish, _) -> TrophyFish.entries.indexOfFirst { it.name == fish } }.mapNotNull { (fish, data) ->
78+
fun generateLocalTrophyFishList(total: Boolean = false) =
79+
generateTrophyFishList(trophyFish, total)
80+
81+
fun generateTrophyFishList(data: Map<String, Fish>, total: Boolean = false) =
82+
data.entries.sortedBy { (fish, _) -> TrophyFish.entries.indexOfFirst { it.name == fish } }.mapNotNull { (fish, data) ->
7583
val name = TrophyFish.entries.find { it.name == fish }?.formattedName ?: return@mapNotNull null
7684
name + (if (total) " ${ChatColor.DARK_AQUA}[${ChatColor.LIGHT_PURPLE}${data.total}${ChatColor.DARK_AQUA}] " else " ${ChatColor.DARK_AQUA}» ") +
7785
"${ChatColor.DARK_GRAY}${data.bronze}${ChatColor.DARK_AQUA}-" +
@@ -113,7 +121,7 @@ object TrophyFish {
113121
val alignment = if (scaleX > sr.scaledWidth / 2f) SmartFontRenderer.TextAlignment.RIGHT_LEFT else SmartFontRenderer.TextAlignment.LEFT_RIGHT
114122
override fun render() {
115123
if (!toggled || !Utils.inSkyblock || SBInfo.mode != SkyblockIsland.CrimsonIsle.mode) return
116-
generateTrophyFishList(Config.showTrophyFishTotals).forEachIndexed { idx, str ->
124+
generateLocalTrophyFishList(Config.showTrophyFishTotals).forEachIndexed { idx, str ->
117125
fr.drawString(
118126
str,
119127
0f,

0 commit comments

Comments
 (0)