xbaimiao / EasyLib

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

快速创建一个带有EasyLib 的 Minecraft项目

菜单

object Menu {

    fun test(player: Player) {
        // "测试菜单 %player_name%".replacePlaceholder(player) 代表进行Papi变量替换
        val basic = Basic(player, "测试菜单 %player_name%".replacePlaceholder(player))
        // 代表这个菜单有多少行
        basic.rows(6)

        // 设置10号位置的物品
        basic.set(10, buildItem(XMaterial.STONE) {
            name = "我是石头"
            lore.add("我是大石头")
        })
        // 设置点击10号位的反应
        basic.onClick(10) {
            player.sendLang("你点击了10号位置")
        }

        basic.onClick {
            // 所有点击都会传入这里
        }

        basic.onDrag {
            // 所有拖动都会传入这里
        }

        basic.openAsync()
    }

}

命令

第一种写法 需要执行注册

override fun enable() {
    registerCommand(CommandPort::class.java)
}
@CommandHeader(command = "test", description = "描述", permission = "命令使用权限")
class CommandPort {

    @CommandBody // command<CommandSender> 所有类型都可以执行
    val a = command<CommandSender>("a") {
        description = "执行a"
        exec {
            sender.sendMessage("你执行了 /test a")
        }
    }

    @CommandBody  // command<Player> 为只能玩家类型执行
    val b = command<Player>("b") {
        description = "执行b"
        exec {
            player.sendMessage("你执行了 /test b")
        }
    }

}

第二种写法 需要执行注册

override fun enable() {
    rootCommand.register()
}
// 自定义补全节点
private val testArgNode = ArgNode<World>("世界", exec = { token ->
    Bukkit.getWorlds().map { it.name }.filter { it.uppercase().startsWith(token.uppercase()) }
}, parse = {
    Bukkit.getWorld(it) ?: error("World $it not found")
})

private val test20 = command<CommandSender>("killWorldAllEntity") {
    description = "杀死世界所有实体"
    arg(testArgNode) { worldArg ->
        exec {
            val world = valueOf(worldArg)
            world.entities.filter { it !is Player }.forEach {
                it.remove()
            }
        }
    }
}

// 第二种写法
private val test21 = command<CommandSender>("a") {
    // 需要传入一个booleans参数
    booleans { b ->
        // 位置参数
        x { x ->
            y { y ->
                z { z ->
                    exec {
                        val boolean = valueOf(b)
                        val xyz = "${valueOf(x)},${valueOf(y)},${valueOf(z)}"

                        sender.sendMessage("你执行了 /test2 a,你输入的结果是 $boolean, $xyz")
                    }
                }
            }
        }
    }
}

private val test22 = command<Player>("b") {
    // 要求传入一个玩家参数
    onlinePlayers { playerArg ->
        exec {
            val player = valueOf(playerArg)
            sender.sendMessage("你执行了 /test2 b")
            player.forEach {
                it.sendMessage("你好,你被选中了")
            }
        }
    }
}

val rootCommand = command<CommandSender>("test2") {
    description = "描述"
    permission = "执行权限"
    sub(test21)
    sub(test22)
    sub(test20)
}

About


Languages

Language:Kotlin 95.5%Language:Java 4.5%