diff --git a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUI.kt b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUI.kt index 680be565..d29d3909 100644 --- a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUI.kt +++ b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUI.kt @@ -27,14 +27,14 @@ fun HumanEntity.openGUI(gui: InventoryGUI<*>, page: Int? = null): InventoryView? class InventoryGUIHolder(kSpigot: KSpigot) : AutoCloseable { - private val registered = HashSet>() + private val registered = HashSet>() - fun register(inventoryGUI: InventoryGUI<*>) { - registered += inventoryGUI + fun register(inventoryGUI: InventoryGUI) { + registered.add(inventoryGUI) } - fun unregister(inventoryGUI: InventoryGUI<*>) { - registered -= inventoryGUI + fun unregister(inventoryGUI: InventoryGUI) { + registered.remove(inventoryGUI) } init { @@ -77,7 +77,7 @@ class InventoryGUIData( val plugin: KSpigot, val inventoryType: InventoryType, val title: String?, - val pages: Map + val pages: Map> ) abstract class InventoryGUI( @@ -94,8 +94,10 @@ abstract class InventoryGUI( abstract operator fun set(slot: InventorySlotCompound, value: ItemStack) - fun register() = data.plugin.inventoryGUIHolder.register(this) - fun unregister() = data.plugin.inventoryGUIHolder.unregister(this) + @Suppress("UNCHECKED_CAST") + fun register() = data.plugin.inventoryGUIHolder.register(this as InventoryGUI) + @Suppress("UNCHECKED_CAST") + fun unregister() = data.plugin.inventoryGUIHolder.unregister(this as InventoryGUI) } @@ -165,8 +167,8 @@ class InventoryGUIShared( } -class InventoryGUIPage( - val slots: Map, +class InventoryGUIPage( + val slots: Map>, transitionTo: InventoryGUIPageChangeEffect?, transitionFrom: InventoryGUIPageChangeEffect? ) { diff --git a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIBuilder.kt b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIBuilder.kt index 9447511d..78a2053c 100644 --- a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIBuilder.kt +++ b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIBuilder.kt @@ -17,7 +17,7 @@ class InventoryGUIBuilder( var title: String = "" - private val guiSlots = HashMap() + private val guiSlots = HashMap>() /** * @@ -35,7 +35,7 @@ class InventoryGUIPageBuilder( val page: Int ) { - private val guiSlots = HashMap() + private val guiSlots = HashMap>() var transitionTo: InventoryGUIPageChangeEffect? = null var transitionFrom: InventoryGUIPageChangeEffect? = null @@ -98,7 +98,7 @@ class InventoryGUIPageBuilder( onChange )) - private fun slots(slots: InventorySlotCompound, element: InventoryGUISlot) + private fun slots(slots: InventorySlotCompound, element: InventoryGUISlot) = slots.withInvType(type).forEach { curSlot -> curSlot.realSlotIn(type.dimensions)?.let { guiSlots[it] = element } } diff --git a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIElements.kt b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIElements.kt index 7fedfd27..7e3368a0 100644 --- a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIElements.kt +++ b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIElements.kt @@ -2,8 +2,8 @@ package net.axay.kspigot.inventory import org.bukkit.inventory.ItemStack -interface InventoryGUISlot { - fun onClick(clickEvent: InventoryGUIClickEvent) +interface InventoryGUISlot { + fun onClick(clickEvent: InventoryGUIClickEvent) } // ELEMENT @@ -12,60 +12,60 @@ class InventoryGUIElementData( val itemStack: ItemStack ) -abstract class InventoryGUIElement( +abstract class InventoryGUIElement( val inventoryGUIElementData: InventoryGUIElementData -) : InventoryGUISlot +) : InventoryGUISlot // Element implementations -open class InventoryGUIButton( +open class InventoryGUIButton( inventoryGUIElementData: InventoryGUIElementData, - val action: (InventoryGUIClickEvent) -> Unit, -) : InventoryGUIElement(inventoryGUIElementData) { + val action: (InventoryGUIClickEvent) -> Unit, +) : InventoryGUIElement(inventoryGUIElementData) { - override fun onClick(clickEvent: InventoryGUIClickEvent) { + override fun onClick(clickEvent: InventoryGUIClickEvent) { clickEvent.bukkitEvent.isCancelled = true action(clickEvent) } } -class InventoryGUIPlaceholder( +class InventoryGUIPlaceholder( inventoryGUIElementData: InventoryGUIElementData -) : InventoryGUIElement(inventoryGUIElementData) { +) : InventoryGUIElement(inventoryGUIElementData) { - override fun onClick(clickEvent: InventoryGUIClickEvent) { + override fun onClick(clickEvent: InventoryGUIClickEvent) { clickEvent.bukkitEvent.isCancelled = true } } -class InventoryGUIButtonPageChange( +class InventoryGUIButtonPageChange( inventoryGUIElementData: InventoryGUIElementData, calculator: InventoryGUIPageChangeCalculator, - onChange: ((InventoryGUIClickEvent) -> Unit)? + onChange: ((InventoryGUIClickEvent) -> Unit)? ) - : InventoryGUIButton(inventoryGUIElementData, { - it.gui.currentPage?.let { currentPageInt -> + : InventoryGUIButton(inventoryGUIElementData, { - val newPageInt = calculator.calculateNewPage(currentPageInt, it.gui.data.pages.keys) - if (newPageInt != null) { + val currentPage = it.gui.currentPage - onChange?.invoke(it) + val newPageInt = calculator.calculateNewPage(currentPage, it.gui.data.pages.keys) + if (newPageInt != null) { - val pageChanger - = (it.gui.data.pages[newPageInt]?.pageChangerTo ?: it.gui.data.pages[currentPageInt]?.pageChangerFrom) - ?: InventoryGUIPageChanger(InventoryGUIPageChangeEffect.INSTANT) + onChange?.invoke(it) - pageChanger.changePage(it.gui, currentPageInt, newPageInt) + val pageChanger + = (it.gui.data.pages[newPageInt]?.pageChangerTo ?: it.gui.data.pages[currentPage]?.pageChangerFrom) + ?: InventoryGUIPageChanger(InventoryGUIPageChangeEffect.INSTANT) - } + pageChanger.changePage(it.gui, currentPage, newPageInt) } + }) // FREE SLOT -class InventoryGUIFreeSlot : InventoryGUISlot { - override fun onClick(clickEvent: InventoryGUIClickEvent) { /* do nothing */ } +class InventoryGUIFreeSlot : InventoryGUISlot { + override fun onClick(clickEvent: InventoryGUIClickEvent) { /* do nothing */ } } \ No newline at end of file