Removed "Inventory" from the GUI API names
This commit is contained in:
@@ -1,23 +1,23 @@
|
||||
@file:Suppress("MemberVisibilityCanBePrivate")
|
||||
|
||||
package net.axay.kspigot.inventory
|
||||
package net.axay.kspigot.gui
|
||||
|
||||
import org.bukkit.inventory.Inventory
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
private const val DEFAULT_PAGE = 1
|
||||
|
||||
class InventoryGUIData<T : ForInventory>(
|
||||
val inventoryType: InventoryType<T>,
|
||||
val title: String?,
|
||||
internal val pages: Map<Int, InventoryGUIPage<T>>,
|
||||
val transitionTo: InventoryChangeEffect?,
|
||||
val transitionFrom: InventoryChangeEffect?,
|
||||
internal val generalOnClick: ((InventoryGUIClickEvent<T>) -> Unit)?
|
||||
class GUIData<T : ForInventory>(
|
||||
val guiType: GUIType<T>,
|
||||
val title: String?,
|
||||
internal val pages: Map<Int, GUIPage<T>>,
|
||||
val transitionTo: InventoryChangeEffect?,
|
||||
val transitionFrom: InventoryChangeEffect?,
|
||||
internal val generalOnClick: ((GUIClickEvent<T>) -> Unit)?
|
||||
)
|
||||
|
||||
abstract class InventoryGUI<T : ForInventory>(
|
||||
val data: InventoryGUIData<T>
|
||||
abstract class GUI<T : ForInventory>(
|
||||
val data: GUIData<T>
|
||||
) {
|
||||
|
||||
var currentPageInt: Int = DEFAULT_PAGE; protected set
|
||||
@@ -29,7 +29,7 @@ abstract class InventoryGUI<T : ForInventory>(
|
||||
|
||||
internal var isInMove: Boolean = false
|
||||
|
||||
internal val currentElements = HashSet<InventoryGUIElement<*>>()
|
||||
internal val currentElements = HashSet<GUIElement<*>>()
|
||||
|
||||
internal abstract fun loadPageUnsafe(
|
||||
page: Int,
|
||||
@@ -38,13 +38,13 @@ abstract class InventoryGUI<T : ForInventory>(
|
||||
)
|
||||
|
||||
internal abstract fun loadPageUnsafe(
|
||||
page: InventoryGUIPage<*>,
|
||||
page: GUIPage<*>,
|
||||
offsetHorizontally: Int = 0,
|
||||
offsetVertically: Int = 0
|
||||
)
|
||||
|
||||
internal abstract fun loadContent(
|
||||
content: Map<Int, InventoryGUISlot<*>>,
|
||||
content: Map<Int, GUISlot<*>>,
|
||||
offsetHorizontally: Int = 0,
|
||||
offsetVertically: Int = 0
|
||||
)
|
||||
@@ -55,23 +55,23 @@ abstract class InventoryGUI<T : ForInventory>(
|
||||
abstract fun isThisInv(inventory: Inventory): Boolean
|
||||
|
||||
/**
|
||||
* Registers this InventoryGUI.
|
||||
* Registers this GUI.
|
||||
* (KSpigot will listen for actions in the inventory.)
|
||||
*/
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun register() = InventoryGUIHolder.register(this as InventoryGUI<ForInventory>)
|
||||
fun register() = GUIHolder.register(this as GUI<ForInventory>)
|
||||
|
||||
/**
|
||||
* Stops KSpigot from listening to actions in this
|
||||
* InventoryGUI anymore.
|
||||
* GUI anymore.
|
||||
*/
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun unregister() = InventoryGUIHolder.unregister(this as InventoryGUI<ForInventory>)
|
||||
fun unregister() = GUIHolder.unregister(this as GUI<ForInventory>)
|
||||
|
||||
/**
|
||||
* Loads the specified page in order to display it in the GUI.
|
||||
*/
|
||||
fun loadPage(page: InventoryGUIPage<T>) = loadPageUnsafe(page)
|
||||
fun loadPage(page: GUIPage<T>) = loadPageUnsafe(page)
|
||||
|
||||
/**
|
||||
* Temporarily sets the given item at the given slots.
|
||||
@@ -95,11 +95,11 @@ abstract class InventoryGUI<T : ForInventory>(
|
||||
|
||||
// Inventory GUI implementations
|
||||
|
||||
class InventoryGUIShared<T : ForInventory>(
|
||||
inventoryGUIData: InventoryGUIData<T>
|
||||
) : InventoryGUI<T>(inventoryGUIData) {
|
||||
class GUIShared<T : ForInventory>(
|
||||
GUIData: GUIData<T>
|
||||
) : GUI<T>(GUIData) {
|
||||
|
||||
override val bukkitInventory = data.inventoryType.createBukkitInv(null, data.title)
|
||||
override val bukkitInventory = data.guiType.createBukkitInv(null, data.title)
|
||||
|
||||
init {
|
||||
loadPageUnsafe(DEFAULT_PAGE)
|
||||
@@ -111,7 +111,7 @@ class InventoryGUIShared<T : ForInventory>(
|
||||
data.pages[page]?.let { loadPageUnsafe(it, offsetHorizontally, offsetVertically) }
|
||||
}
|
||||
|
||||
override fun loadPageUnsafe(page: InventoryGUIPage<*>, offsetHorizontally: Int, offsetVertically: Int) {
|
||||
override fun loadPageUnsafe(page: GUIPage<*>, offsetHorizontally: Int, offsetVertically: Int) {
|
||||
|
||||
val ifOffset = offsetHorizontally != 0 || offsetVertically != 0
|
||||
|
||||
@@ -122,7 +122,7 @@ class InventoryGUIShared<T : ForInventory>(
|
||||
currentElements.clear()
|
||||
|
||||
// register this inv for all new elements
|
||||
HashSet(page.slots.values).forEach { if (it is InventoryGUIElement) {
|
||||
HashSet(page.slots.values).forEach { if (it is GUIElement) {
|
||||
currentElements += it
|
||||
it.startUsing(this)
|
||||
} }
|
||||
@@ -136,14 +136,14 @@ class InventoryGUIShared<T : ForInventory>(
|
||||
}
|
||||
|
||||
override fun loadContent(
|
||||
content: Map<Int, InventoryGUISlot<*>>,
|
||||
content: Map<Int, GUISlot<*>>,
|
||||
offsetHorizontally: Int,
|
||||
offsetVertically: Int
|
||||
) {
|
||||
|
||||
val ifOffset = offsetHorizontally != 0 || offsetVertically != 0
|
||||
|
||||
val dimensions = data.inventoryType.dimensions
|
||||
val dimensions = data.guiType.dimensions
|
||||
|
||||
// clear the space which will be redefined
|
||||
if (ifOffset) {
|
||||
@@ -157,7 +157,7 @@ class InventoryGUIShared<T : ForInventory>(
|
||||
content.forEach {
|
||||
|
||||
val slot = it.value
|
||||
if (slot is InventoryGUIElement) {
|
||||
if (slot is GUIElement) {
|
||||
|
||||
if (ifOffset) {
|
||||
val invSlot = InventorySlot.fromRealSlot(it.key, dimensions)
|
||||
@@ -174,7 +174,7 @@ class InventoryGUIShared<T : ForInventory>(
|
||||
}
|
||||
|
||||
override operator fun set(slot: InventorySlotCompound<T>, value: ItemStack) {
|
||||
slot.realSlotsWithInvType(data.inventoryType).forEach {
|
||||
slot.realSlotsWithInvType(data.guiType).forEach {
|
||||
bukkitInventory.setItem(it, value)
|
||||
}
|
||||
}
|
@@ -1,20 +1,20 @@
|
||||
@file:Suppress("MemberVisibilityCanBePrivate", "unused")
|
||||
|
||||
package net.axay.kspigot.inventory
|
||||
package net.axay.kspigot.gui
|
||||
|
||||
import net.axay.kspigot.inventory.elements.*
|
||||
import net.axay.kspigot.gui.elements.*
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import kotlin.math.absoluteValue
|
||||
|
||||
fun <T : ForInventory> kSpigotGUI(
|
||||
type: InventoryType<T>,
|
||||
shared: Boolean = true,
|
||||
builder: InventoryGUIBuilder<T>.() -> Unit,
|
||||
) = InventoryGUIBuilder(type, shared).apply(builder).build()
|
||||
type: GUIType<T>,
|
||||
shared: Boolean = true,
|
||||
builder: GUIBuilder<T>.() -> Unit,
|
||||
) = GUIBuilder(type, shared).apply(builder).build()
|
||||
|
||||
class InventoryGUIBuilder<T : ForInventory>(
|
||||
val type: InventoryType<T>,
|
||||
val shared: Boolean
|
||||
class GUIBuilder<T : ForInventory>(
|
||||
val type: GUIType<T>,
|
||||
val shared: Boolean
|
||||
) {
|
||||
|
||||
var title: String = ""
|
||||
@@ -22,45 +22,45 @@ class InventoryGUIBuilder<T : ForInventory>(
|
||||
var transitionTo: InventoryChangeEffect? = null
|
||||
var transitionFrom: InventoryChangeEffect? = null
|
||||
|
||||
private val guiSlots = HashMap<Int, InventoryGUIPage<T>>()
|
||||
private val guiSlots = HashMap<Int, GUIPage<T>>()
|
||||
|
||||
private var onClickElement: ((InventoryGUIClickEvent<T>) -> Unit)? = null
|
||||
private var onClickElement: ((GUIClickEvent<T>) -> Unit)? = null
|
||||
|
||||
/**
|
||||
* Opens the builder for a new page and adds
|
||||
* the new page to the GUI.
|
||||
* @param page The index of the page.
|
||||
*/
|
||||
fun page(page: Int, builder: InventoryGUIPageBuilder<T>.() -> Unit) {
|
||||
guiSlots[page] = InventoryGUIPageBuilder(type, page).apply(builder).build()
|
||||
fun page(page: Int, builder: GUIPageBuilder<T>.() -> Unit) {
|
||||
guiSlots[page] = GUIPageBuilder(type, page).apply(builder).build()
|
||||
}
|
||||
|
||||
fun onClickElement(onClick: (InventoryGUIClickEvent<T>) -> Unit) {
|
||||
fun onClickElement(onClick: (GUIClickEvent<T>) -> Unit) {
|
||||
onClickElement = onClick
|
||||
}
|
||||
|
||||
internal fun build(): InventoryGUI<T> {
|
||||
val guiData = InventoryGUIData(type, title, guiSlots, transitionTo, transitionFrom, onClickElement)
|
||||
internal fun build(): GUI<T> {
|
||||
val guiData = GUIData(type, title, guiSlots, transitionTo, transitionFrom, onClickElement)
|
||||
val gui =
|
||||
if (shared) InventoryGUIShared(guiData) else TODO("Currently, there is no non-shared GUI implementation available.")
|
||||
if (shared) GUIShared(guiData) else TODO("Currently, there is no non-shared GUI implementation available.")
|
||||
return gui.apply { register() }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
private val type: InventoryType<T>,
|
||||
val page: Int
|
||||
class GUIPageBuilder<T : ForInventory>(
|
||||
private val type: GUIType<T>,
|
||||
val page: Int
|
||||
) {
|
||||
|
||||
private val guiSlots = HashMap<Int, InventoryGUISlot<T>>()
|
||||
private val guiSlots = HashMap<Int, GUISlot<T>>()
|
||||
|
||||
var transitionTo: PageChangeEffect? = null
|
||||
var transitionFrom: PageChangeEffect? = null
|
||||
|
||||
internal fun build() = InventoryGUIPage(page, guiSlots, transitionTo, transitionFrom)
|
||||
internal fun build() = GUIPage(page, guiSlots, transitionTo, transitionFrom)
|
||||
|
||||
private fun defineSlots(slots: InventorySlotCompound<T>, element: InventoryGUISlot<T>) =
|
||||
private fun defineSlots(slots: InventorySlotCompound<T>, element: GUISlot<T>) =
|
||||
slots.withInvType(type).forEach { curSlot ->
|
||||
curSlot.realSlotIn(type.dimensions)?.let { guiSlots[it] = element }
|
||||
}
|
||||
@@ -70,22 +70,22 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
* actions. If clicked, the specified [onClick]
|
||||
* function is invoked.
|
||||
*/
|
||||
fun button(slots: InventorySlotCompound<T>, itemStack: ItemStack, onClick: (InventoryGUIClickEvent<T>) -> Unit) =
|
||||
defineSlots(slots, InventoryGUIButton(itemStack, onClick))
|
||||
fun button(slots: InventorySlotCompound<T>, itemStack: ItemStack, onClick: (GUIClickEvent<T>) -> Unit) =
|
||||
defineSlots(slots, GUIButton(itemStack, onClick))
|
||||
|
||||
/**
|
||||
* An item protected from any player actions.
|
||||
* This is not a button.
|
||||
*/
|
||||
fun placeholder(slots: InventorySlotCompound<T>, itemStack: ItemStack) =
|
||||
defineSlots(slots, InventoryGUIPlaceholder(itemStack))
|
||||
defineSlots(slots, GUIPlaceholder(itemStack))
|
||||
|
||||
/**
|
||||
* A free slot does not block any player actions.
|
||||
* The player can put items in this slot or take
|
||||
* items out of it.
|
||||
*/
|
||||
fun freeSlot(slots: InventorySlotCompound<T>) = defineSlots(slots, InventoryGUIFreeSlot())
|
||||
fun freeSlot(slots: InventorySlotCompound<T>) = defineSlots(slots, GUIFreeSlot())
|
||||
|
||||
/**
|
||||
* This is a button which loads the specified
|
||||
@@ -95,11 +95,11 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
slots: InventorySlotCompound<T>,
|
||||
icon: ItemStack,
|
||||
toPage: Int,
|
||||
onChange: ((InventoryGUIClickEvent<T>) -> Unit)? = null
|
||||
onChange: ((GUIClickEvent<T>) -> Unit)? = null
|
||||
) = defineSlots(
|
||||
slots, InventoryGUIButtonPageChange(
|
||||
slots, GUIButtonPageChange(
|
||||
icon,
|
||||
InventoryGUIPageChangeCalculator.InventoryGUIConsistentPageCalculator(toPage),
|
||||
GUIPageChangeCalculator.GUIConsistentPageCalculator(toPage),
|
||||
onChange
|
||||
)
|
||||
)
|
||||
@@ -112,11 +112,11 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
fun previousPage(
|
||||
slots: InventorySlotCompound<T>,
|
||||
icon: ItemStack,
|
||||
onChange: ((InventoryGUIClickEvent<T>) -> Unit)? = null
|
||||
onChange: ((GUIClickEvent<T>) -> Unit)? = null
|
||||
) = defineSlots(
|
||||
slots, InventoryGUIButtonPageChange(
|
||||
slots, GUIButtonPageChange(
|
||||
icon,
|
||||
InventoryGUIPageChangeCalculator.InventoryGUIPreviousPageCalculator,
|
||||
GUIPageChangeCalculator.GUIPreviousPageCalculator,
|
||||
onChange
|
||||
)
|
||||
)
|
||||
@@ -129,27 +129,27 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
fun nextPage(
|
||||
slots: InventorySlotCompound<T>,
|
||||
icon: ItemStack,
|
||||
onChange: ((InventoryGUIClickEvent<T>) -> Unit)? = null
|
||||
onChange: ((GUIClickEvent<T>) -> Unit)? = null
|
||||
) = defineSlots(
|
||||
slots, InventoryGUIButtonPageChange(
|
||||
slots, GUIButtonPageChange(
|
||||
icon,
|
||||
InventoryGUIPageChangeCalculator.InventoryGUINextPageCalculator,
|
||||
GUIPageChangeCalculator.GUINextPageCalculator,
|
||||
onChange
|
||||
)
|
||||
)
|
||||
|
||||
/**
|
||||
* By pressing this button, the player switches to another
|
||||
* InventoryGUI. The transition effect is applied.
|
||||
* GUI. The transition effect is applied.
|
||||
*/
|
||||
fun changeGUI(
|
||||
slots: InventorySlotCompound<T>,
|
||||
icon: ItemStack,
|
||||
newGUI: () -> InventoryGUI<*>,
|
||||
newGUI: () -> GUI<*>,
|
||||
newPage: Int? = null,
|
||||
onChange: ((InventoryGUIClickEvent<T>) -> Unit)? = null
|
||||
onChange: ((GUIClickEvent<T>) -> Unit)? = null
|
||||
) = defineSlots(
|
||||
slots, InventoryGUIButtonInventoryChange(
|
||||
slots, GUIButtonInventoryChange(
|
||||
icon,
|
||||
newGUI,
|
||||
newPage,
|
||||
@@ -163,8 +163,8 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
*/
|
||||
fun <E> createCompound(
|
||||
iconGenerator: (E) -> ItemStack,
|
||||
onClick: (clickEvent: InventoryGUIClickEvent<T>, element: E) -> Unit
|
||||
) = InventoryGUISpaceCompound(type, iconGenerator, onClick)
|
||||
onClick: (clickEvent: GUIClickEvent<T>, element: E) -> Unit
|
||||
) = GUISpaceCompound(type, iconGenerator, onClick)
|
||||
|
||||
/**
|
||||
* Creates a new compound, holding data which can be displayed
|
||||
@@ -176,10 +176,10 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
fromSlot: SingleInventorySlot<out T>,
|
||||
toSlot: SingleInventorySlot<out T>,
|
||||
iconGenerator: (E) -> ItemStack,
|
||||
onClick: (clickEvent: InventoryGUIClickEvent<T>, element: E) -> Unit
|
||||
): InventoryGUIRectSpaceCompound<T, E> {
|
||||
onClick: (clickEvent: GUIClickEvent<T>, element: E) -> Unit
|
||||
): GUIRectSpaceCompound<T, E> {
|
||||
val rectSlotCompound = fromSlot rectTo toSlot
|
||||
return InventoryGUIRectSpaceCompound(
|
||||
return GUIRectSpaceCompound(
|
||||
type,
|
||||
iconGenerator,
|
||||
onClick,
|
||||
@@ -188,7 +188,7 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
addSlots(rectSlotCompound)
|
||||
defineSlots(
|
||||
rectSlotCompound,
|
||||
InventoryGUISpaceCompoundElement(this)
|
||||
GUISpaceCompoundElement(this)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -199,12 +199,12 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
*/
|
||||
fun <E> compoundSpace(
|
||||
slots: InventorySlotCompound<T>,
|
||||
compound: AbstractInventoryGUISpaceCompound<T, E>
|
||||
compound: AbstractGUISpaceCompound<T, E>
|
||||
) {
|
||||
compound.addSlots(slots)
|
||||
defineSlots(
|
||||
slots,
|
||||
InventoryGUISpaceCompoundElement(compound)
|
||||
GUISpaceCompoundElement(compound)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -215,13 +215,13 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
fun compoundScroll(
|
||||
slots: InventorySlotCompound<T>,
|
||||
icon: ItemStack,
|
||||
compound: InventoryGUISpaceCompound<T, *>,
|
||||
compound: GUISpaceCompound<T, *>,
|
||||
scrollDistance: Int = 1,
|
||||
scrollTimes: Int = 1,
|
||||
reverse: Boolean = false
|
||||
) = defineSlots(
|
||||
slots,
|
||||
InventoryGUISpaceCompoundScrollButton(
|
||||
GUISpaceCompoundScrollButton(
|
||||
icon,
|
||||
compound,
|
||||
scrollDistance.absoluteValue,
|
||||
@@ -237,12 +237,12 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
fun compoundScroll(
|
||||
slots: InventorySlotCompound<T>,
|
||||
icon: ItemStack,
|
||||
compound: InventoryGUIRectSpaceCompound<T, *>,
|
||||
compound: GUIRectSpaceCompound<T, *>,
|
||||
scrollTimes: Int = 1,
|
||||
reverse: Boolean = false
|
||||
) = defineSlots(
|
||||
slots,
|
||||
InventoryGUISpaceCompoundScrollButton(
|
||||
GUISpaceCompoundScrollButton(
|
||||
icon,
|
||||
compound,
|
||||
compound.compoundWidth,
|
8
src/main/kotlin/net/axay/kspigot/gui/GUIClickEvent.kt
Normal file
8
src/main/kotlin/net/axay/kspigot/gui/GUIClickEvent.kt
Normal file
@@ -0,0 +1,8 @@
|
||||
package net.axay.kspigot.gui
|
||||
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
|
||||
class GUIClickEvent<T : ForInventory>(
|
||||
val bukkitEvent: InventoryClickEvent,
|
||||
val gui: GUI<T>
|
||||
)
|
25
src/main/kotlin/net/axay/kspigot/gui/GUIElements.kt
Normal file
25
src/main/kotlin/net/axay/kspigot/gui/GUIElements.kt
Normal file
@@ -0,0 +1,25 @@
|
||||
package net.axay.kspigot.gui
|
||||
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
abstract class GUISlot<T : ForInventory> {
|
||||
abstract fun onClick(clickEvent: GUIClickEvent<T>)
|
||||
}
|
||||
|
||||
// ELEMENT
|
||||
|
||||
abstract class GUIElement<T : ForInventory> : GUISlot<T>() {
|
||||
|
||||
abstract fun getItemStack(slot: Int): ItemStack
|
||||
|
||||
final override fun onClick(clickEvent: GUIClickEvent<T>) {
|
||||
clickEvent.gui.data.generalOnClick?.invoke(clickEvent)
|
||||
onClickElement(clickEvent)
|
||||
}
|
||||
|
||||
protected abstract fun onClickElement(clickEvent: GUIClickEvent<T>)
|
||||
|
||||
internal open fun startUsing(gui: GUI<*>) { }
|
||||
internal open fun stopUsing(gui: GUI<*>) { }
|
||||
|
||||
}
|
@@ -1,9 +1,9 @@
|
||||
package net.axay.kspigot.inventory
|
||||
package net.axay.kspigot.gui
|
||||
|
||||
import org.bukkit.entity.HumanEntity
|
||||
import org.bukkit.inventory.InventoryView
|
||||
|
||||
fun HumanEntity.openGUI(gui: InventoryGUI<*>, page: Int? = null): InventoryView? {
|
||||
fun HumanEntity.openGUI(gui: GUI<*>, page: Int? = null): InventoryView? {
|
||||
|
||||
closeInventory()
|
||||
|
@@ -1,19 +1,19 @@
|
||||
package net.axay.kspigot.inventory
|
||||
package net.axay.kspigot.gui
|
||||
|
||||
import net.axay.kspigot.event.listen
|
||||
import org.bukkit.event.inventory.InventoryAction
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
|
||||
object InventoryGUIHolder : AutoCloseable {
|
||||
object GUIHolder : AutoCloseable {
|
||||
|
||||
private val registered = HashSet<InventoryGUI<ForInventory>>()
|
||||
private val registered = HashSet<GUI<ForInventory>>()
|
||||
|
||||
fun register(inventoryGUI: InventoryGUI<ForInventory>) {
|
||||
registered.add(inventoryGUI)
|
||||
fun register(GUI: GUI<ForInventory>) {
|
||||
registered.add(GUI)
|
||||
}
|
||||
|
||||
fun unregister(inventoryGUI: InventoryGUI<ForInventory>) {
|
||||
registered.remove(inventoryGUI)
|
||||
fun unregister(GUI: GUI<ForInventory>) {
|
||||
registered.remove(GUI)
|
||||
}
|
||||
|
||||
init {
|
||||
@@ -30,7 +30,7 @@ object InventoryGUIHolder : AutoCloseable {
|
||||
}
|
||||
|
||||
if (it.action.isGUIClick)
|
||||
inv.currentPage.slots[it.slot]?.onClick(InventoryGUIClickEvent(it, inv)) ?: kotlin.run {
|
||||
inv.currentPage.slots[it.slot]?.onClick(GUIClickEvent(it, inv)) ?: kotlin.run {
|
||||
it.isCancelled = true
|
||||
}
|
||||
else
|
8
src/main/kotlin/net/axay/kspigot/gui/GUIPage.kt
Normal file
8
src/main/kotlin/net/axay/kspigot/gui/GUIPage.kt
Normal file
@@ -0,0 +1,8 @@
|
||||
package net.axay.kspigot.gui
|
||||
|
||||
class GUIPage<T : ForInventory>(
|
||||
val number: Int,
|
||||
internal val slots: Map<Int, GUISlot<T>>,
|
||||
val transitionTo: PageChangeEffect?,
|
||||
val transitionFrom: PageChangeEffect?
|
||||
)
|
@@ -1,22 +1,22 @@
|
||||
package net.axay.kspigot.inventory
|
||||
package net.axay.kspigot.gui
|
||||
|
||||
import net.axay.kspigot.runnables.task
|
||||
|
||||
abstract class InventoryGUIPageChangeCalculator {
|
||||
abstract class GUIPageChangeCalculator {
|
||||
|
||||
abstract fun calculateNewPage(currentPage: Int, pages: Collection<Int>): Int?
|
||||
|
||||
object InventoryGUIPreviousPageCalculator : InventoryGUIPageChangeCalculator() {
|
||||
object GUIPreviousPageCalculator : GUIPageChangeCalculator() {
|
||||
override fun calculateNewPage(currentPage: Int, pages: Collection<Int>) =
|
||||
pages.sortedDescending().find { it < currentPage }
|
||||
}
|
||||
|
||||
object InventoryGUINextPageCalculator : InventoryGUIPageChangeCalculator() {
|
||||
object GUINextPageCalculator : GUIPageChangeCalculator() {
|
||||
override fun calculateNewPage(currentPage: Int, pages: Collection<Int>) =
|
||||
pages.sorted().find { it > currentPage }
|
||||
}
|
||||
|
||||
class InventoryGUIConsistentPageCalculator(private val toPage: Int) : InventoryGUIPageChangeCalculator() {
|
||||
class GUIConsistentPageCalculator(private val toPage: Int) : GUIPageChangeCalculator() {
|
||||
override fun calculateNewPage(currentPage: Int, pages: Collection<Int>) = toPage
|
||||
}
|
||||
|
||||
@@ -36,10 +36,10 @@ enum class InventoryChangeEffect(
|
||||
INSTANT(PageChangeEffect.INSTANT)
|
||||
}
|
||||
|
||||
internal fun InventoryGUI<*>.changePage(
|
||||
internal fun GUI<*>.changePage(
|
||||
effect: PageChangeEffect,
|
||||
fromPage: InventoryGUIPage<*>,
|
||||
toPage: InventoryGUIPage<*>
|
||||
fromPage: GUIPage<*>,
|
||||
toPage: GUIPage<*>
|
||||
) {
|
||||
|
||||
val fromPageInt = fromPage.number
|
||||
@@ -51,7 +51,7 @@ internal fun InventoryGUI<*>.changePage(
|
||||
|
||||
PageChangeEffect.SLIDE_HORIZONTALLY -> {
|
||||
|
||||
val width = data.inventoryType.dimensions.width
|
||||
val width = data.guiType.dimensions.width
|
||||
|
||||
changePageEffect(fromPageInt, toPageInt, width) { currentOffset, ifInverted ->
|
||||
if (ifInverted) {
|
||||
@@ -67,7 +67,7 @@ internal fun InventoryGUI<*>.changePage(
|
||||
|
||||
PageChangeEffect.SLIDE_VERTICALLY -> {
|
||||
|
||||
val height = data.inventoryType.dimensions.height
|
||||
val height = data.guiType.dimensions.height
|
||||
|
||||
changePageEffect(fromPageInt, toPageInt, height) { currentOffset, ifInverted ->
|
||||
if (ifInverted) {
|
||||
@@ -83,7 +83,7 @@ internal fun InventoryGUI<*>.changePage(
|
||||
|
||||
PageChangeEffect.SWIPE_HORIZONTALLY -> {
|
||||
|
||||
val width = data.inventoryType.dimensions.width
|
||||
val width = data.guiType.dimensions.width
|
||||
|
||||
changePageEffect(fromPageInt, toPageInt, width) { currentOffset, ifInverted ->
|
||||
if (ifInverted) {
|
||||
@@ -97,7 +97,7 @@ internal fun InventoryGUI<*>.changePage(
|
||||
|
||||
PageChangeEffect.SWIPE_VERTICALLY -> {
|
||||
|
||||
val height = data.inventoryType.dimensions.height
|
||||
val height = data.guiType.dimensions.height
|
||||
|
||||
changePageEffect(fromPageInt, toPageInt, height) { currentOffset, ifInverted ->
|
||||
if (ifInverted) {
|
||||
@@ -112,10 +112,10 @@ internal fun InventoryGUI<*>.changePage(
|
||||
}
|
||||
}
|
||||
|
||||
internal fun InventoryGUI<*>.changeGUI(
|
||||
internal fun GUI<*>.changeGUI(
|
||||
effect: InventoryChangeEffect,
|
||||
fromPage: InventoryGUIPage<*>,
|
||||
toPage: InventoryGUIPage<*>
|
||||
fromPage: GUIPage<*>,
|
||||
toPage: GUIPage<*>
|
||||
) = changePage(effect.effect, fromPage, toPage)
|
||||
|
||||
private inline fun changePageEffect(
|
@@ -1,6 +1,6 @@
|
||||
@file:Suppress("unused", "MemberVisibilityCanBePrivate")
|
||||
|
||||
package net.axay.kspigot.inventory
|
||||
package net.axay.kspigot.gui
|
||||
|
||||
import net.axay.kspigot.languageextensions.kotlinextensions.MinMaxPair
|
||||
|
||||
@@ -70,9 +70,9 @@ data class InventorySlot(val row: Int, val slotInRow: Int) : Comparable<Inventor
|
||||
|
||||
interface InventorySlotCompound<out T : ForInventory> {
|
||||
|
||||
fun withInvType(invType: InventoryType<T>): Collection<InventorySlot>
|
||||
fun withInvType(invType: GUIType<T>): Collection<InventorySlot>
|
||||
|
||||
fun realSlotsWithInvType(invType: InventoryType<T>) =
|
||||
fun realSlotsWithInvType(invType: GUIType<T>) =
|
||||
withInvType(invType).mapNotNull { it.realSlotIn(invType.dimensions) }
|
||||
|
||||
}
|
||||
@@ -85,7 +85,7 @@ open class SingleInventorySlot<T : ForInventory> internal constructor(
|
||||
|
||||
private val slotAsList = listOf(inventorySlot)
|
||||
|
||||
override fun withInvType(invType: InventoryType<T>) = slotAsList
|
||||
override fun withInvType(invType: GUIType<T>) = slotAsList
|
||||
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ class InventorySlotRange<out T : ForInventory> internal constructor(
|
||||
endInclusive = minMaxPair.max
|
||||
}
|
||||
|
||||
override fun withInvType(invType: InventoryType<T>) = LinkedHashSet<InventorySlot>().apply {
|
||||
override fun withInvType(invType: GUIType<T>) = LinkedHashSet<InventorySlot>().apply {
|
||||
when (type) {
|
||||
|
||||
InventorySlotRangeType.RECTANGLE -> {
|
||||
@@ -166,7 +166,7 @@ class InventoryRowSlots<T : ForInventory> internal constructor(
|
||||
val row: Int
|
||||
) : InventorySlotCompound<T> {
|
||||
|
||||
override fun withInvType(invType: InventoryType<T>) = HashSet<InventorySlot>().apply {
|
||||
override fun withInvType(invType: GUIType<T>) = HashSet<InventorySlot>().apply {
|
||||
for (slotInRow in 1..invType.dimensions.width)
|
||||
this += InventorySlot(row, slotInRow)
|
||||
}
|
||||
@@ -177,7 +177,7 @@ class InventoryColumnSlots<T : ForInventory> internal constructor(
|
||||
val column: Int
|
||||
) : InventorySlotCompound<T> {
|
||||
|
||||
override fun withInvType(invType: InventoryType<T>) = HashSet<InventorySlot>().apply {
|
||||
override fun withInvType(invType: GUIType<T>) = HashSet<InventorySlot>().apply {
|
||||
for (row in 1..invType.dimensions.height)
|
||||
this += InventorySlot(row, column)
|
||||
}
|
||||
@@ -188,7 +188,7 @@ class InventoryBorderSlots<T : ForInventory> internal constructor(
|
||||
val padding: Int
|
||||
) : InventorySlotCompound<T> {
|
||||
|
||||
override fun withInvType(invType: InventoryType<T>) = HashSet<InventorySlot>().apply {
|
||||
override fun withInvType(invType: GUIType<T>) = HashSet<InventorySlot>().apply {
|
||||
|
||||
val dimensions = invType.dimensions
|
||||
|
||||
@@ -214,7 +214,7 @@ class InventoryCornerSlots<T : ForInventory> internal constructor(
|
||||
val ifTopRight: Boolean = false
|
||||
) : InventorySlotCompound<T> {
|
||||
|
||||
override fun withInvType(invType: InventoryType<T>) = HashSet<InventorySlot>().apply {
|
||||
override fun withInvType(invType: GUIType<T>) = HashSet<InventorySlot>().apply {
|
||||
|
||||
val dimensions = invType.dimensions
|
||||
|
@@ -1,29 +1,29 @@
|
||||
@file:Suppress("MemberVisibilityCanBePrivate", "CanBeParameter")
|
||||
|
||||
package net.axay.kspigot.inventory
|
||||
package net.axay.kspigot.gui
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.event.inventory.InventoryType
|
||||
import org.bukkit.inventory.Inventory
|
||||
import org.bukkit.inventory.InventoryHolder
|
||||
|
||||
class InventoryType<in T : ForInventory>(
|
||||
class GUIType<in T : ForInventory>(
|
||||
val dimensions: InventoryDimensions,
|
||||
val bukkitType: InventoryType? = null
|
||||
) {
|
||||
|
||||
companion object {
|
||||
|
||||
val ONE_BY_NINE = InventoryType<ForInventoryOneByNine>(InventoryDimensions(9, 1))
|
||||
val TWO_BY_NINE = InventoryType<ForInventoryTwoByNine>(InventoryDimensions(9, 2))
|
||||
val THREE_BY_NINE = InventoryType<ForInventoryThreeByNine>(InventoryDimensions(9, 3))
|
||||
val FOUR_BY_NINE = InventoryType<ForInventoryFourByNine>(InventoryDimensions(9, 4))
|
||||
val FIVE_BY_NINE = InventoryType<ForInventoryFiveByNine>(InventoryDimensions(9, 5))
|
||||
val SIX_BY_NINE = InventoryType<ForInventorySixByNine>(InventoryDimensions(9, 6))
|
||||
val ONE_BY_NINE = GUIType<ForInventoryOneByNine>(InventoryDimensions(9, 1))
|
||||
val TWO_BY_NINE = GUIType<ForInventoryTwoByNine>(InventoryDimensions(9, 2))
|
||||
val THREE_BY_NINE = GUIType<ForInventoryThreeByNine>(InventoryDimensions(9, 3))
|
||||
val FOUR_BY_NINE = GUIType<ForInventoryFourByNine>(InventoryDimensions(9, 4))
|
||||
val FIVE_BY_NINE = GUIType<ForInventoryFiveByNine>(InventoryDimensions(9, 5))
|
||||
val SIX_BY_NINE = GUIType<ForInventorySixByNine>(InventoryDimensions(9, 6))
|
||||
val ONE_BY_FIVE =
|
||||
InventoryType<ForInventoryOneByFive>(InventoryDimensions(5, 1), bukkitType = InventoryType.HOPPER)
|
||||
GUIType<ForInventoryOneByFive>(InventoryDimensions(5, 1), bukkitType = InventoryType.HOPPER)
|
||||
val THREE_BY_THREE =
|
||||
InventoryType<ForInventoryThreeByThree>(InventoryDimensions(3, 3), bukkitType = InventoryType.DROPPER)
|
||||
GUIType<ForInventoryThreeByThree>(InventoryDimensions(3, 3), bukkitType = InventoryType.DROPPER)
|
||||
|
||||
}
|
||||
|
18
src/main/kotlin/net/axay/kspigot/gui/elements/GUIButton.kt
Normal file
18
src/main/kotlin/net/axay/kspigot/gui/elements/GUIButton.kt
Normal file
@@ -0,0 +1,18 @@
|
||||
package net.axay.kspigot.gui.elements
|
||||
|
||||
import net.axay.kspigot.gui.*
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
open class GUIButton<T : ForInventory>(
|
||||
private val icon: ItemStack,
|
||||
private val action: (GUIClickEvent<T>) -> Unit,
|
||||
) : GUIElement<T>() {
|
||||
|
||||
final override fun getItemStack(slot: Int) = icon
|
||||
|
||||
override fun onClickElement(clickEvent: GUIClickEvent<T>) {
|
||||
clickEvent.bukkitEvent.isCancelled = true
|
||||
action(clickEvent)
|
||||
}
|
||||
|
||||
}
|
@@ -1,14 +1,14 @@
|
||||
package net.axay.kspigot.inventory.elements
|
||||
package net.axay.kspigot.gui.elements
|
||||
|
||||
import net.axay.kspigot.inventory.*
|
||||
import net.axay.kspigot.gui.*
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class InventoryGUIButtonInventoryChange<T : ForInventory>(
|
||||
class GUIButtonInventoryChange<T : ForInventory>(
|
||||
icon: ItemStack,
|
||||
changeToGUICallback: () -> InventoryGUI<*>,
|
||||
changeToGUICallback: () -> GUI<*>,
|
||||
changeToPageInt: Int?,
|
||||
onChange: ((InventoryGUIClickEvent<T>) -> Unit)?
|
||||
) : InventoryGUIButton<T>(icon, {
|
||||
onChange: ((GUIClickEvent<T>) -> Unit)?
|
||||
) : GUIButton<T>(icon, {
|
||||
|
||||
val changeToGUI = changeToGUICallback.invoke()
|
||||
|
@@ -1,13 +1,13 @@
|
||||
package net.axay.kspigot.inventory.elements
|
||||
package net.axay.kspigot.gui.elements
|
||||
|
||||
import net.axay.kspigot.inventory.*
|
||||
import net.axay.kspigot.gui.*
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class InventoryGUIButtonPageChange<T : ForInventory>(
|
||||
class GUIButtonPageChange<T : ForInventory>(
|
||||
icon: ItemStack,
|
||||
calculator: InventoryGUIPageChangeCalculator,
|
||||
onChange: ((InventoryGUIClickEvent<T>) -> Unit)?
|
||||
) : InventoryGUIButton<T>(icon, {
|
||||
calculator: GUIPageChangeCalculator,
|
||||
onChange: ((GUIClickEvent<T>) -> Unit)?
|
||||
) : GUIButton<T>(icon, {
|
||||
|
||||
val currentPage = it.gui.currentPage
|
||||
val newPage = it.gui.getPage(calculator.calculateNewPage(it.gui.currentPageInt, it.gui.data.pages.keys))
|
11
src/main/kotlin/net/axay/kspigot/gui/elements/GUIFreeSlot.kt
Normal file
11
src/main/kotlin/net/axay/kspigot/gui/elements/GUIFreeSlot.kt
Normal file
@@ -0,0 +1,11 @@
|
||||
package net.axay.kspigot.gui.elements
|
||||
|
||||
import net.axay.kspigot.gui.ForInventory
|
||||
import net.axay.kspigot.gui.GUIClickEvent
|
||||
import net.axay.kspigot.gui.GUISlot
|
||||
|
||||
class GUIFreeSlot<T : ForInventory> : GUISlot<T>() {
|
||||
override fun onClick(clickEvent: GUIClickEvent<T>) {
|
||||
/* do nothing */
|
||||
}
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
package net.axay.kspigot.gui.elements
|
||||
|
||||
import net.axay.kspigot.gui.*
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class GUIPlaceholder<T : ForInventory>(
|
||||
private val icon: ItemStack
|
||||
) : GUIElement<T>() {
|
||||
|
||||
override fun getItemStack(slot: Int) = icon
|
||||
|
||||
override fun onClickElement(clickEvent: GUIClickEvent<T>) {
|
||||
clickEvent.bukkitEvent.isCancelled = true
|
||||
}
|
||||
|
||||
}
|
@@ -1,53 +1,53 @@
|
||||
@file:Suppress("MemberVisibilityCanBePrivate")
|
||||
|
||||
package net.axay.kspigot.inventory.elements
|
||||
package net.axay.kspigot.gui.elements
|
||||
|
||||
import net.axay.kspigot.inventory.*
|
||||
import net.axay.kspigot.gui.*
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class InventoryGUISpaceCompoundElement<T : ForInventory, E> internal constructor(
|
||||
private val compound: AbstractInventoryGUISpaceCompound<T, E>
|
||||
) : InventoryGUIElement<T>() {
|
||||
class GUISpaceCompoundElement<T : ForInventory, E> internal constructor(
|
||||
private val compound: AbstractGUISpaceCompound<T, E>
|
||||
) : GUIElement<T>() {
|
||||
|
||||
override fun getItemStack(slot: Int) = compound.getItemStack(slot)
|
||||
|
||||
override fun onClickElement(clickEvent: InventoryGUIClickEvent<T>) {
|
||||
override fun onClickElement(clickEvent: GUIClickEvent<T>) {
|
||||
compound.onClickElement(clickEvent)
|
||||
}
|
||||
|
||||
override fun startUsing(gui: InventoryGUI<*>) = compound.registerGUI(gui)
|
||||
override fun startUsing(gui: GUI<*>) = compound.registerGUI(gui)
|
||||
|
||||
override fun stopUsing(gui: InventoryGUI<*>) = compound.unregisterGUI(gui)
|
||||
override fun stopUsing(gui: GUI<*>) = compound.unregisterGUI(gui)
|
||||
|
||||
}
|
||||
|
||||
class InventoryGUIRectSpaceCompound<T : ForInventory, E>(
|
||||
invType: InventoryType<T>,
|
||||
iconGenerator: (E) -> ItemStack,
|
||||
onClick: (InventoryGUIClickEvent<T>, E) -> Unit,
|
||||
internal val compoundWidth: Int
|
||||
) : AbstractInventoryGUISpaceCompound<T, E>(invType, iconGenerator, onClick) {
|
||||
class GUIRectSpaceCompound<T : ForInventory, E>(
|
||||
invType: GUIType<T>,
|
||||
iconGenerator: (E) -> ItemStack,
|
||||
onClick: (GUIClickEvent<T>, E) -> Unit,
|
||||
internal val compoundWidth: Int
|
||||
) : AbstractGUISpaceCompound<T, E>(invType, iconGenerator, onClick) {
|
||||
|
||||
override fun handleScrollEndReached(newProgress: Int, internalSlotsSize: Int, contentSize: Int) =
|
||||
(internalSlotsSize + newProgress <= contentSize + (compoundWidth - (contentSize % compoundWidth)))
|
||||
|
||||
}
|
||||
|
||||
class InventoryGUISpaceCompound<T : ForInventory, E>(
|
||||
invType: InventoryType<T>,
|
||||
iconGenerator: (E) -> ItemStack,
|
||||
onClick: (InventoryGUIClickEvent<T>, E) -> Unit
|
||||
) : AbstractInventoryGUISpaceCompound<T, E>(invType, iconGenerator, onClick) {
|
||||
class GUISpaceCompound<T : ForInventory, E>(
|
||||
invType: GUIType<T>,
|
||||
iconGenerator: (E) -> ItemStack,
|
||||
onClick: (GUIClickEvent<T>, E) -> Unit
|
||||
) : AbstractGUISpaceCompound<T, E>(invType, iconGenerator, onClick) {
|
||||
|
||||
override fun handleScrollEndReached(newProgress: Int, internalSlotsSize: Int, contentSize: Int) = false
|
||||
|
||||
}
|
||||
|
||||
abstract class AbstractInventoryGUISpaceCompound<T : ForInventory, E> internal constructor(
|
||||
val invType: InventoryType<T>,
|
||||
private val iconGenerator: (E) -> ItemStack,
|
||||
private val onClick: (InventoryGUIClickEvent<T>, E) -> Unit
|
||||
abstract class AbstractGUISpaceCompound<T : ForInventory, E> internal constructor(
|
||||
val guiType: GUIType<T>,
|
||||
private val iconGenerator: (E) -> ItemStack,
|
||||
private val onClick: (GUIClickEvent<T>, E) -> Unit
|
||||
) {
|
||||
|
||||
private val content = ArrayList<E>()
|
||||
@@ -59,7 +59,7 @@ abstract class AbstractInventoryGUISpaceCompound<T : ForInventory, E> internal c
|
||||
|
||||
private var contentSort: () -> Unit = { }
|
||||
|
||||
private val registeredGUIs = HashSet<InventoryGUI<*>>()
|
||||
private val registeredGUIs = HashSet<GUI<*>>()
|
||||
|
||||
private fun contentAtSlot(slot: Int) = currentContent.getOrNull(internalSlots.indexOf(slot))
|
||||
|
||||
@@ -107,7 +107,7 @@ abstract class AbstractInventoryGUISpaceCompound<T : ForInventory, E> internal c
|
||||
?: ItemStack(Material.AIR)
|
||||
}
|
||||
|
||||
internal fun onClickElement(clickEvent: InventoryGUIClickEvent<T>) {
|
||||
internal fun onClickElement(clickEvent: GUIClickEvent<T>) {
|
||||
val element = contentAtSlot(clickEvent.bukkitEvent.slot) ?: kotlin.run {
|
||||
clickEvent.bukkitEvent.isCancelled = true
|
||||
return
|
||||
@@ -116,18 +116,18 @@ abstract class AbstractInventoryGUISpaceCompound<T : ForInventory, E> internal c
|
||||
}
|
||||
|
||||
internal fun addSlots(slots: InventorySlotCompound<T>) {
|
||||
slots.realSlotsWithInvType(invType).forEach {
|
||||
slots.realSlotsWithInvType(guiType).forEach {
|
||||
if (!internalSlots.contains(it))
|
||||
internalSlots.add(it)
|
||||
}
|
||||
internalSlots.sort()
|
||||
}
|
||||
|
||||
internal fun registerGUI(gui: InventoryGUI<*>) {
|
||||
internal fun registerGUI(gui: GUI<*>) {
|
||||
registeredGUIs += gui
|
||||
}
|
||||
|
||||
internal fun unregisterGUI(gui: InventoryGUI<*>) {
|
||||
internal fun unregisterGUI(gui: GUI<*>) {
|
||||
registeredGUIs -= gui
|
||||
}
|
||||
|
@@ -1,16 +1,16 @@
|
||||
package net.axay.kspigot.inventory.elements
|
||||
package net.axay.kspigot.gui.elements
|
||||
|
||||
import net.axay.kspigot.inventory.ForInventory
|
||||
import net.axay.kspigot.gui.ForInventory
|
||||
import net.axay.kspigot.runnables.task
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class InventoryGUISpaceCompoundScrollButton<T : ForInventory>(
|
||||
class GUISpaceCompoundScrollButton<T : ForInventory>(
|
||||
icon: ItemStack,
|
||||
private val compound: AbstractInventoryGUISpaceCompound<T, *>,
|
||||
private val compound: AbstractGUISpaceCompound<T, *>,
|
||||
private val scrollDistance: Int,
|
||||
private val scrollTimes: Int,
|
||||
private val reverse: Boolean = false
|
||||
) : InventoryGUIButton<T>(icon, {
|
||||
) : GUIButton<T>(icon, {
|
||||
if (scrollTimes > 1) {
|
||||
task(
|
||||
period = 1,
|
@@ -1,8 +0,0 @@
|
||||
package net.axay.kspigot.inventory
|
||||
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
|
||||
class InventoryGUIClickEvent<T : ForInventory>(
|
||||
val bukkitEvent: InventoryClickEvent,
|
||||
val gui: InventoryGUI<T>
|
||||
)
|
@@ -1,25 +0,0 @@
|
||||
package net.axay.kspigot.inventory
|
||||
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
abstract class InventoryGUISlot<T : ForInventory> {
|
||||
abstract fun onClick(clickEvent: InventoryGUIClickEvent<T>)
|
||||
}
|
||||
|
||||
// ELEMENT
|
||||
|
||||
abstract class InventoryGUIElement<T : ForInventory> : InventoryGUISlot<T>() {
|
||||
|
||||
abstract fun getItemStack(slot: Int): ItemStack
|
||||
|
||||
final override fun onClick(clickEvent: InventoryGUIClickEvent<T>) {
|
||||
clickEvent.gui.data.generalOnClick?.invoke(clickEvent)
|
||||
onClickElement(clickEvent)
|
||||
}
|
||||
|
||||
protected abstract fun onClickElement(clickEvent: InventoryGUIClickEvent<T>)
|
||||
|
||||
internal open fun startUsing(gui: InventoryGUI<*>) { }
|
||||
internal open fun stopUsing(gui: InventoryGUI<*>) { }
|
||||
|
||||
}
|
@@ -1,8 +0,0 @@
|
||||
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?
|
||||
)
|
@@ -1,18 +0,0 @@
|
||||
package net.axay.kspigot.inventory.elements
|
||||
|
||||
import net.axay.kspigot.inventory.*
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
open class InventoryGUIButton<T : ForInventory>(
|
||||
private val icon: ItemStack,
|
||||
private val action: (InventoryGUIClickEvent<T>) -> Unit,
|
||||
) : InventoryGUIElement<T>() {
|
||||
|
||||
final override fun getItemStack(slot: Int) = icon
|
||||
|
||||
override fun onClickElement(clickEvent: InventoryGUIClickEvent<T>) {
|
||||
clickEvent.bukkitEvent.isCancelled = true
|
||||
action(clickEvent)
|
||||
}
|
||||
|
||||
}
|
@@ -1,11 +0,0 @@
|
||||
package net.axay.kspigot.inventory.elements
|
||||
|
||||
import net.axay.kspigot.inventory.ForInventory
|
||||
import net.axay.kspigot.inventory.InventoryGUIClickEvent
|
||||
import net.axay.kspigot.inventory.InventoryGUISlot
|
||||
|
||||
class InventoryGUIFreeSlot<T : ForInventory> : InventoryGUISlot<T>() {
|
||||
override fun onClick(clickEvent: InventoryGUIClickEvent<T>) {
|
||||
/* do nothing */
|
||||
}
|
||||
}
|
@@ -1,16 +0,0 @@
|
||||
package net.axay.kspigot.inventory.elements
|
||||
|
||||
import net.axay.kspigot.inventory.*
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class InventoryGUIPlaceholder<T : ForInventory>(
|
||||
private val icon: ItemStack
|
||||
) : InventoryGUIElement<T>() {
|
||||
|
||||
override fun getItemStack(slot: Int) = icon
|
||||
|
||||
override fun onClickElement(clickEvent: InventoryGUIClickEvent<T>) {
|
||||
clickEvent.bukkitEvent.isCancelled = true
|
||||
}
|
||||
|
||||
}
|
@@ -1,6 +1,6 @@
|
||||
package net.axay.kspigot.main
|
||||
|
||||
import net.axay.kspigot.inventory.InventoryGUIHolder
|
||||
import net.axay.kspigot.gui.GUIHolder
|
||||
import net.axay.kspigot.languageextensions.kotlinextensions.closeIfInitialized
|
||||
import net.axay.kspigot.runnables.KRunnableHolder
|
||||
import org.bukkit.plugin.java.JavaPlugin
|
||||
@@ -22,10 +22,10 @@ abstract class KSpigot : JavaPlugin() {
|
||||
|
||||
// lazy properties
|
||||
private val kRunnableHolderProperty = lazy { KRunnableHolder }
|
||||
private val inventoryGUIHolderProperty = lazy { InventoryGUIHolder }
|
||||
private val guiHolderProperty = lazy { GUIHolder }
|
||||
|
||||
internal val kRunnableHolder by kRunnableHolderProperty
|
||||
internal val inventoryGUIHolder by inventoryGUIHolderProperty
|
||||
internal val guiHolder by guiHolderProperty
|
||||
|
||||
/**
|
||||
* Called when the plugin was loaded
|
||||
@@ -57,7 +57,7 @@ abstract class KSpigot : JavaPlugin() {
|
||||
|
||||
// avoid unnecessary load of lazy properties
|
||||
kRunnableHolderProperty.closeIfInitialized()
|
||||
inventoryGUIHolderProperty.closeIfInitialized()
|
||||
guiHolderProperty.closeIfInitialized()
|
||||
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user