Skip to content

Commit e542b9b

Browse files
committed
PlayerDSL plugin support
1 parent 6346028 commit e542b9b

File tree

1 file changed

+30
-15
lines changed
  • core/src/main/kotlin/br/com/devsrsouza/kotlinbukkitapi/dsl

1 file changed

+30
-15
lines changed
Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,45 @@
11
package br.com.devsrsouza.kotlinbukkitapi.dsl.player
22

3+
import br.com.devsrsouza.kotlinbukkitapi.KotlinBukkitAPI
34
import br.com.devsrsouza.kotlinbukkitapi.dsl.event.displaced
45
import br.com.devsrsouza.kotlinbukkitapi.dsl.event.event
56
import br.com.devsrsouza.kotlinbukkitapi.dsl.scheduler.task
67
import br.com.devsrsouza.kotlinbukkitapi.utils.OnlinePlayerMap
7-
import br.com.devsrsouza.kotlinbukkitapi.utils.onlinePlayerListOf
88
import br.com.devsrsouza.kotlinbukkitapi.utils.onlinePlayerMapOf
99
import org.bukkit.entity.Player
1010
import org.bukkit.event.Listener
1111
import org.bukkit.event.player.AsyncPlayerChatEvent
1212
import org.bukkit.event.player.PlayerMoveEvent
13+
import org.bukkit.event.server.PluginDisableEvent
14+
import org.bukkit.plugin.Plugin
1315

1416
typealias ChatInputCallBack = Player.(String) -> Unit
15-
typealias PlayerCallback = Player.() -> Unit
16-
typealias PlayerMoveFunction = Player.() -> Boolean
17+
typealias PlayerCallbackFunction<R> = Player.() -> R
18+
typealias PlayerQuitFunction = PlayerCallbackFunction<Unit>
19+
typealias PlayerMoveFunction = PlayerCallbackFunction<Boolean>
1720

18-
fun Player.chatInput(sync: Boolean = false, callback: ChatInputCallBack) {
19-
PlayerController.inputCallbacks.put(player, ChatInput(sync, callback))
21+
fun Player.chatInput(sync: Boolean = false, plugin: Plugin = KotlinBukkitAPI.INSTANCE, callback: ChatInputCallBack) {
22+
PlayerController.inputCallbacks.put(player, ChatInput(plugin, sync, callback))
2023
}
2124

22-
inline fun Player.whenQuit(crossinline callback: PlayerCallback) {
23-
PlayerController.functionsQuit.add(this) {
24-
callback.invoke(player)
25+
fun Player.whenQuit(plugin: Plugin = KotlinBukkitAPI.INSTANCE, callback: PlayerQuitFunction) {
26+
PlayerController.functionsQuit.put(this, PlayerCallback(plugin, callback)) {
27+
it.callback.invoke(player)
2528
}
2629
}
2730

28-
fun Player.whenMove(callback: PlayerMoveFunction) {
29-
PlayerController.functionsMove.put(this, callback)
31+
fun Player.whenMove(plugin: Plugin = KotlinBukkitAPI.INSTANCE, callback: PlayerMoveFunction) {
32+
PlayerController.functionsMove.put(this, PlayerCallback(plugin, callback))
3033
}
3134

32-
class ChatInput(val sync: Boolean, val callback: ChatInputCallBack)
35+
class ChatInput(val plugin: Plugin, val sync: Boolean, val callback: ChatInputCallBack)
36+
class PlayerCallback<R>(val plugin: Plugin, val callback: PlayerCallbackFunction<R>)
3337

3438
object PlayerController : Listener {
3539

3640
internal val inputCallbacks = OnlinePlayerMap<ChatInput>()
37-
internal val functionsMove = onlinePlayerMapOf<PlayerMoveFunction>()
38-
val functionsQuit = onlinePlayerListOf()
41+
internal val functionsMove = onlinePlayerMapOf<PlayerCallback<Boolean>>()
42+
internal val functionsQuit = onlinePlayerMapOf<PlayerCallback<Unit>>()
3943

4044
init {
4145
event<AsyncPlayerChatEvent>(ignoreCancelled = true) {
@@ -49,11 +53,22 @@ object PlayerController : Listener {
4953
}
5054
}
5155
event<PlayerMoveEvent>(ignoreCancelled = true) {
52-
if(displaced) {
53-
if(functionsMove[player]?.run { invoke(player) } == true) {
56+
if (displaced) {
57+
if (functionsMove[player]?.run { callback.invoke(player) } == true) {
5458
isCancelled = true
5559
}
5660
}
5761
}
62+
event<PluginDisableEvent> {
63+
inputCallbacks.entries.filter { it.value.plugin == plugin }.forEach {
64+
inputCallbacks.remove(it.key)
65+
}
66+
functionsMove.entries.filter { it.value.plugin == plugin }.forEach {
67+
functionsMove.remove(it.key)
68+
}
69+
functionsQuit.entries.filter { it.value.plugin == plugin }.forEach {
70+
functionsQuit.remove(it.key)
71+
}
72+
}
5873
}
5974
}

0 commit comments

Comments
 (0)