Bad pets menu

This commit is contained in:
nea
2023-06-03 14:24:48 +02:00
parent 06a8ace53c
commit 9477a32ad5
5 changed files with 74 additions and 3 deletions

View File

@@ -14,6 +14,7 @@ import net.minecraft.util.DyeColor
import net.minecraft.util.Formatting import net.minecraft.util.Formatting
import moe.nea.firmament.repo.RepoManager import moe.nea.firmament.repo.RepoManager
import moe.nea.firmament.util.LegacyFormattingCode import moe.nea.firmament.util.LegacyFormattingCode
import moe.nea.firmament.util.SkyblockId
import moe.nea.firmament.util.json.DashlessUUIDSerializer import moe.nea.firmament.util.json.DashlessUUIDSerializer
import moe.nea.firmament.util.json.InstantAsLongSerializer import moe.nea.firmament.util.json.InstantAsLongSerializer
@@ -108,7 +109,9 @@ data class Pet(
val candyUsed: Int, val candyUsed: Int,
val heldItem: String?, val heldItem: String?,
val skin: String?, val skin: String?,
) ) {
val itemId get() = SkyblockId("${type.name};${tier.ordinal}")
}
@Serializable @Serializable
data class PlayerResponse( data class PlayerResponse(

View File

@@ -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)
}
}

View File

@@ -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")
}

View File

@@ -28,7 +28,7 @@ class ProfileViewer(
init { init {
val panel = WTabPanel().also { rootPanel = it } val panel = WTabPanel().also { rootPanel = it }
panel.backgroundPainter panel.backgroundPainter
listOf<ProfilePage>(SkillPage) listOf<ProfilePage>(SkillPage, PetsPage)
.forEach { page -> .forEach { page ->
panel.add(page.getElements(this)) { panel.add(page.getElements(this)) {
it.icon(page.icon) it.icon(page.icon)

View File

@@ -45,7 +45,13 @@ data class SBItemStack(
val neuItem: NEUItem?, val neuItem: NEUItem?,
val stackSize: Int, val stackSize: Int,
) { ) {
fun asItemStack(): ItemStack? { constructor(skyblockId: SkyblockId, stackSize: Int = 1) : this(
skyblockId,
RepoManager.getNEUItem(skyblockId),
stackSize
)
fun asItemStack(): ItemStack {
if (skyblockId == SkyblockId.COINS) if (skyblockId == SkyblockId.COINS)
return ItemCache.coinItem(stackSize) return ItemCache.coinItem(stackSize)
return neuItem.asItemStack(idHint = skyblockId).copyWithCount(stackSize) return neuItem.asItemStack(idHint = skyblockId).copyWithCount(stackSize)