Fix the pages not working (I think)

This commit is contained in:
TomTom
2023-02-28 17:46:15 +01:00
parent e3445bb3fa
commit 043f70aa05
2 changed files with 53 additions and 53 deletions

View File

@@ -7,7 +7,7 @@ dependencies {
compileOnly 'net.kyori:adventure-api:4.10.1' compileOnly 'net.kyori:adventure-api:4.10.1'
compileOnly 'net.essentialsx:EssentialsX:2.19.0' compileOnly 'net.essentialsx:EssentialsX:2.19.0'
compileOnly 'com.github.ben-manes.caffeine:caffeine:3.0.6' compileOnly 'com.github.ben-manes.caffeine:caffeine:3.0.6'
compileOnly 'com.ticxo.modelengine:api:R3.1.4' compileOnly 'com.ticxo.modelengine:api:R3.1.5'
} }
build.dependsOn publishToMavenLocal build.dependsOn publishToMavenLocal

View File

@@ -3,6 +3,9 @@ package com.willfp.ecopets.pets
import com.willfp.eco.core.config.updating.ConfigUpdater import com.willfp.eco.core.config.updating.ConfigUpdater
import com.willfp.eco.core.gui.menu import com.willfp.eco.core.gui.menu
import com.willfp.eco.core.gui.menu.Menu import com.willfp.eco.core.gui.menu.Menu
import com.willfp.eco.core.gui.menu.MenuLayer
import com.willfp.eco.core.gui.page.Page
import com.willfp.eco.core.gui.page.PageChanger
import com.willfp.eco.core.gui.slot import com.willfp.eco.core.gui.slot
import com.willfp.eco.core.gui.slot.ConfigSlot import com.willfp.eco.core.gui.slot.ConfigSlot
import com.willfp.eco.core.gui.slot.FillerMask import com.willfp.eco.core.gui.slot.FillerMask
@@ -55,14 +58,11 @@ object PetsGUI {
val petInfoItemBuilder = { player: Player, _: Menu -> val petInfoItemBuilder = { player: Player, _: Menu ->
val pet = player.activePet val pet = player.activePet
if (pet == null) { pet?.getPetInfoIcon(player)
ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.pet-info.no-active.item"))) ?: ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.pet-info.no-active.item")))
.setDisplayName(plugin.configYml.getFormattedString("gui.pet-info.no-active.name")) .setDisplayName(plugin.configYml.getFormattedString("gui.pet-info.no-active.name"))
.addLoreLines(plugin.configYml.getFormattedStrings("gui.pet-info.no-active.lore")) .addLoreLines(plugin.configYml.getFormattedStrings("gui.pet-info.no-active.lore"))
.build() .build()
} else {
pet.getPetInfoIcon(player)
}
} }
val petIconBuilder = { player: Player, menu: Menu, index: Int -> val petIconBuilder = { player: Player, menu: Menu, index: Int ->
@@ -79,7 +79,7 @@ object PetsGUI {
} }
return menu(plugin.configYml.getInt("gui.rows")) { return menu(plugin.configYml.getInt("gui.rows")) {
setTitle(plugin.langYml.getString("menu.title")) title = plugin.langYml.getString("menu.title")
setMask( setMask(
FillerMask( FillerMask(
@@ -88,29 +88,22 @@ object PetsGUI {
) )
) )
setSlot( onRender { player, menu ->
plugin.configYml.getInt("gui.pet-info.row"), if (menu.getPage(player) > menu.getMaxPage(player)) {
plugin.configYml.getInt("gui.pet-info.column"), menu.setState(player, Page.PAGE_KEY, 1)
slot(petInfoItemBuilder) {
onLeftClick { event, _, _ ->
val player = event.whoClicked as Player
player.activePet?.levelGUI?.open(player)
} }
} }
)
for ((index, pair) in petAreaSlots.withIndex()) { for ((index, pair) in petAreaSlots.withIndex()) {
val (row, column) = pair val (row, column) = pair
setSlot(row, column, slot({ player, menu -> petIconBuilder(player, menu, index) }) {
setSlot(row, column, slot({ p, m -> petIconBuilder(p, m, index) }) { setUpdater { player, menu, _ ->
setUpdater { p, m, _ -> petIconBuilder(player, menu, index)
petIconBuilder(p, m, index)
} }
onLeftClick { event, _, _ -> onLeftClick { event, _, _ ->
val player = event.whoClicked as Player val player = event.whoClicked as Player
val page = menu.getPage(player)
val page = getPage(menu, player)
val unlockedPets = Pets.values() val unlockedPets = Pets.values()
.sortedByDescending { player.getPetLevel(it) } .sortedByDescending { player.getPetLevel(it) }
@@ -135,46 +128,38 @@ object PetsGUI {
} }
setSlot( setSlot(
plugin.configYml.getInt("gui.prev-page.location.row"), plugin.configYml.getInt("gui.pet-info.row"),
plugin.configYml.getInt("gui.prev-page.location.column"), plugin.configYml.getInt("gui.pet-info.column"),
slot( slot(petInfoItemBuilder) {
ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.prev-page.item"))) onLeftClick { event, _, _ ->
.setDisplayName(plugin.configYml.getString("gui.prev-page.name"))
.build()
) {
onLeftClick { event, _, menu ->
val player = event.whoClicked as Player val player = event.whoClicked as Player
val page = getPage(menu, player) player.activePet?.levelGUI?.open(player)
val newPage = max(1, page - 1)
menu.setState(player, pageKey, newPage)
} }
} }
) )
setSlot( addComponent(
MenuLayer.TOP,
plugin.configYml.getInt("gui.prev-page.location.row"),
plugin.configYml.getInt("gui.prev-page.location.column"),
PageChanger(
ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.prev-page.item")))
.setDisplayName(plugin.configYml.getString("gui.prev-page.name"))
.build(),
PageChanger.Direction.BACKWARDS
)
)
addComponent(
MenuLayer.TOP,
plugin.configYml.getInt("gui.next-page.location.row"), plugin.configYml.getInt("gui.next-page.location.row"),
plugin.configYml.getInt("gui.next-page.location.column"), plugin.configYml.getInt("gui.next-page.location.column"),
slot( PageChanger(
ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.next-page.item"))) ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.next-page.item")))
.setDisplayName(plugin.configYml.getString("gui.next-page.name")) .setDisplayName(plugin.configYml.getString("gui.next-page.name"))
.build() .build(),
) { PageChanger.Direction.FORWARDS
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 page = getPage(menu, player)
val newPage = min(pages, page + 1)
menu.setState(player, pageKey, newPage)
}
}
) )
setSlot(plugin.configYml.getInt("gui.close.location.row"), setSlot(plugin.configYml.getInt("gui.close.location.row"),
@@ -209,6 +194,21 @@ object PetsGUI {
ConfigSlot(config) ConfigSlot(config)
) )
} }
maxPages { player ->
val unlockedPets = Pets.values()
.sortedByDescending { player.getPetLevel(it) }
.filter { player.getPetLevel(it) > 0 }
val perPage = petAreaSlots.size
val pages = if (unlockedPets.isEmpty()) {
0
} else {
ceil((unlockedPets.size.toDouble() / perPage)).toInt()
}
pages
}
} }
} }