summaryrefslogtreewikicommitdiff
path: root/bukkit/src/event/JoinLeaveListener.kt
blob: 3bb2832300780173c728a787c025e1391575468f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package cat.freya.khs.bukkit.event

import cat.freya.khs.bukkit.BukkitKhsPlayer
import cat.freya.khs.bukkit.KhsPlugin
import cat.freya.khs.event.JoinEvent
import cat.freya.khs.event.KickEvent
import cat.freya.khs.event.LeaveEvent
import cat.freya.khs.event.onJoin
import cat.freya.khs.event.onKick
import cat.freya.khs.event.onLeave
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerJoinEvent
import org.bukkit.event.player.PlayerKickEvent
import org.bukkit.event.player.PlayerQuitEvent

class JoinLeaveListener(val plugin: KhsPlugin) : Listener {

    init {
        plugin.server.pluginManager.registerEvents(this, plugin)
    }

    @EventHandler(priority = EventPriority.HIGHEST)
    fun onPlayerJoin(event: PlayerJoinEvent) {
        val bukkitPlayer = event.player ?: return
        val khsPlayer = BukkitKhsPlayer(plugin.shim, bukkitPlayer)
        val khsEvent = JoinEvent(plugin.khs, khsPlayer)
        onJoin(khsEvent)
    }

    @EventHandler(priority = EventPriority.HIGHEST)
    fun onPlayerQuit(event: PlayerQuitEvent) {
        val bukkitPlayer = event.player ?: return
        val khsPlayer = BukkitKhsPlayer(plugin.shim, bukkitPlayer)
        val khsEvent = LeaveEvent(plugin.khs, khsPlayer)
        onLeave(khsEvent)

        // remove player from disguiser
        plugin.entityHider.removePlayer(bukkitPlayer)
    }

    @EventHandler(priority = EventPriority.HIGHEST)
    fun onPlayerKick(event: PlayerKickEvent) {
        val bukkitPlayer = event.player ?: return
        val khsPlayer = BukkitKhsPlayer(plugin.shim, bukkitPlayer)
        val khsEvent = KickEvent(plugin.khs, khsPlayer, event.reason ?: "")
        onKick(khsEvent)

        if (khsEvent.cancelled) event.setCancelled(true)
    }
}