Skip to content
This repository has been archived by the owner on Dec 3, 2022. It is now read-only.

使用基础 API 接口

WetABQ edited this page Mar 18, 2020 · 1 revision

API 接口

我们有一个 EasyAPI 模块有什么用呢? —— 我们可以使用模块自带的方法, 获取 API 接口, 并注册进入模块.

这里的 API 接口可以指很多, EasyAPI 提供了一些默认的接口:

  • 命令
  • 配置
  • 异步(或插件同步)任务
  • 监听器
  • 消息格式器
  • Tip 和 Popup 的发送管理
  • GUI

注: 接口分为动态接口和简单静态接口两种形式

动态接口一般是维护管理接口的某一个特定对象 e.g: ConfigAPI 简单静态接口一般没有需要维护和管理的特定对象 e.g: EconomyAPI

这些接口其实 Nukkit 都有, 都可以实现, EasyAPI 只是把 Nukkit 的接口变得更加简单, 可读性增加, 且便于管理.

下面为将使用其中 5 个作为演示 (命令, 配置, 监听器, 消息格式器, Tip 和 Popup 发送管理)

接口注册方式

在这先提一下 EasyAPI 在模块中注册接口的方式

Identifier 是接口的标识符, 便于在需要的时候取出相应的接口并进行操作.

XXXDynamicIntegrateAPI 是任意一个动态 API的实例, e.g: new CommandAPI()

public void moduleRegister() {
    this.registerAPI("Identifier", new XXXDynamicIntegrateAPI()) // <----- 这种方法
}

一般的 DynamicIntegrateAPI 都会有 add()remove() 等方法, 一般用于添加和注册对应 API 的对象

e.g: 在 CommandAPI 中 EasyCommand 就是其需要添加的 API 对象

使用 EasyAPI 的接口时, 我们一般不创建一个单独的类, 而是直接写成匿名类.

命令

在命令和配置中, 你会发现有俩种不同的 API, 一种叫 CommandAPI, 一种叫 SimpleCommandAPI

配置中是 ConfigAPISimpleConfigAPI

区别在于:

  • CommandAPI 是加入独立的命令(/wp /abq /wac 这种叫独立命令), 而 SimpleCommandAPI 是加入/eapi的子命令
    • 一般的, 使用 CommandAPI 用于有多个子命令, 并且需要自动生成 Help 发送的独立主命令.
    • 一般的 SimpleCommondAPI 用于简单插件的简单命令, 比如 sign 签到, 这种命令就不需要写为独立命令
  • ConfigAPI 是加入独立的配置(Nukkit/plugins/你的插件名/xxx.yml 这种叫独立配置) SimpleConfigAPI 是加入 Nukkit/plugins/EasyAPI/integrateConfig.yml 中的配置
    • 一般的 ConfigAPI 适用于非全局性操作, 你需要为每一个对象进行单一配置, 例如: 玩家虚拟血量, 你需要记录每一个玩家血量, 就适合用 ConfigAPI
    • 一般的 SimpleConfigAPI 适用于全局性配置, 例如你需要写清扫掉落物, 你要设置插件全局性的清扫时间, 清扫提示语之类, 就适合使用

下面是一个使用 SimpleCommandAPI 的示例

public void moduleRegister() {
    this.registerAPI("demoSimpleCommand", new SimpleCommandAPI())
            .add(
                    new EasySubCommand("test") {

                        @Nullable
                        public CommandArgument[] getArguments() { // 命令参数
                            return new CommandArgument[] {
                                    new CommandArgument("gameMode", CommandParamType.INT, false), // 最后一位 Boolean 是是否可选, 比如 你给物品, 数量就是可选的. 这里是 gameMode 所以是必须的不是可选的, 选 false
                                    new CommandArgument("playerName", CommandParamType.STRING, false)
                            };
                        }

                        @NotNull
                        public String[] getAliases() { // 别名, 也就是说, 输入/eapi ts 也是触发这个命令
                            return new String[] {"ts", "tt"};
                        }

                        @NotNull
                        public String getDescription() {
                            return "just a test command";
                        }

                        public boolean execute(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] strings) {
                            if (strings.length != 2) {
                                commandSender.sendMessage("wrong arg");
                            }
                            Player target = EasyAPIDemo.INSTANCE.getServer().getPlayer(strings[1]);
                            if (target != null) target.setGamemode(Integer.parseInt(strings[0]));
                            return false;
                        }
                    }
            );
}

可以看到, EasyAPI 非常的方便告诉了我们, 需要填写什么, 并且自动生成了主命令的 sendHelp

配置

未完待续