Added pages to pet GUI

This commit is contained in:
Auxilor
2022-06-18 11:19:36 +01:00
parent 6f5a8b9df2
commit 1c0c9ba259
2 changed files with 74 additions and 4 deletions

View File

@@ -13,10 +13,13 @@ import org.bukkit.Material
import org.bukkit.Sound import org.bukkit.Sound
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import kotlin.math.ceil
import kotlin.math.max
object PetsGUI { object PetsGUI {
private lateinit var menu: Menu private lateinit var menu: Menu
private val petAreaSlots = mutableListOf<Pair<Int, Int>>() private val petAreaSlots = mutableListOf<Pair<Int, Int>>()
private const val pageKey = "page"
@JvmStatic @JvmStatic
@ConfigUpdater @ConfigUpdater
@@ -75,19 +78,31 @@ object PetsGUI {
val (row, column) = pair val (row, column) = pair
setSlot(row, column, slot(ItemStack(Material.AIR)) { setSlot(row, column, slot(ItemStack(Material.AIR)) {
setUpdater { player, _, _ -> setUpdater { player, menu, _ ->
val unlockedPets = Pets.values().filter { player.getPetLevel(it) > 0 } val page = menu.getState<Int>(player, pageKey) ?: 1
val pet = unlockedPets.getOrNull(index)
val unlockedPets = Pets.values()
.sortedByDescending { player.getPetLevel(it) }
.filter { player.getPetLevel(it) > 0 }
val pagedIndex = ((page - 1) * petAreaSlots.size) + index
val pet = unlockedPets.getOrNull(pagedIndex)
pet?.getIcon(player) ?: ItemStack(Material.AIR) pet?.getIcon(player) ?: ItemStack(Material.AIR)
} }
onLeftClick { event, _, _ -> onLeftClick { event, _, _ ->
val player = event.whoClicked as Player val player = event.whoClicked as Player
val page = menu.getState<Int>(player, pageKey) ?: 1
val unlockedPets = Pets.values() val unlockedPets = Pets.values()
.sortedByDescending { player.getPetLevel(it) } .sortedByDescending { player.getPetLevel(it) }
.filter { player.getPetLevel(it) > 0 } .filter { player.getPetLevel(it) > 0 }
val pet = unlockedPets.getOrNull(index) ?: return@onLeftClick val pagedIndex = ((page - 1) * petAreaSlots.size) + index
val pet = unlockedPets.getOrNull(pagedIndex) ?: return@onLeftClick
if (player.activePet != pet) { if (player.activePet != pet) {
player.activePet = pet player.activePet = pet
@@ -103,6 +118,47 @@ object PetsGUI {
}) })
} }
setSlot(
plugin.configYml.getInt("gui.prev-page.location.row"),
plugin.configYml.getInt("gui.prev-page.location.column"),
slot(
ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.prev-page.item")))
.setDisplayName(plugin.configYml.getString("gui.prev-page.name"))
.build()
) {
onLeftClick { event, _, menu ->
val player = event.whoClicked as Player
var page = menu.getState(player, pageKey) ?: 1
page--
menu.addState(player, pageKey, page)
if (page == 0) {
open(event.whoClicked as Player)
}
}
}
)
setSlot(
plugin.configYml.getInt("gui.next-page.location.row"),
plugin.configYml.getInt("gui.next-page.location.column"),
slot(
ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.next-page.item")))
.setDisplayName(plugin.configYml.getString("gui.next-page.name"))
.build()
) {
onLeftClick { event, _, menu ->
val player = event.whoClicked as Player
val pages = ceil(Pets.values()
.filter { player.getPetLevel(it) > 0 }
.size.toDouble() / petAreaSlots.size).toInt()
val newPage = max(pages, (menu.getState(player, pageKey) ?: 1) + 1)
menu.addState(player, pageKey, newPage)
}
}
)
setSlot(plugin.configYml.getInt("gui.close.location.row"), setSlot(plugin.configYml.getInt("gui.close.location.row"),
plugin.configYml.getInt("gui.close.location.column"), plugin.configYml.getInt("gui.close.location.column"),
slot( slot(

View File

@@ -86,6 +86,20 @@ gui:
sound: ui_button_click sound: ui_button_click
pitch: 1 pitch: 1
prev-page:
material: arrow
name: "&fPrevious Page"
location:
row: 6
column: 4
next-page:
material: arrow
name: "&fNext Page"
location:
row: 6
column: 6
close: close:
item: barrier item: barrier
name: "&cClose" name: "&cClose"