快速创建一个带有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)
}