summaryrefslogtreewikicommitdiff
path: root/core/src/events/onClick.kt
blob: a8883bdb79c5cea6d685374fa112bc5a276612b7 (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package cat.freya.khs.event

import cat.freya.khs.Khs
import cat.freya.khs.game.Game
import cat.freya.khs.inv.*
import cat.freya.khs.player.Inventory
import cat.freya.khs.player.Player
import cat.freya.khs.world.Item
import kotlin.text.startsWith

data class ClickEvent(
    val plugin: Khs,
    val player: Player,
    val inventory: Inventory,
    val clicked: Item,
) : Event()

private fun onClickSpectator(event: ClickEvent) {
    val (plugin, player, _, item) = event
    val name = item.name ?: return
    event.cancel()

    // teleport to player
    if (item.similar("PLAYER_HEAD")) {
        player.closeInventory()

        val clicked = plugin.shim.getPlayer(name) ?: return
        player.teleport(clicked.location)
        return
    }

    // change page
    if (item.similar("ENCHANTED_BOOK") && name.startsWith("Page ")) {
        player.closeInventory()

        val page = name.substring(5).toUIntOrNull() ?: return
        val inv = createTeleportMenu(plugin, page - 1u) ?: return
        player.showInventory(inv)
    }
}

private fun onClickDebug(event: ClickEvent) {
    val (plugin, player, _, item) = event
    event.cancel()

    if (item.similar(BECOME_SEEKER)) becomeSeeker(plugin, player)
    else if (item.similar(BECOME_HIDER)) becomeHider(plugin, player)
    else if (item.similar(BECOME_SPECTATOR)) becomeSpectator(plugin, player)
    else if (item.similar(DIE_IN_GAME)) dieInGame(plugin, player)
    else if (item.similar(REVEAL_DISGUISE)) player.revealDisguise() else return

    player.closeInventory()
}

private fun onClickBlockHunt(event: ClickEvent) {
    event.cancel()

    val material = event.clicked.material
    event.player.disguise(material)
    event.player.closeInventory()
}

fun onClick(event: ClickEvent) {
    val (plugin, player, inv, _) = event
    val game = plugin.game

    // dont allow interactions in the lobby
    if (game.hasPlayer(player) && game.status == Game.Status.LOBBY) event.cancel()

    if (game.isSpectator(player)) onClickSpectator(event)

    if (inv.title == DEBUG_TITLE) onClickDebug(event)

    if (inv.title?.startsWith("Select a Block: ") == true) onClickBlockHunt(event)
}