历史版本 v6.2.5。 本页内容为历史发布版本,不再接受更新。

查看本页在 v6.4.0 中的版本 →

Skip to content

自动注册 ​

这篇文章将会教你如何使用注解让UltiTools帮你完成一系列的、繁琐的注册任务。

@UltiToolsModule 注解 ​

在继承了 UltiToolsPlugin 的类的上方添加这一注解。

此注解仅可用于UltiTools模块主类,用于简化注解配置。

此注解包含了自动扫描并注册此类包名下的命令,监听器和配置文件。

@UltiToolsModule 上的 eventListener、cmdExecutor 与 config 从不被读取

registerBukkit 通过朴素的元注解查找取 @EnableAutoRegister,拿到的始终是标注在 @UltiToolsModule 类型本身上的裸注解,因此你在 @UltiToolsModule 上设置的 eventListener、cmdExecutor、config 只是从未被解析的 @AliasFor 声明,不会生效。 改为把你要的开关直接标在你的类上,写成 @EnableAutoRegister(eventListener = false, cmdExecutor = false, config = false):PluginManager 是按直接查找读取这个注解类型的,标在它自己身上的值才会生效。 解析这个别名,或者在元注解查找命中时合并宿主注解的属性值,跟踪于 issue #325。

如果你想要手动注册命令或监听器,请按上方警告所述,把 eventListener 或 cmdExecutor 设为 false 并直接标注 @EnableAutoRegister,而不是标在 @UltiToolsModule 上。

java
import com.ultikits.ultitools.abstracts.UltiToolsPlugin;
import com.ultikits.ultitools.annotations.UltiToolsModule;
import lombok.Getter;
import com.ultikits.ultitools.annotations.Autowired;

@UltiToolsModule(
        // 是否扫描并注册监听器
        eventListener = true,
        // 是否扫描并注册命令
        cmdExecutor = true,
        // 是否扫描并注册配置文件
        config = true,
        // 扫描包名
        scanBasePackages = {"com.test.plugin"},
        // 多语言支持
        i18n = {"zh", "en"}
)
public class PluginMain extends UltiToolsPlugin {
    
    @Getter
    private static PluginMain pluginMain;

    public PluginMain() {
        super();
        pluginMain = this;
    }

    @Override
    public boolean registerSelf() {
        return true;
    }
    
    ...
}

@EnableAutoRegister 注解 ​

六参数连接器构造器已标记为待移除

下面示例中的构造器对应 UltiToolsPlugin 上带 @Deprecated(since = "6.0.8", forRemoval = true) 的重载,它把资源目录路径写死,凡是用到的地方 javac 都会产生一条移除警告,页面下方 @ContextEntry 示例里的同一个构造器也是如此。 改用外部插件 API,在你自己的 JavaPlugin 里调用 UltiToolsAPI.connect,或者保留连接器、改调七参数构造器并自行传入 resourceFolderPath:这两种写法在 v6.2.5 上都可用。 连接器的替代签名仍在 issue #217 中讨论,移除动作本身跟踪于 issue #213。

@UltiToolsModule 内包含了 @EnableAutoRegister 注解,在不适合使用 @UltiToolsModule 的情况下,你可以使用 @EnableAutoRegister 注解,比如你想在你自己的插件中使用 UltiTools 的自动注册。

在继承了 UltiToolsPlugin 的类的上方添加这一注解,UltiTools 在加载你的模块时会根据你的配置进行自动注册:

cmdExecutor = true 会走到一个抛 ClassCastException 的已弃用重载

在本页展示的连接器注册路径上,registerBukkit 把命令注册交给 CommandManager.registerAll(UltiToolsPlugin, String),它把每个扫描到的类直接强转成已废弃的 AbstractCommandExecutor,现已标 @Deprecated(since = "6.2.5", forRemoval = true),因此按推荐写法继承 BaseCommandExecutor 的命令类会抛出未捕获的 ClassCastException。 命令类若要走这条连接器路径,请改继承 AbstractCommandExecutor,或改用本页前文所述的模块 JAR 标准加载方式,那条路径完全不会调用这个重载。 修复还是移除这个重载,与连接器的替代签名一起在 issue #327 中决定。

java
@EnableAutoRegister(
    scanPackage = "",     //要扫描的包
    eventListener = true, //是否注册监器
    cmdExecutor = true,   //是否注册执行器
    config = true        //是否注册配置文件类
)
public class UltiToolsConnector extends UltiToolsPlugin {

    // 如果需要连接到UltiTools-API,则需要重写这个有参数的构造函数,另一个无参数的是给模块开发使用的。
    // 在这里请不要主动使用无参数的构造函数
    public UltiToolsConnector(String pluginName, String version, List<String> authors, List<String> loadAfter, int minUltiToolsVersion, String mainClass) {
        super(pluginName, version, authors, loadAfter, minUltiToolsVersion, mainClass);
    }

    @Override
    public boolean registerSelf() throws IOException {
        return true;
    }

    ...
}

@ContextEntry 注解 ​

本示例中的连接器构造器与 @EnableAutoRegister 一节所述是同一个六参数重载。

在继承了 UltiToolsPlugin 的类的上方添加这一注解;它只在上方所述的 register(UltiToolsPlugin) 连接器与适配器路径下生效,标准模块以 JAR 方式被 UltiTools 加载时不会读取它。标准模块请改用 @Service 或 @Bean 注册 Bean。

java
@ContextEntry(MyBean.class)
public class UltiToolsConnector extends UltiToolsPlugin {

    // 如果需要连接到UltiTools-API,则需要重写这个有参数的构造函数,另一个无参数的是给模块开发使用的。
    // 在这里请不要主动使用无参数的构造函数
    public UltiToolsConnector(String pluginName, String version, List<String> authors, List<String> loadAfter, int minUltiToolsVersion, String mainClass) {
        super(pluginName, version, authors, loadAfter, minUltiToolsVersion, mainClass);
    }

    @Override
    public boolean registerSelf() throws IOException {
        return true;
    }
    
    ...
}

@CmdExecutor 注解 ​

带有此注解的命令执行器类,在启用自动扫描注册命令时会被注册

详情参见 命令执行器

@EventListener 注解 ​

带有此注解的实现 Listener 的类在自动扫描注册监听器启用的情况下被自动注册

详情参见 事件监听器

贡献者

The avatar of contributor named as Claude Opus 5.5 Claude Opus 5.5
The avatar of contributor named as Ling Bao Ling Bao
The avatar of contributor named as a a

基于 MIT 许可发布