summaryrefslogtreewikicommitdiff
path: root/bukkit/src/Plugin.kt
blob: 3f71955e60313b501799dab37c96cf848112aa83 (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
76
77
78
79
80
81
82
83
84
85
86
87
88
package cat.freya.khs.bukkit

import cat.freya.khs.Khs
import cat.freya.khs.bukkit.disguise.Disguiser
import cat.freya.khs.bukkit.disguise.EntityHider
import cat.freya.khs.bukkit.event.*
import org.bukkit.command.Command
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player as BukkitPlayer
import org.bukkit.plugin.java.JavaPlugin
import org.bukkit.scheduler.BukkitRunnable

class KhsPlugin : JavaPlugin() {
    val shim: BukkitKhsShim = BukkitKhsShim(this)
    val khs: Khs = Khs(shim)

    // for blockhunt
    val disguiser: Disguiser = Disguiser(this)
    val entityHider: EntityHider = EntityHider()

    override fun onEnable() {
        khs.init()

        if (!this.isEnabled()) return

        // make sure onTick is run
        object : BukkitRunnable() {
                override fun run() {
                    khs.onTick()
                    disguiser.update()
                }
            }
            .runTaskTimer(this, 0, 1)

        // register bungee cord
        server.messenger.registerOutgoingPluginChannel(this, "BungeeCord")

        registerListeners()
    }

    override fun onDisable() {
        khs.cleanup()
        disguiser.cleanup()
    }

    private fun registerListeners() {
        BreakListener(this)
        ChatListener(this)
        CommandListener(this)
        DamageListener(this)
        InteractListener(this)
        InventoryListener(this)
        JoinLeaveListener(this)
        MovementListener(this)
        PlaceListener(this)
        PlayerListener(this)
        PacketListener(this)
        RespawnListener(this)
    }

    fun scheduleTask(fn: () -> Unit) {
        if (!isEnabled) return
        server.scheduler.runTask(this, fn)
    }

    override fun onCommand(
        sender: CommandSender,
        cmd: Command,
        label: String,
        args: Array<String>,
    ): Boolean {
        val player = sender as? BukkitPlayer ?: return false
        val khsPlayer = BukkitKhsPlayer(shim, player)
        khs.commandGroup.handleCommand(khsPlayer, args.toList())
        return true
    }

    override fun onTabComplete(
        sender: CommandSender,
        cmd: Command,
        label: String,
        args: Array<String>,
    ): List<String> {
        val player = sender as? BukkitPlayer ?: return listOf()
        val khsPlayer = BukkitKhsPlayer(shim, player)
        return khs.commandGroup.handleTabComplete(khsPlayer, args.toList())
    }
}