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 [ ![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)
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