Restructured InventoryGUI package
This commit is contained in:
@@ -2,76 +2,9 @@
|
|||||||
|
|
||||||
package net.axay.kspigot.inventory
|
package net.axay.kspigot.inventory
|
||||||
|
|
||||||
import net.axay.kspigot.event.listen
|
|
||||||
import org.bukkit.entity.HumanEntity
|
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent
|
|
||||||
import org.bukkit.inventory.Inventory
|
import org.bukkit.inventory.Inventory
|
||||||
import org.bukkit.inventory.InventoryView
|
|
||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
|
|
||||||
// EXTENSIONS
|
|
||||||
|
|
||||||
fun HumanEntity.openGUI(gui: InventoryGUI<*>, page: Int? = null): InventoryView? {
|
|
||||||
|
|
||||||
closeInventory()
|
|
||||||
|
|
||||||
if (page != null)
|
|
||||||
gui.loadPageUnsafe(page)
|
|
||||||
|
|
||||||
return openInventory(gui.bukkitInventory)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// GUI HOLDER
|
|
||||||
|
|
||||||
object InventoryGUIHolder : AutoCloseable {
|
|
||||||
|
|
||||||
private val registered = HashSet<InventoryGUI<ForInventory>>()
|
|
||||||
|
|
||||||
fun register(inventoryGUI: InventoryGUI<ForInventory>) {
|
|
||||||
registered.add(inventoryGUI)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun unregister(inventoryGUI: InventoryGUI<ForInventory>) {
|
|
||||||
registered.remove(inventoryGUI)
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
|
|
||||||
listen<InventoryClickEvent> {
|
|
||||||
|
|
||||||
val clickedInv = it.clickedInventory ?: return@listen
|
|
||||||
|
|
||||||
val inv = registered.find { search -> search.isThisInv(clickedInv) } ?: return@listen
|
|
||||||
val invPage = inv.currentPageInt
|
|
||||||
|
|
||||||
val slot = inv.data.pages[invPage]?.slots?.get(it.slot)
|
|
||||||
if (slot != null)
|
|
||||||
slot.onClick(InventoryGUIClickEvent(it, inv))
|
|
||||||
else
|
|
||||||
it.isCancelled = true
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun close() {
|
|
||||||
registered.forEach { inv -> inv.bukkitInventory.viewers.forEach { it.closeInventory() } }
|
|
||||||
registered.clear()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// EVENT
|
|
||||||
|
|
||||||
class InventoryGUIClickEvent<T : ForInventory>(
|
|
||||||
val bukkitEvent: InventoryClickEvent,
|
|
||||||
val gui: InventoryGUI<T>
|
|
||||||
)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* INVENTORY GUI
|
|
||||||
*/
|
|
||||||
|
|
||||||
private const val DEFAULT_PAGE = 1
|
private const val DEFAULT_PAGE = 1
|
||||||
|
|
||||||
class InventoryGUIData<T : ForInventory>(
|
class InventoryGUIData<T : ForInventory>(
|
||||||
@@ -207,11 +140,4 @@ class InventoryGUIShared<T : ForInventory>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class InventoryGUIPage<T : ForInventory>(
|
|
||||||
val number: Int,
|
|
||||||
internal val slots: Map<Int, InventoryGUISlot<T>>,
|
|
||||||
val transitionTo: PageChangeEffect?,
|
|
||||||
val transitionFrom: PageChangeEffect?
|
|
||||||
)
|
|
@@ -0,0 +1,8 @@
|
|||||||
|
package net.axay.kspigot.inventory
|
||||||
|
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent
|
||||||
|
|
||||||
|
class InventoryGUIClickEvent<T : ForInventory>(
|
||||||
|
val bukkitEvent: InventoryClickEvent,
|
||||||
|
val gui: InventoryGUI<T>
|
||||||
|
)
|
@@ -0,0 +1,15 @@
|
|||||||
|
package net.axay.kspigot.inventory
|
||||||
|
|
||||||
|
import org.bukkit.entity.HumanEntity
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
|
||||||
|
fun HumanEntity.openGUI(gui: InventoryGUI<*>, page: Int? = null): InventoryView? {
|
||||||
|
|
||||||
|
closeInventory()
|
||||||
|
|
||||||
|
if (page != null)
|
||||||
|
gui.loadPageUnsafe(page)
|
||||||
|
|
||||||
|
return openInventory(gui.bukkitInventory)
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,41 @@
|
|||||||
|
package net.axay.kspigot.inventory
|
||||||
|
|
||||||
|
import net.axay.kspigot.event.listen
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent
|
||||||
|
|
||||||
|
object InventoryGUIHolder : AutoCloseable {
|
||||||
|
|
||||||
|
private val registered = HashSet<InventoryGUI<ForInventory>>()
|
||||||
|
|
||||||
|
fun register(inventoryGUI: InventoryGUI<ForInventory>) {
|
||||||
|
registered.add(inventoryGUI)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun unregister(inventoryGUI: InventoryGUI<ForInventory>) {
|
||||||
|
registered.remove(inventoryGUI)
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
|
||||||
|
listen<InventoryClickEvent> {
|
||||||
|
|
||||||
|
val clickedInv = it.clickedInventory ?: return@listen
|
||||||
|
|
||||||
|
val inv = registered.find { search -> search.isThisInv(clickedInv) } ?: return@listen
|
||||||
|
val invPage = inv.currentPageInt
|
||||||
|
|
||||||
|
val slot = inv.data.pages[invPage]?.slots?.get(it.slot)
|
||||||
|
if (slot != null)
|
||||||
|
slot.onClick(InventoryGUIClickEvent(it, inv))
|
||||||
|
else
|
||||||
|
it.isCancelled = true
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun close() {
|
||||||
|
registered.forEach { inv -> inv.bukkitInventory.viewers.forEach { it.closeInventory() } }
|
||||||
|
registered.clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,8 @@
|
|||||||
|
package net.axay.kspigot.inventory
|
||||||
|
|
||||||
|
class InventoryGUIPage<T : ForInventory>(
|
||||||
|
val number: Int,
|
||||||
|
internal val slots: Map<Int, InventoryGUISlot<T>>,
|
||||||
|
val transitionTo: PageChangeEffect?,
|
||||||
|
val transitionFrom: PageChangeEffect?
|
||||||
|
)
|
Reference in New Issue
Block a user