From 043f70aa05aa9d54a703156229e7a527f688b22a Mon Sep 17 00:00:00 2001 From: TomTom <93038247+AverageGithub@users.noreply.github.com> Date: Tue, 28 Feb 2023 17:46:15 +0100 Subject: [PATCH 1/3] Fix the pages not working (I think) --- eco-core/core-plugin/build.gradle | 2 +- .../kotlin/com/willfp/ecopets/pets/PetsGUI.kt | 104 +++++++++--------- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/eco-core/core-plugin/build.gradle b/eco-core/core-plugin/build.gradle index c6ad525..f64f672 100644 --- a/eco-core/core-plugin/build.gradle +++ b/eco-core/core-plugin/build.gradle @@ -7,7 +7,7 @@ dependencies { compileOnly 'net.kyori:adventure-api:4.10.1' compileOnly 'net.essentialsx:EssentialsX:2.19.0' 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 diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt index f90504f..8a9eb42 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt @@ -3,6 +3,9 @@ package com.willfp.ecopets.pets import com.willfp.eco.core.config.updating.ConfigUpdater import com.willfp.eco.core.gui.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.ConfigSlot import com.willfp.eco.core.gui.slot.FillerMask @@ -55,14 +58,11 @@ object PetsGUI { val petInfoItemBuilder = { player: Player, _: Menu -> val pet = player.activePet - if (pet == null) { - ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.pet-info.no-active.item"))) + pet?.getPetInfoIcon(player) + ?: ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.pet-info.no-active.item"))) .setDisplayName(plugin.configYml.getFormattedString("gui.pet-info.no-active.name")) .addLoreLines(plugin.configYml.getFormattedStrings("gui.pet-info.no-active.lore")) .build() - } else { - pet.getPetInfoIcon(player) - } } val petIconBuilder = { player: Player, menu: Menu, index: Int -> @@ -79,7 +79,7 @@ object PetsGUI { } return menu(plugin.configYml.getInt("gui.rows")) { - setTitle(plugin.langYml.getString("menu.title")) + title = plugin.langYml.getString("menu.title") setMask( FillerMask( @@ -88,29 +88,22 @@ object PetsGUI { ) ) - setSlot( - plugin.configYml.getInt("gui.pet-info.row"), - plugin.configYml.getInt("gui.pet-info.column"), - slot(petInfoItemBuilder) { - onLeftClick { event, _, _ -> - val player = event.whoClicked as Player - player.activePet?.levelGUI?.open(player) - } + onRender { player, menu -> + if (menu.getPage(player) > menu.getMaxPage(player)) { + menu.setState(player, Page.PAGE_KEY, 1) } - ) + } for ((index, pair) in petAreaSlots.withIndex()) { val (row, column) = pair - - setSlot(row, column, slot({ p, m -> petIconBuilder(p, m, index) }) { - setUpdater { p, m, _ -> - petIconBuilder(p, m, index) + setSlot(row, column, slot({ player, menu -> petIconBuilder(player, menu, index) }) { + setUpdater { player, menu, _ -> + petIconBuilder(player, menu, index) } onLeftClick { event, _, _ -> val player = event.whoClicked as Player - - val page = getPage(menu, player) + val page = menu.getPage(player) val unlockedPets = Pets.values() .sortedByDescending { player.getPetLevel(it) } @@ -135,46 +128,38 @@ 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 -> + plugin.configYml.getInt("gui.pet-info.row"), + plugin.configYml.getInt("gui.pet-info.column"), + slot(petInfoItemBuilder) { + onLeftClick { event, _, _ -> val player = event.whoClicked as Player - val page = getPage(menu, player) - - val newPage = max(1, page - 1) - - menu.setState(player, pageKey, newPage) + player.activePet?.levelGUI?.open(player) } } ) - 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.column"), - slot( + PageChanger( 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 page = getPage(menu, player) - - val newPage = min(pages, page + 1) - - menu.setState(player, pageKey, newPage) - } - } + .build(), + PageChanger.Direction.FORWARDS + ) ) setSlot(plugin.configYml.getInt("gui.close.location.row"), @@ -209,6 +194,21 @@ object PetsGUI { 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 + } } } From 1a8c42f40a2442ba35944ad736d97ec3a23c2f17 Mon Sep 17 00:00:00 2001 From: TomTom <93038247+AverageGithub@users.noreply.github.com> Date: Tue, 28 Feb 2023 18:45:00 +0100 Subject: [PATCH 2/3] Fixed the fix --- .../kotlin/com/willfp/ecopets/pets/PetsGUI.kt | 94 +++++++++++-------- 1 file changed, 53 insertions(+), 41 deletions(-) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt index 8a9eb42..2d1eefe 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt @@ -3,9 +3,8 @@ package com.willfp.ecopets.pets import com.willfp.eco.core.config.updating.ConfigUpdater import com.willfp.eco.core.gui.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.page.PageChangeEvent import com.willfp.eco.core.gui.slot import com.willfp.eco.core.gui.slot.ConfigSlot import com.willfp.eco.core.gui.slot.FillerMask @@ -24,17 +23,6 @@ import kotlin.math.min object PetsGUI { private lateinit var menu: Menu private val petAreaSlots = mutableListOf>() - private const val pageKey = "page" - - private fun getPage(menu: Menu, player: Player): Int { - val pages = ceil(Pets.values() - .filter { player.getPetLevel(it) > 0 } - .size.toDouble() / petAreaSlots.size).toInt() - - val page = menu.getState(player, pageKey) ?: 1 - - return max(min(pages, page + 1), 1) - } @JvmStatic @ConfigUpdater @@ -66,13 +54,13 @@ object PetsGUI { } val petIconBuilder = { player: Player, menu: Menu, index: Int -> - val page = getPage(menu, player) + val page = menu.getPage(player) val unlockedPets = Pets.values() .sortedByDescending { player.getPetLevel(it) } .filter { player.getPetLevel(it) > 0 } - val pagedIndex = ((page - 1) * petAreaSlots.size) + index + val pagedIndex = page * petAreaSlots.size - petAreaSlots.size + index val pet = unlockedPets.getOrNull(pagedIndex) pet?.getIcon(player) ?: ItemStack(Material.AIR) @@ -83,12 +71,14 @@ object PetsGUI { setMask( FillerMask( - MaskItems.fromItemNames(plugin.configYml.getStrings("gui.mask.materials")), + MaskItems.fromItemNames(plugin .configYml.getStrings("gui.mask.materials")), *plugin.configYml.getStrings("gui.mask.pattern").toTypedArray() ) ) onRender { player, menu -> + menu.setState(player, "ecopets", true) + if (menu.getPage(player) > menu.getMaxPage(player)) { menu.setState(player, Page.PAGE_KEY, 1) } @@ -109,7 +99,7 @@ object PetsGUI { .sortedByDescending { player.getPetLevel(it) } .filter { player.getPetLevel(it) > 0 } - val pagedIndex = ((page - 1) * petAreaSlots.size) + index + val pagedIndex = page * petAreaSlots.size - petAreaSlots.size + index val pet = unlockedPets.getOrNull(pagedIndex) ?: return@onLeftClick @@ -127,6 +117,52 @@ object PetsGUI { }) } + // I do this for backwards compatibility because with PageChanger if you don't have any more pages, the item will disappear and this would require an update of the config for all users + // This is terrible imo, but everything for compatibility! + 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, _, _ -> + val player = event.whoClicked as Player + val page = menu.getPage(player) + val newPage = max(1, min(page + -1, menu.getMaxPage(player))) + + if (newPage == page) { + return@onLeftClick + } + + menu.setState(player, Page.PAGE_KEY, newPage) + menu.callEvent(player, PageChangeEvent(newPage, page)) + } + } + ) + + 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, _, _ -> + val player = event.whoClicked as Player + val page = menu.getPage(player) + val newPage = max(1, min(page + 1, menu.getMaxPage(player))) + + if (newPage == page) { + return@onLeftClick + } + + menu.setState(player, Page.PAGE_KEY, newPage) + menu.callEvent(player, PageChangeEvent(newPage, page)) + } + } + ) + setSlot( plugin.configYml.getInt("gui.pet-info.row"), plugin.configYml.getInt("gui.pet-info.column"), @@ -138,30 +174,6 @@ object PetsGUI { } ) - 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.column"), - PageChanger( - ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.next-page.item"))) - .setDisplayName(plugin.configYml.getString("gui.next-page.name")) - .build(), - PageChanger.Direction.FORWARDS - ) - ) - setSlot(plugin.configYml.getInt("gui.close.location.row"), plugin.configYml.getInt("gui.close.location.column"), slot( From 7a2a6accea09ffd95e58d72da17d1e706044d3ca Mon Sep 17 00:00:00 2001 From: TomTom <93038247+AverageGithub@users.noreply.github.com> Date: Tue, 28 Feb 2023 18:46:27 +0100 Subject: [PATCH 3/3] Codestyle --- .../kotlin/com/willfp/ecopets/pets/PetsGUI.kt | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt index 2d1eefe..71d4d8a 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecopets/pets/PetsGUI.kt @@ -33,8 +33,8 @@ object PetsGUI { val bottomRightColumn = plugin.configYml.getInt("gui.pet-area.bottom-right.column") petAreaSlots.clear() - for (row in topLeftRow..bottomRightRow) { - for (column in topLeftColumn..bottomRightColumn) { + for (row in topLeftRow .. bottomRightRow) { + for (column in topLeftColumn .. bottomRightColumn) { petAreaSlots.add(Pair(row, column)) } } @@ -71,7 +71,7 @@ object PetsGUI { setMask( FillerMask( - MaskItems.fromItemNames(plugin .configYml.getStrings("gui.mask.materials")), + MaskItems.fromItemNames(plugin.configYml.getStrings("gui.mask.materials")), *plugin.configYml.getStrings("gui.mask.pattern").toTypedArray() ) ) @@ -86,7 +86,7 @@ object PetsGUI { for ((index, pair) in petAreaSlots.withIndex()) { val (row, column) = pair - setSlot(row, column, slot({ player, menu -> petIconBuilder(player, menu, index) }) { + setSlot(row, column, slot({ player, menu -> petIconBuilder(player, menu, index) }) { setUpdater { player, menu, _ -> petIconBuilder(player, menu, index) } @@ -122,9 +122,11 @@ 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()) + slot( + ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.prev-page.item"))) + .setDisplayName(plugin.configYml.getString("gui.prev-page.name")) + .build() + ) { onLeftClick { event, _, _ -> val player = event.whoClicked as Player @@ -144,9 +146,11 @@ object PetsGUI { 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()) + slot( + ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.next-page.item"))) + .setDisplayName(plugin.configYml.getString("gui.next-page.name")) + .build() + ) { onLeftClick { event, _, _ -> val player = event.whoClicked as Player