Fixed the fix

This commit is contained in:
TomTom
2023-02-28 18:45:00 +01:00
parent 043f70aa05
commit 1a8c42f40a

View File

@@ -3,9 +3,8 @@ 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.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
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
@@ -24,17 +23,6 @@ import kotlin.math.min
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"
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 @JvmStatic
@ConfigUpdater @ConfigUpdater
@@ -66,13 +54,13 @@ object PetsGUI {
} }
val petIconBuilder = { player: Player, menu: Menu, index: Int -> val petIconBuilder = { player: Player, menu: Menu, index: Int ->
val page = getPage(menu, player) val page = menu.getPage(player)
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 pagedIndex = ((page - 1) * petAreaSlots.size) + index val pagedIndex = page * petAreaSlots.size - petAreaSlots.size + index
val pet = unlockedPets.getOrNull(pagedIndex) val pet = unlockedPets.getOrNull(pagedIndex)
pet?.getIcon(player) ?: ItemStack(Material.AIR) pet?.getIcon(player) ?: ItemStack(Material.AIR)
@@ -89,6 +77,8 @@ object PetsGUI {
) )
onRender { player, menu -> onRender { player, menu ->
menu.setState(player, "ecopets", true)
if (menu.getPage(player) > menu.getMaxPage(player)) { if (menu.getPage(player) > menu.getMaxPage(player)) {
menu.setState(player, Page.PAGE_KEY, 1) menu.setState(player, Page.PAGE_KEY, 1)
} }
@@ -109,7 +99,7 @@ object PetsGUI {
.sortedByDescending { player.getPetLevel(it) } .sortedByDescending { player.getPetLevel(it) }
.filter { player.getPetLevel(it) > 0 } .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 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( setSlot(
plugin.configYml.getInt("gui.pet-info.row"), plugin.configYml.getInt("gui.pet-info.row"),
plugin.configYml.getInt("gui.pet-info.column"), 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"), setSlot(plugin.configYml.getInt("gui.close.location.row"),
plugin.configYml.getInt("gui.close.location.column"), plugin.configYml.getInt("gui.close.location.column"),
slot( slot(