指令是mc一个重要的功能,能够实现玩家与游戏逻辑层面的交互。
/time set day
/gamemode 0
/kill @e
Code 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 即可。