Minecraft(我的世界)中文论坛

标题: [sponge]插件开发教程-创建一个简单的命令

作者: Fa_de    时间: 2016-9-18 03:33
标题: [sponge]插件开发教程-创建一个简单的命令
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="http://music.163.com/outchain/player?type=2&id=35528482&auto=1&height=66"></iframe>
第一次写教程可能语言组织不是很好,见谅。更新的话不出意外(天更)
1.创建一个命令
首先我们在主类中添加以下代码


CommandSpec myCommandSpec = CommandSpec.builder()



                        .description(Text.of("Hello World Command"))
                        .permission("myplugin.command.helloworld")
                        .executor(new HahCommand())
                        .build();


第一个:builder()方法/函数,可以理解为开启一个新的构造器,源代码中这个方法/函数会放回一个新建的构造器。
第二个:description是构造器的参数,作用是简短的描述你命令是用来干什么的。
第三个:permission同上,作用是运行命令前会检测是否拥有该权限。
第四个:executor同上,作用就是这个命令的逻辑业务。
第五个:build()方法/函数,用来生成你所定义的命令。
当然还有的参数我就不列举了。


2.定义命令的逻辑业务。
你需要创建一个新的类去实现CommandExecutor这个接口并重写execute方法/函数。
因为在CommandSpec.builder()
.executor中给予的是HahCommand这个类对象,所以我需要以HahCommand这个名字去实现CommandExecutor这个接口并重写execute方法/函数。


public class HahCommand implements CommandExecutor {

        public CommandResult execute(CommandSource arg0, CommandContext arg1) throws CommandException {
        arg0.sendMessage(Text.of("Hello World"));
        return CommandResult.success();
        }
}
这里我简单的发送了Hello World文本消息。

execute中的参数
第一个:arg0是执行命令的对象,例如如服务端命令。
第二个:命令上下文这个下一章会说到。
这里需要return一个命令的结果集。
.success()返回一个常量SUCCESS表示执行成功。

3.注册这个命令。


在主类的onServer中
       @Listener
        public void onServer(GameStartedServerEvent event) {
                Sponge.getCommandManager().register(this, myCommandSpec, "helloworld", "hello", "test");
        }

.register中的参数
第一个:是Object对象,也就是你主类的对象。
第二个:是CommandCallable对象,也就是上面你创建的命令。
第三个:也就是你执行这个命令的名字啦。可以多个。

到这里命令也就创建完成了。
码字不易,如果对你有帮助就回个帖。

作者: Tollainmear    时间: 2017-8-12 00:40
谢谢分享,但是我有点儿懵逼的地方是,CommandCallable在哪儿。。。。。
作者: Godpower    时间: 2017-8-13 10:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: Fa_de    时间: 2018-6-13 11:10
Tollainmear 发表于 2017-8-12 00:40
谢谢分享,但是我有点儿懵逼的地方是,CommandCallable在哪儿。。。。。

不知道你还在不在学,CommandCallable是接口 CommandSpec是它的实现类。
作者: Tollainmear    时间: 2018-6-13 11:25
Fa_de 发表于 2018-6-13 11:10
不知道你还在不在学,CommandCallable是接口 CommandSpec是它的实现类。

我仍然在Sponge的路上学习,谢谢你的启蒙和指导,请继续努力,希望你制作的教程能够指导更多的Sponge死忠粉
作者: Fa_de    时间: 2018-6-13 11:30
Tollainmear 发表于 2018-6-13 11:25
我仍然在Sponge的路上学习,谢谢你的启蒙和指导,请继续努力,希望你制作的教程能够指导更多的Sponge死忠 ...

刚写了一个实战教程,模拟登陆。感兴趣可以去看看,地址自己在我个人资料找吧。