summaryrefslogtreewikicommitdiff
path: root/bukkit/src/event/PlayerListener.kt
blob: 23b0a91dd6ee73ec232c09762537db760d598894 (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
53
54
55
56
57
58
59
package cat.freya.khs.bukkit.event

import cat.freya.khs.bukkit.BukkitKhsPlayer
import cat.freya.khs.bukkit.KhsPlugin
import cat.freya.khs.bukkit.toKhsItem
import cat.freya.khs.event.DropEvent
import cat.freya.khs.event.HungerEvent
import cat.freya.khs.event.RegenEvent
import cat.freya.khs.event.onDrop
import cat.freya.khs.event.onHunger
import cat.freya.khs.event.onRegen
import org.bukkit.entity.Player as BukkitPlayer
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.Listener
import org.bukkit.event.entity.EntityRegainHealthEvent
import org.bukkit.event.entity.FoodLevelChangeEvent
import org.bukkit.event.player.PlayerDropItemEvent

class PlayerListener(val plugin: KhsPlugin) : Listener {

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

    @EventHandler(priority = EventPriority.HIGHEST)
    fun onFoodLevelChange(event: FoodLevelChangeEvent) {
        val bukkitPlayer = event.entity as? BukkitPlayer ?: return
        val khsPlayer = BukkitKhsPlayer(plugin.shim, bukkitPlayer)
        val khsEvent = HungerEvent(plugin.khs, khsPlayer)
        onHunger(khsEvent)

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

    @EventHandler(priority = EventPriority.HIGHEST)
    fun onEntityRegainHealth(event: EntityRegainHealthEvent) {
        val bukkitPlayer = event.entity as? BukkitPlayer ?: return
        val khsPlayer = BukkitKhsPlayer(plugin.shim, bukkitPlayer)
        val natural =
            event.regainReason == EntityRegainHealthEvent.RegainReason.SATIATED ||
                event.regainReason == EntityRegainHealthEvent.RegainReason.REGEN
        val khsEvent = RegenEvent(plugin.khs, khsPlayer, natural)
        onRegen(khsEvent)

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

    @EventHandler(priority = EventPriority.HIGHEST)
    fun onPlayerDropItem(event: PlayerDropItemEvent) {
        val bukkitPlayer = event.player ?: return
        val item = toKhsItem(event.itemDrop?.itemStack) ?: return
        val khsPlayer = BukkitKhsPlayer(plugin.shim, bukkitPlayer)
        val khsEvent = DropEvent(plugin.khs, khsPlayer, item)
        onDrop(khsEvent)

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