FusionCore是本人为简化bukkit插件开发过程从而开发的一款前置插件。
本前置插件中集成了Reflections以及fastJSON库,以便开发。
在您的插件主类中继承FusionPlugin类,并实现enable和disable方法:
public class YourPlugin extends FusionPlugin {
//继承FusionPlugin父类
@Override
protected final void enable() {
//插件启动时触发本方法
}
@Override
protected final void disable() {
//插件关闭时触发本方法
}
}
并且在plugin.yml中添加前置插件:
depend
- FusionCore
随后您就可以使用本前置插件提供的许多功能。
插件启动时会自动扫描包中的所有标注好的指令类并自动注册,省去繁琐的步骤。
命令执行时将自动解析到类中的方法,参数也将一同自动传入。
形如/simplecommand的指令便为简单指令
新建一个类并继承BukkitSimpleCommand,并且在类上标注@AutoRegisterCommand注解:
@AutoRegisterCommand
public class YourSimpleCommand extends BukkitSimpleCommand {
//注意这里必须为无参构造器,不然反射注册时会报错
protected YourSimpleCommand() {
//设置指令名
super("simplecommand");
//设置指令别名
setAliases(List.of("alias1", "alias2","alias3"));
//设置指令描述
setDescription("...");
//设置指令权限
setPermission("permission.yourpermission");
//设置指令提示
setUsage("/simplecommand");
}
}
创建一个方法并且标注@Invoke注解,执行时会自动传入一个CommandSender参数:
@Invoke
public void invoke(CommandSender sender) {
//执行的代码...
}
形如/compositecommand sub1 sub2 arg1 arg2的指令便为复合指令
新建一个类并继承BukkitCompositeCommand,并且在类上标注@AutoRegisterCommand注解:
@AutoRegisterCommand
public class YourCompositeCommand extends BukkitCompositeCommand {
//注意这里必须为无参构造器,不然反射注册时会报错
public YourCompositeCommand() {
//设置主指令名
super("compositecommand");
//设置指令别名
setAliases(List.of("alias1", "alias2","alias3"));
}
}
创建一个方法并标注@SubCommand注解,执行时便可将所有参数解析后传入。
| 参数 | 类型 | 描述 |
|---|---|---|
| command | String | 必填,指定子命令,如主指令为compositecommand,该参数设置为sub1.sub2.sub3,在执行指令/compositecommand sub1 sub2 sub3 args..时会自动解析到本方法 |
| playerCommand | boolean | 默认值为false,指定是否只能由玩家执行该指令 |
| adminCommand | boolean | 默认值为false,指定是否只能由管理员执行该指令 |
| usage | String | 默认为空,指定命令提示 |
| permission | String | 默认为空,指定本命令是否需要特定权限 |
@SubCommand(
command = "sub1.sub2",
playerCommand = true,
adminCommand = true,
usage = "/compositecommand sub1 sub2 [String]",
permission = "compositecommand.permission"
)
public void invoke(CommandSender sender, String string) {
//指令执行时将会自动将所需参数传入
//当解析错误时会报ParseException
}
可以解析的参数类型:
| 参数类型 | 描述 |
|---|---|
| Boolean/boolean | 可解析true或false(不分大小写) |
| Date | 可解析形如yyyy/MM/dd或yyyy-MM-dd等的字符串,输入now则会自动解析成当前的时间 |
| Double/double | 解析为双精度浮点数 |
| Float/float | 解析为单精度浮点数 |
| Integer/int | 解析为整形 |
| Long/long | 解析为长整型 |
| String | 解析为字符串,注意null也将解析为空 |
| UUID | 解析为UUID |
| Vector | 解析为向量,需要输入形如(x,y,z)的字符串 |
| World | 解析为世界,需要输入世界名 |
如果指令输入的参数为null将会解析为空
新建一个类并实现Handler接口,并在类上和方法上标注@RequestHandler注解。
类注解中的参数path指定您要创建http服务的父路径,而方法中的路径指定http服务的子路径,例如父路径为
/api/super,子路径为/sub/sub,则会创建一个路径为/api/super/sub/sub的http服务。
@RequestHandler(path = "/yourpath")
public class YourHandler implements Handler {
@RequestHandler(path = "/yourpath)
public String invoke() {
}
}
注意方法的返回值必须为String,不然会报错。
方法要解析的每个参数中必须标注@RequestParam注解,其中paramName指定了http请求中传入的参数名,defaultValue则指定了默认参数值,默认为null。
注解完的代码在执行时便可自动解析参数并传入方法。
@RequestHandler(path = "/yourpath")
public String invoke(
@RequestParam(paramName = "double1", defaultValue = "0") Double d1,
@RequestParam(paramName = "string1") String s1
) {
//...
}
插件启动时会自动注册所有http服务,可在配置文件中配置http服务器的端口:
web:
http-service: false
http-port: 8088
新建一个类并实现原版Bukkit中的Listener接口,并且在类上标注@AutoRegisterListener注解。
插件启动时将自动注册该监听器。