summaryrefslogtreewikicommitdiff
path: root/core/src/inv/Teleport.kt
blob: 2e5ddbb1cc7ad5f161d54e2f88ae4212490f4227 (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
package cat.freya.khs.inv

import cat.freya.khs.Khs
import cat.freya.khs.config.ItemConfig
import cat.freya.khs.game.Game
import cat.freya.khs.player.Inventory
import cat.freya.khs.player.Player
import cat.freya.khs.world.Item

const val TELEPORT_TITLE = "Teleport to players"

fun createPageItem(plugin: Khs, page: UInt): Item? {
    val config = ItemConfig("Page ${page + 1u}", "ENCHANTED_BOOK")
    return plugin.shim.parseItem(config)
}

fun createPlayerItem(plugin: Khs, player: Player): Item? {
    val team = plugin.game.getTeam(player.uuid) ?: return null
    val teamName =
        when (team) {
            Game.Team.HIDER -> plugin.locale.game.team.hider
            Game.Team.SEEKER -> plugin.locale.game.team.seeker
            else -> ""
        }
    val config =
        ItemConfig(
            name = player.name,
            material = "PLAYER_HEAD",
            owner = player.name,
            lore = listOf(teamName),
        )
    return plugin.shim.parseItem(config)
}

fun createTeleportMenu(plugin: Khs, page: UInt): Inventory? {
    val pageSize = 7u
    val offset = pageSize * page

    // make items
    val players = (plugin.game.seekerPlayers + plugin.game.hiderPlayers)
    val items =
        players.drop(offset.toInt()).take(pageSize.toInt()).mapNotNull {
            createPlayerItem(plugin, it)
        }
    val prev = if (page > 0u) createPageItem(plugin, page - 1u) else null
    val next =
        if (players.size.toUInt() > offset + pageSize) createPageItem(plugin, page + 1u) else null

    // create inv
    val inv = plugin.shim.createInventory(TELEPORT_TITLE, 9u) ?: return null
    for ((i, item) in items.withIndex()) {
        inv.set(i.toUInt() + 1u, item)
    }
    if (prev != null) inv.set(0u, prev)
    if (next != null) inv.set(8u, next)

    return inv
}