From 85855b7081017e3f65c522ebd0b3207d8b27aea1 Mon Sep 17 00:00:00 2001 From: bluefireoly Date: Sun, 18 Oct 2020 21:45:00 +0200 Subject: [PATCH] Restructured InventoryGUI package --- .../axay/kspigot/inventory/InventoryGUI.kt | 76 +------------------ .../inventory/InventoryGUIClickEvent.kt | 8 ++ .../inventory/InventoryGUIExtensions.kt | 15 ++++ .../kspigot/inventory/InventoryGUIHolder.kt | 41 ++++++++++ .../kspigot/inventory/InventoryGUIPage.kt | 8 ++ 5 files changed, 73 insertions(+), 75 deletions(-) create mode 100644 src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIClickEvent.kt create mode 100644 src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIExtensions.kt create mode 100644 src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIHolder.kt create mode 100644 src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIPage.kt diff --git a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUI.kt b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUI.kt index 72a16650..2931f962 100644 --- a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUI.kt +++ b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUI.kt @@ -2,76 +2,9 @@ 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.InventoryView 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>() - - fun register(inventoryGUI: InventoryGUI) { - registered.add(inventoryGUI) - } - - fun unregister(inventoryGUI: InventoryGUI) { - registered.remove(inventoryGUI) - } - - init { - - listen { - - 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( - val bukkitEvent: InventoryClickEvent, - val gui: InventoryGUI -) - -/* - * INVENTORY GUI - */ - private const val DEFAULT_PAGE = 1 class InventoryGUIData( @@ -207,11 +140,4 @@ class InventoryGUIShared( } } -} - -class InventoryGUIPage( - val number: Int, - internal val slots: Map>, - val transitionTo: PageChangeEffect?, - val transitionFrom: PageChangeEffect? -) \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIClickEvent.kt b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIClickEvent.kt new file mode 100644 index 00000000..02bb9c3c --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIClickEvent.kt @@ -0,0 +1,8 @@ +package net.axay.kspigot.inventory + +import org.bukkit.event.inventory.InventoryClickEvent + +class InventoryGUIClickEvent( + val bukkitEvent: InventoryClickEvent, + val gui: InventoryGUI +) \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIExtensions.kt b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIExtensions.kt new file mode 100644 index 00000000..dadceb6d --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIExtensions.kt @@ -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) + +} \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIHolder.kt b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIHolder.kt new file mode 100644 index 00000000..8576d078 --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIHolder.kt @@ -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>() + + fun register(inventoryGUI: InventoryGUI) { + registered.add(inventoryGUI) + } + + fun unregister(inventoryGUI: InventoryGUI) { + registered.remove(inventoryGUI) + } + + init { + + listen { + + 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() + } + +} \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIPage.kt b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIPage.kt new file mode 100644 index 00000000..baf16b54 --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIPage.kt @@ -0,0 +1,8 @@ +package net.axay.kspigot.inventory + +class InventoryGUIPage( + val number: Int, + internal val slots: Map>, + val transitionTo: PageChangeEffect?, + val transitionFrom: PageChangeEffect? +) \ No newline at end of file