-
Notifications
You must be signed in to change notification settings - Fork 3
使用基础 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
配置中是 ConfigAPI
和 SimpleConfigAPI
区别在于:
-
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
- Home
- Installation 安装
-
你的第一个 EasyAPI 插件
- 创建一个 EasyAPI 插件
- 认识 EasyAPIModule
- 使用基础 API 接口
- 打包发布你基于 EasyAPI 的插件