Merge pull request #25 from Skyslycer/feature/on-close-gui

Feature: Method that runs when a player closes the inventory
This commit is contained in:
Jakob K
2021-08-16 19:34:41 +02:00
committed by GitHub
5 changed files with 34 additions and 6 deletions

View File

@@ -24,8 +24,8 @@ repositories {
}
dependencies {
compileOnly("org.spigotmc", "spigot", "1.17-R0.1-SNAPSHOT")
testCompileOnly("org.spigotmc", "spigot", "1.17-R0.1-SNAPSHOT")
compileOnly("org.spigotmc", "spigot", "1.17.1-R0.1-SNAPSHOT")
testCompileOnly("org.spigotmc", "spigot", "1.17.1-R0.1-SNAPSHOT")
api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.1")
api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0")

View File

@@ -1,7 +1,7 @@
# KSpigot
[ ![Latest version](https://img.shields.io/maven-central/v/net.axay/kspigot?color=pink&label=latest%20version&style=for-the-badge) ](https://repo1.maven.org/maven2/net/axay/kspigot/)
[ ![Guide](https://img.shields.io/badge/guide-read-%23c2ff73?style=for-the-badge) ](https://bluefireoly.github.io/KSpigot/)
[ ![Guide](https://img.shields.io/badge/guide-read-%23c2ff73?style=for-the-badge) ](https://jakobkmar.github.io/KSpigot/)
[ ![Discord](https://img.shields.io/discord/771140534118383626?color=cyan&label=DISCORD&style=for-the-badge) ](https://discord.gg/CJDUVuJ) <br>
KSpigot is a Kotlin extension for the popular [spigot server software](https://spigotmc.org/) for minecraft. It adds

View File

@@ -19,6 +19,7 @@ class GUIData<T : ForInventory>(
val transitionTo: InventoryChangeEffect?,
val transitionFrom: InventoryChangeEffect?,
internal val generalOnClick: ((GUIClickEvent<T>) -> Unit)?,
internal val onClose: ((GUICloseEvent<T>) -> Unit)?
)
abstract class GUI<T : ForInventory>(
@@ -95,9 +96,15 @@ class GUIIndividual<T : ForInventory>(
}
init {
if (resetOnClose) {
if (resetOnClose || data.onClose != null) {
listen<InventoryCloseEvent> {
deleteInstance(it.player as? Player ?: return@listen)
if (data.onClose != null && playerInstances[it.player]?.bukkitInventory == it.inventory) {
data.onClose.invoke(GUICloseEvent(it, playerInstances[it.player]!!, it.player as Player))
}
if (resetOnClose) {
deleteInstance(it.player as? Player ?: return@listen)
}
}
}

View File

@@ -3,6 +3,7 @@
package net.axay.kspigot.gui
import net.axay.kspigot.gui.elements.*
import org.bukkit.event.inventory.InventoryCloseEvent
import org.bukkit.inventory.ItemStack
import kotlin.math.absoluteValue
@@ -46,6 +47,8 @@ class GUIBuilder<T : ForInventory>(
private var onClickElement: ((GUIClickEvent<T>) -> Unit)? = null
private var onClose: ((GUICloseEvent<T>) -> Unit)? = null
/**
* Opens the builder for a new page and adds
* the new page to the GUI.
@@ -63,8 +66,16 @@ class GUIBuilder<T : ForInventory>(
onClickElement = onClick
}
/**
* A callback executed when the user closes
* the inventory.
*/
fun onClose(onClose: (GUICloseEvent<T>) -> Unit) {
this.onClose = onClose
}
internal fun build() = guiCreator.createInstance(
GUIData(type, title, guiPages, defaultPage, transitionTo, transitionFrom, onClickElement)
GUIData(type, title, guiPages, defaultPage, transitionTo, transitionFrom, onClickElement, onClose)
)
}

View File

@@ -0,0 +1,10 @@
package net.axay.kspigot.gui
import org.bukkit.entity.Player
import org.bukkit.event.inventory.InventoryCloseEvent
class GUICloseEvent<T : ForInventory>(
val bukkitEvent: InventoryCloseEvent,
val guiInstance: GUIInstance<T>,
val player: Player,
)