aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt
diff options
context:
space:
mode:
authornea <nea@nea.moe>2023-06-11 02:43:14 +0200
committernea <nea@nea.moe>2023-06-11 02:43:14 +0200
commita36c8f1c0eae969dcee8cf690f12d9121350212d (patch)
treeea93f19bf5f77f8b5e42a7b56162d9b6492b7fed /src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt
parent040f7c7275568d783bfa5e4ed20412f72d126549 (diff)
downloadFirmament-a36c8f1c0eae969dcee8cf690f12d9121350212d.tar.gz
Firmament-a36c8f1c0eae969dcee8cf690f12d9121350212d.tar.bz2
Firmament-a36c8f1c0eae969dcee8cf690f12d9121350212d.zip
Add collection info to skill page
Diffstat (limited to 'src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt')
-rw-r--r--src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt100
1 files changed, 94 insertions, 6 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt
index c750101..2de217e 100644
--- a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt
+++ b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt
@@ -1,20 +1,39 @@
package moe.nea.firmament.gui.profileviewer
import io.github.cottonmc.cotton.gui.widget.TooltipBuilder
+import io.github.cottonmc.cotton.gui.widget.WBox
import io.github.cottonmc.cotton.gui.widget.WGridPanel
+import io.github.cottonmc.cotton.gui.widget.WPanel
+import io.github.cottonmc.cotton.gui.widget.WTabPanel
import io.github.cottonmc.cotton.gui.widget.WText
import io.github.cottonmc.cotton.gui.widget.WWidget
+import io.github.cottonmc.cotton.gui.widget.data.Axis
+import io.github.cottonmc.cotton.gui.widget.data.HorizontalAlignment
import io.github.cottonmc.cotton.gui.widget.data.Insets
import io.github.cottonmc.cotton.gui.widget.icon.Icon
import io.github.cottonmc.cotton.gui.widget.icon.ItemIcon
import net.minecraft.item.ItemStack
import net.minecraft.item.Items
+import net.minecraft.text.Style
import net.minecraft.text.Text
+import net.minecraft.util.Formatting
+import moe.nea.firmament.apis.CollectionInfo
+import moe.nea.firmament.apis.CollectionType
+import moe.nea.firmament.apis.Member
import moe.nea.firmament.apis.Skill
import moe.nea.firmament.gui.WBar
+import moe.nea.firmament.gui.WFixedPanel
+import moe.nea.firmament.gui.WTitledItem
+import moe.nea.firmament.hud.horizontal
+import moe.nea.firmament.rei.FirmamentReiPlugin.Companion.asItemEntry
+import moe.nea.firmament.rei.SBItemEntryDefinition
+import moe.nea.firmament.repo.HypixelStaticData
+import moe.nea.firmament.repo.ItemCache.asItemStack
import moe.nea.firmament.repo.RepoManager
import moe.nea.firmament.util.FirmFormatters
+import moe.nea.firmament.util.modifyLore
import moe.nea.firmament.util.toShedaniel
+import moe.nea.firmament.util.toTextColor
object SkillPage : ProfilePage {
@@ -37,14 +56,83 @@ object SkillPage : ProfilePage {
}
}
+ private fun collectionItem(type: CollectionType, info: CollectionInfo, skill: Skill, member: Member): WWidget {
+ val collectionCount = member.collection[type] ?: 0
+ val unlockedTiers = info.tiers.count { it.amountRequired <= collectionCount }
+ return WTitledItem(
+ SBItemEntryDefinition.getEntry(type.skyblockId).asItemEntry().value.copy()
+ .also {
+ it.setCustomName(
+ Text.literal(info.name).fillStyle(
+ Style.EMPTY.withItalic(false).withBold(true)
+ .withColor(skill.color.toTextColor())
+ )
+ )
+ it.modifyLore { old ->
+ listOf(
+ Text.literal("${info.name} Collection: $collectionCount / ${info.tiers.last().amountRequired}"),
+ Text.literal("Tiers unlocked: $unlockedTiers")
+ ).map {
+ it.fillStyle(
+ Style.EMPTY.withItalic(false).withColor(Formatting.GRAY)
+ )
+ }
+ }
+ }, countString = Text.literal("$unlockedTiers").styled {
+ if (unlockedTiers == info.maxTiers)
+ it.withColor(Formatting.YELLOW)
+ else it
+ }
+ )
+ }
+
+ private fun collectionPanel(profileViewer: ProfileViewer): WTabPanel {
+ return WTabPanel().also {
+ val data = HypixelStaticData.collectionData
+ val panels = mutableListOf<WPanel>()
+ for ((skill, collections) in data.entries) {
+ val panel = WBox(Axis.HORIZONTAL).also {
+ it.horizontalAlignment = HorizontalAlignment.CENTER
+ it.add(WFixedPanel(WGridPanel().also {
+ it.insets = Insets.ROOT_PANEL
+ it.setGaps(2, 2)
+ var x = 0
+ var y = 0
+ for (item in collections.items) {
+ it.add(collectionItem(item.key, item.value, skill, profileViewer.member), x, y, 1, 1)
+ x++
+ if (x == 5) {
+ x = 0
+ y++
+ }
+ }
+ }))
+ }
+ panels.add(panel)
+ it.add(panel) {
+ it.tooltip(
+ Text.translatable("firmament.pv.skills.${skill.name.lowercase()}")
+ .styled { it.withColor(skill.color.toTextColor()) })
+ it.icon(ItemIcon(RepoManager.getNEUItem(skill.icon).asItemStack()))
+ }
+ }
+ it.layout()
+ val tabWidth = it.width
+ panels.forEach { it.setSize(tabWidth - Insets.ROOT_PANEL.horizontal, it.height) }
+ }
+ }
+
override fun getElements(profileViewer: ProfileViewer): WWidget {
- return WGridPanel().also {
+ return WBox(Axis.HORIZONTAL).also {
it.insets = Insets.ROOT_PANEL
- it.add(WText(Text.literal(profileViewer.account.getDisplayName())), 0, 0, 6, 1)
- for ((i, skill) in Skill.values().withIndex()) {
- it.add(WText(Text.translatable("firmament.pv.skills.${skill.name.lowercase()}")), 0, i + 1, 4, 1)
- it.add(skillBar(profileViewer, skill), 4, i + 1, 4, 1)
- }
+ it.add(WGridPanel().also {
+ it.add(WText(Text.literal(profileViewer.account.getDisplayName())), 0, 0, 8, 1)
+ for ((i, skill) in Skill.values().withIndex()) {
+ it.add(WText(Text.translatable("firmament.pv.skills.${skill.name.lowercase()}")), 0, i + 1, 4, 1)
+ it.add(skillBar(profileViewer, skill), 4, i + 1, 4, 1)
+ }
+ })
+ it.add(collectionPanel(profileViewer))
}
}