diff --git a/guide/docs/commands/brigardier.md b/guide/docs/commands/brigardier.md
index 32d8b406..dfc0d193 100644
--- a/guide/docs/commands/brigardier.md
+++ b/guide/docs/commands/brigardier.md
@@ -1,5 +1,9 @@
# Brigardier support
+???+ warning "Brigardier dependency for spigot-api users"
+ (You do only have to do the following if you are using the `spigot-api` instead of the `spigot` dependency!)
+ Whilst Spigot itself depends on [Brigardier](https://github.com/Mojang/brigadier#gradle) the Spigot API doesn't so in order for this feature to work you need to add Brigardier as a `compileOnly` dependency. More information on that can be found here: [https://github.com/Mojang/brigadier#gradle](https://github.com/Mojang/brigadier#gradle)
+
## Create a command
```kotlin
diff --git a/guide/docs/setup/beginners/java_version.md b/guide/docs/setup/beginners/java_version.md
index e7083731..f7ea479f 100644
--- a/guide/docs/setup/beginners/java_version.md
+++ b/guide/docs/setup/beginners/java_version.md
@@ -9,11 +9,12 @@ You can configure the Java version using Gradle:
```kotlin
// set the Java version you are using, Java 16 is the minimum required version for Minecraft
-tasks.compileJava {
- options.release.set(16)
-}
-
-tasks.compileKotlin {
- kotlinOptions.jvmTarget = "16"
+tasks {
+ compileJava {
+ options.release.set(16)
+ }
+ compileKotlin {
+ kotlinOptions.jvmTarget = "16"
+ }
}
```
diff --git a/guide/docs/setup/gradle_example.md b/guide/docs/setup/gradle_example.md
index a7679a58..44df94dd 100644
--- a/guide/docs/setup/gradle_example.md
+++ b/guide/docs/setup/gradle_example.md
@@ -4,10 +4,10 @@ An example for a `build.gradle.kts` file of a project using KSpigot would be:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
- kotlin("jvm") version "1.5.10"
+ kotlin("jvm") version "1.5.21"
}
-group = "net.axay"
+group = "your.group"
version = "1.0-SNAPSHOT"
repositories {
@@ -17,7 +17,7 @@ repositories {
dependencies {
compileOnly("org.spigotmc:spigot-api:1.17-R0.1-SNAPSHOT")
- implementation("net.axay:kspigot:1.17.1")
+ implementation("net.axay:kspigot:1.17.2")
}
tasks {
diff --git a/readme.md b/readme.md
index 7919d540..7634754e 100644
--- a/readme.md
+++ b/readme.md
@@ -1,7 +1,7 @@
# KSpigot
[  ](https://repo1.maven.org/maven2/net/axay/kspigot/)
-[  ](https://bluefireoly.github.io/KSpigot/)
+[  ](https://jakobkmar.github.io/KSpigot/)
[  ](https://discord.gg/CJDUVuJ)
KSpigot is a Kotlin extension for the popular [spigot server software](https://spigotmc.org/) for minecraft. It adds
diff --git a/src/main/kotlin/net/axay/kspigot/gui/GUI.kt b/src/main/kotlin/net/axay/kspigot/gui/GUI.kt
index a2881441..23b35774 100644
--- a/src/main/kotlin/net/axay/kspigot/gui/GUI.kt
+++ b/src/main/kotlin/net/axay/kspigot/gui/GUI.kt
@@ -19,6 +19,7 @@ class GUIData(
val transitionTo: InventoryChangeEffect?,
val transitionFrom: InventoryChangeEffect?,
internal val generalOnClick: ((GUIClickEvent) -> Unit)?,
+ internal val onClose: ((GUICloseEvent) -> Unit)?
)
abstract class GUI(
@@ -95,9 +96,15 @@ class GUIIndividual(
}
init {
- if (resetOnClose) {
+ if (resetOnClose || data.onClose != null) {
listen {
- 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)
+ }
}
}
diff --git a/src/main/kotlin/net/axay/kspigot/gui/GUIBuilder.kt b/src/main/kotlin/net/axay/kspigot/gui/GUIBuilder.kt
index 6b6b3822..c199e24c 100644
--- a/src/main/kotlin/net/axay/kspigot/gui/GUIBuilder.kt
+++ b/src/main/kotlin/net/axay/kspigot/gui/GUIBuilder.kt
@@ -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(
private var onClickElement: ((GUIClickEvent) -> Unit)? = null
+ private var onClose: ((GUICloseEvent) -> Unit)? = null
+
/**
* Opens the builder for a new page and adds
* the new page to the GUI.
@@ -63,8 +66,16 @@ class GUIBuilder(
onClickElement = onClick
}
+ /**
+ * A callback executed when the user closes
+ * the inventory.
+ */
+ fun onClose(onClose: (GUICloseEvent) -> 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)
)
}
diff --git a/src/main/kotlin/net/axay/kspigot/gui/GUICloseEvent.kt b/src/main/kotlin/net/axay/kspigot/gui/GUICloseEvent.kt
new file mode 100644
index 00000000..4ea6ec31
--- /dev/null
+++ b/src/main/kotlin/net/axay/kspigot/gui/GUICloseEvent.kt
@@ -0,0 +1,10 @@
+package net.axay.kspigot.gui
+
+import org.bukkit.entity.Player
+import org.bukkit.event.inventory.InventoryCloseEvent
+
+class GUICloseEvent(
+ val bukkitEvent: InventoryCloseEvent,
+ val guiInstance: GUIInstance,
+ val player: Player,
+)
diff --git a/src/main/kotlin/net/axay/kspigot/gui/GUIHolder.kt b/src/main/kotlin/net/axay/kspigot/gui/GUIHolder.kt
index b8a7d281..54c722ee 100644
--- a/src/main/kotlin/net/axay/kspigot/gui/GUIHolder.kt
+++ b/src/main/kotlin/net/axay/kspigot/gui/GUIHolder.kt
@@ -77,7 +77,8 @@ object GUIHolder : AutoCloseable {
}
private val InventoryAction.isGUIClick
- get() = this == InventoryAction.PICKUP_ALL || this == InventoryAction.PICKUP_HALF
+ get() = this == InventoryAction.PICKUP_ALL || this == InventoryAction.PICKUP_HALF || this == InventoryAction.PICKUP_SOME || this == InventoryAction.PICKUP_ONE || this == InventoryAction.MOVE_TO_OTHER_INVENTORY
+
private val InventoryInteractEvent.playerOrCancel: Player?
get() = (whoClicked as? Player) ?: kotlin.run {
isCancelled = true