# PluginBoot **Repository Path**: clann/PluginBoot ## Basic Information - **Project Name**: PluginBoot - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 2 - **Created**: 2018-10-01 - **Last Updated**: 2025-01-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PluginBoot 使用 [ClannBoot](https://gitee.com/null_091_2109/ClannBoot) 进行启动,封装了许多有用的API 作为其他插件的前置插件 欢迎广大开发者加入(交流群567442734) 以下介绍以本插件为例,进行介绍(不会弄doc,所以不知道你们能看懂不= =) [TOC] # 简介 你是否遇到过以下困扰? 编写指令,数不清的if else,参数参数合法性判断,指令权限判断 用plugin.yml定义一堆指令 一堆getCommand(...).setExecutor() 编写一大堆配置,配置文件要写注释,代码里还要写注释,w(゚Д゚)w 一个一个读配置 ε=ε=ε=(#>д<)ノ) 还得被编码困扰 ┏┛墓┗┓...(((m-__-)m)) 编写一大堆scheduler timer 异步循环总是需要while(true) ヘ( ̄ω ̄ヘ)不然呢.. 定时任务每秒循环检测... 凸(艹皿艹 ) 每添加一个监听器类就注册一次 总是需要用静态属性来保存某个引用,以便其他地方使用(不这样就得一个对象传来传去) 看到这里,那么恭喜你,本框架是你不二之选 本插件是基于[ClannBoot](https://gitee.com/null_091_2109/ClannBoot)开发(ClannBoot是一个程序启动框架,类似于SpringBoot) 本插件在ClannBoot基础上,添加了注解指令框架,注解scheduler timer等极为方便的功能 能极大加快开发速度,使插件更加模块化,各功能松耦合,高内聚 废话不多说,下面介绍用法 # 搭建开发环境 ## 添加依赖 ### maven ``` ClannMaven https://gitee.com/clann/ClannMaven/tree/master/repository lol.clann.bukkit PluginBoot-bukkit pluginboot版本号 ``` ### gradle ``` repositories { maven { name = "ClannMaven" url = 'https://gitee.com/clann/ClannMaven/tree/master/repository' } } dependencies { compile "lol.clann.bukkit:PluginBoot-bukkit:pluginboot版本号" } ``` ### plugin.yml 添加本插件为依赖 [plugin.yml](https://gitee.com/clann/ExamplePlugin/blob/master/src/main/resources/plugin.yml) ### 服务端安装插件 在 [这里](https://gitee.com/clann/ClannMaven/tree/master/repository/lol/clann/bukkit/PluginBoot-bukkit)下载对应版本的插件,扔服务端plugins里 # 起步 (下面均已具体代码为例进行讲解) ## 插件主类 [ExamplePlugin](https://gitee.com/clann/ExamplePlugin/blob/master/src/main/java/lol/clann/exampleplugin/ExamplePlugin.java) 插件主类只需要继承 BukkitPluginBootstrap 在构造函数中传入插件名字用于日志输出 不需要也不要在主类中做其他事情,本框架并不会维护插件主类 其他所有类都必须在插件主类子包内 或者与主类同包 # 监听器(以监听器为例,引出了service和inject概念) 不使用本插件 ```java // 之前我们的监听器长这样,且需要自己new一个实例,并且手动注册 // examplePlugin需要手动赋值 public class FirstListener implements Listener { public ExamplePlugin examplePlugin; @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void event(PlayerJoinEvent event) { event.getPlayer().sendMessage("你好"); } } ``` 使用本插件,不需要手动实例化,不需要手动注册监听器,更不需要手动为字段赋值 ```java // @Service注解的类,会被自动实例化(实例化后的对象,我称之为service),FirstListener实现了Listener,所以会自动注册为监听器 @Service public class FirstListener implements Listener { // @Inject会对service中的对象进行依赖注入,这里examplePlugin是插件主类,所以会注入对应的插件实例 // 注入类型有很多,后面慢慢讲解 // 什么,你问这样有啥用,那如果有十个,二十个类,每个类中都有N个属性需要赋值呢? @Inject private ExamplePlugin examplePlugin; @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void event(PlayerJoinEvent event) { event.getPlayer().sendMessage("你好"); } } ``` # scheduler timer 展示了原始的实现方式,和使用task注解的实现方式 内容较多 代码中有详细注释说明(只展示了@Task的用法,任务注解还有@BukkitTimer,@Timer,@PatternTimer,他们使用方法与@Task相同,具体效果看注解源码里的注释) [ExampleTask](https://gitee.com/clann/ExamplePlugin/blob/master/src/main/java/lol/clann/exampleplugin/task/ExampleTask.java) # 配置注入 上一节介绍了任务调度,本节已上一节为基础,讲解配置注入 这个例子还补充讲解了Service生命周期 ## 配置注入 [ExampleConfig](https://gitee.com/clann/ExamplePlugin/blob/master/src/main/java/lol/clann/exampleplugin/config/ExampleConfig.java) ## 配置使用 + service生命周期 [ConfigTask](https://gitee.com/clann/ExamplePlugin/blob/master/src/main/java/lol/clann/exampleplugin/config/ConfigTask.java) # 指令框架 指令只需要继承ICommand即可自动注册指令,不需要在plugin.yml中注册 子指令用注解进行定义 样例: [CommandModule](https://gitee.com/clann/PluginBoot/tree/master/src/main/java/lol/clann/bukkit/pluginboot/commands/CommandModule.java) # 数据 ## 序列化/反序列化 将对象与JSONObject进行互相转化 [ObjectConventor](https://gitee.com/null_091_2109/ClannBoot/tree/master/src/main/java/lol/clann/clannboot/conventor/ObjectConventor.java) ## 文件存储 [FileDataHolder](https://gitee.com/null_091_2109/ClannBoot/tree/master/src/main/java/lol/clann/clannboot/model/FileDataHolder.java) ## 数据库orm [daomapper](https://gitee.com/null_091_2109/ClannBoot/tree/master/src/main/java/lol/clann/clannboot/daomapper) 介绍todo # 定时任务 例: [ServerTick](https://gitee.com/clann/PluginBoot/tree/master/src/main/java/lol/clann/bukkit/pluginboot/service/ServerTick.java) # 服务端lang汉化 服务端语言一般都是英文 本框架会扫描所有mod和jar包中的en_us.lang和zh_cn.lang自动注册到服务端(zh_cn.lang中的会覆盖en_us.lang的) 插件配置文件目录下,lang文件夹中的语言文件将也将自动扫描载入,切回覆盖上面的 具体实现方法: [TranslateUtils](https://gitee.com/clann/PluginBoot/tree/master/src/main/java/lol/clann/bukkit/pluginboot/util/TranslateUtils.java) # tellraw [rawmessage](https://gitee.com/clann/PluginBoot/tree/master/src/main/java/lol/clann/bukkit/pluginboot/model/rawmessage) 用例: 指令框架使用tellraw生成帮助信息 lol.clann.bukkit.pluginboot.command.ICommand.help(org.bukkit.command.CommandSender, lol.clann.bukkit.pluginboot.command.SubCommand) [ICommand](https://gitee.com/clann/PluginBoot/tree/master/src/main/java/lol/clann/bukkit/pluginboot/command/ICommand.java) # NMS ## 反射 [NBTCompoundUtils](https://gitee.com/clann/PluginBoot/tree/master/src/main/java/lol/clann/bukkit/pluginboot/util/NBTCompoundUtils.java) 中有大量反射应用