Bukkit 插件教程(3) 指令

指令是mc一个重要的功能,能够实现玩家与游戏逻辑层面的交互。

/time set day
/gamemode 0
/kill @eCode language: JavaScript (javascript)

这些都是指令。

命令

在开始之前,写该函数需要上面的这两个包。

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
}Code language: JavaScript (javascript)

在你上一章的main主类里添加这一行代码。
我们编写了一个 onCommand 函数,并且参数为 sender, cmd, label, args

其中, CommandSender sender 是命令的执行者
Command cmd 是执行的命令
String[] args 是命令的参数

举个例子:
/time set day 这个命令中,“time“是执行的命令,”set day“是两个命令参数,在java中他是以空格分割的数组形式。

判断插件指令

想要知道一个玩家执行的是不是自己的命令,首先需要判断。

因为参数 Command cmd 是一个实例化类的形式,它有专门的方法来返回字符串形式的命令:

cmd.getName()Code language: CSS (css)

是不是已经迫不及待的写上那个 if(cmd.getName() == “lbwnb”){} 了?
java中,判断两个字符串是否相等不能直接用双等号。

String1.equalsIgnoreCase("lbwnb") // 不区分大小写
String1.equals("lbwnb")           // 区分大小写Code language: JavaScript (javascript)

所以应该写成 if(cmd.getName().equals(“lbwnb”)){}

到此处,你的 onCommand 函数应该长这样:


public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){

    if(cmd.getName().equals("lbwnb")){
    }
}Code language: JavaScript (javascript)

第一个命令

判断了是自己的命令,我们就要进行一些程序。

介绍本框题的主角: CommandSender sender
CommandSender 继承了 Player,所以能使用很多玩家类的方法。

详细的方法有一个开发文档:https://bukkit.windit.net/javadoc/


可以翻阅文档查找API。

player.sendMessage(String content) 这个方法用于向玩家发送信息。

参数是我自己编的,反正是个字符串就对了

滑稽
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){

    if(cmd.getName().equals("lbwnb")){
        sender.sendMessage("你运行了lbw指令");
    }
    return true; //定义了返回布尔值,一定要记得返回。
}Code language: JavaScript (javascript)

plugin.yml的最后

一个指令,就需要有运行的权限。显然我们在函数中没有定义这些内容,所以需要在plugin.yml文件中定义。

写下一行commands

其中 description 是对这个命令的描述,usage用于在onCommand函数返回false时发送给玩家(即发送正确的用法),permission是权限,以后会讲到判断权限。

OK,构建,复制到服务器目录下的plugins。

成功启动!可以在帮助指令中找到我们的命令

进入游戏逝世效果:

标出的部分是IP和端口,因为我们没有设置默认IP,所以会显示为*,需要手动替换为 127.0.0.1

因为没有设置权限为普通玩家,所以需要OP权限:

成功!

需要正版才能进入服务器解决方法

如图,将服务器根目录下的 server.properties 文件中的 online-mode 后面的 true 改为 false 即可。

发表回复