From 9477a32ad577fc242fd83059826706fcea8c6f31 Mon Sep 17 00:00:00 2001 From: nea Date: Sat, 3 Jun 2023 14:24:48 +0200 Subject: Bad pets menu --- .../moe/nea/firmament/gui/WTightScrollPanel.kt | 12 ++++++ .../nea/firmament/gui/profileviewer/PetsPage.kt | 50 ++++++++++++++++++++++ .../firmament/gui/profileviewer/ProfileViewer.kt | 2 +- 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/moe/nea/firmament/gui/WTightScrollPanel.kt create mode 100644 src/main/kotlin/moe/nea/firmament/gui/profileviewer/PetsPage.kt (limited to 'src/main/kotlin/moe/nea/firmament/gui') diff --git a/src/main/kotlin/moe/nea/firmament/gui/WTightScrollPanel.kt b/src/main/kotlin/moe/nea/firmament/gui/WTightScrollPanel.kt new file mode 100644 index 0000000..e9905d8 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/gui/WTightScrollPanel.kt @@ -0,0 +1,12 @@ +package moe.nea.firmament.gui + +import io.github.cottonmc.cotton.gui.widget.WPanel +import io.github.cottonmc.cotton.gui.widget.WScrollPanel +import io.github.cottonmc.cotton.gui.widget.WWidget + +class WTightScrollPanel(val widget: WWidget, val margin: Int = 3) : WScrollPanel(widget) { + override fun setSize(x: Int, y: Int) { + (widget as? WPanel)?.layout() + super.setSize(widget.width + 8 + margin, y) + } +} diff --git a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/PetsPage.kt b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/PetsPage.kt new file mode 100644 index 0000000..0c3e5c8 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/PetsPage.kt @@ -0,0 +1,50 @@ +package moe.nea.firmament.gui.profileviewer + +import io.github.cottonmc.cotton.gui.client.BackgroundPainter +import io.github.cottonmc.cotton.gui.widget.TooltipBuilder +import io.github.cottonmc.cotton.gui.widget.WGridPanel +import io.github.cottonmc.cotton.gui.widget.WItem +import io.github.cottonmc.cotton.gui.widget.WScrollPanel +import io.github.cottonmc.cotton.gui.widget.WText +import io.github.cottonmc.cotton.gui.widget.WWidget +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.client.item.TooltipContext +import net.minecraft.client.util.math.MatrixStack +import net.minecraft.item.Items +import net.minecraft.text.Text +import moe.nea.firmament.gui.WFixedPanel +import moe.nea.firmament.gui.WTightScrollPanel +import moe.nea.firmament.rei.SBItemStack + +object PetsPage : ProfilePage { + override fun getElements(profileViewer: ProfileViewer): WWidget { + return WGridPanel().also { + it.insets = Insets.ROOT_PANEL + it.add(WText(Text.literal(profileViewer.account.getDisplayName())), 0, 0, 6, 1) + it.add((WTightScrollPanel(WGridPanel().also { + it.setGaps(8, 8) + for ((i, pet) in profileViewer.member.pets.withIndex()) { + val stack = SBItemStack(pet.itemId, 1).asItemStack() + it.add(object : WItem(stack) { + override fun paint(matrices: MatrixStack?, x: Int, y: Int, mouseX: Int, mouseY: Int) { + BackgroundPainter.SLOT.paintBackground(matrices, x, y, this) + super.paint(matrices, x, y, mouseX, mouseY) + } + + override fun addTooltip(tooltip: TooltipBuilder) { + tooltip.add(*stack.getTooltip(null, TooltipContext.BASIC).toTypedArray()) + } + }, i % 5, i / 5, 1, 1) + } + it.layout() + })), 0, 1, 8, 8) + } + } + + override val icon: Icon + get() = ItemIcon(Items.BONE) + override val text: Text + get() = Text.translatable("firmament.pv.skills") +} diff --git a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfileViewer.kt b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfileViewer.kt index 6b70e6c..c22fd39 100644 --- a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfileViewer.kt +++ b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfileViewer.kt @@ -28,7 +28,7 @@ class ProfileViewer( init { val panel = WTabPanel().also { rootPanel = it } panel.backgroundPainter - listOf(SkillPage) + listOf(SkillPage, PetsPage) .forEach { page -> panel.add(page.getElements(this)) { it.icon(page.icon) -- cgit