Bad pets menu
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
12
src/main/kotlin/moe/nea/firmament/gui/WTightScrollPanel.kt
Normal file
12
src/main/kotlin/moe/nea/firmament/gui/WTightScrollPanel.kt
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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")
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user