插件开发
Bngeuit 采用 Bukkit 风格的插件系统。插件 JAR 放入 plugins/ 目录即自动加载。
生命周期
onLoad() # 插件被加载(Bngeuit.api() 尚未就绪)
↓
onEnable() # 插件被启用(Bngeuit 静态方法可用)
↓
... 运行中 ...
↓
onDisable() # 插件被卸载(清理资源)插件主类
所有插件继承 JavaPlugin,通过 Bngeuit 静态方法调用 API:
java
package com.example.myplugin;
import cn.org.bukkit.bngeuit.Bngeuit;
import cn.org.bukkit.bngeuit.plugin.JavaPlugin;
import cn.org.bukkit.bngeuit.event.SubscribeEvent;
import cn.org.bukkit.bngeuit.event.GroupAtMessageEvent;
import cn.org.bukkit.bngeuit.event.C2CMessageEvent;
public class MyPlugin extends JavaPlugin {
@Override
public void onLoad() {
getLogger().info("插件加载中...");
}
@Override
public void onEnable() {
getLogger().info("插件已启用!");
}
@Override
public void onDisable() {
getLogger().info("插件已卸载");
}
@SubscribeEvent
public void onGroupAt(GroupAtMessageEvent e) {
// 被动回复群文本
Bngeuit.replyGroupText(
e.getGroupOpenid(), e.getId(), 1,
"你好," + e.getAuthor().username() + "!"
);
}
@SubscribeEvent
public void onC2C(C2CMessageEvent e) {
// 回复私聊
Bngeuit.replyC2CText(
e.getAuthor().id(), e.getId(), 1,
"收到你的私聊消息"
);
}
}JavaPlugin 便捷方法
| 方法 | 返回类型 | 说明 |
|---|---|---|
getConfig() | YamlConfig | 插件配置(若 JAR 内有 config.yml) |
getLogger() | Logger | 插件专属 Logger(Plugin.<插件名>) |
getDataFolder() | File | 数据文件夹 plugins/<插件名>/ |
getDescription() | PluginDescription | 插件描述信息 |
getState() | PluginState | 当前状态 |
项目结构
my-plugin/
├── build.gradle.kts
└── src/
└── main/
└── resources/
│ └── plugin.yml # 必须
└── java/
└── com/example/myplugin/
├── MyPlugin.java # 主类(继承 JavaPlugin)
├── MyListener.java # 事件处理器
└── MyCommand.java # 命令类打包后的 JAR:
MyPlugin.jar
├── plugin.yml # 插件元信息(必须)
├── config.yml # 默认配置(可选)
└── com/example/myplugin/
├── MyPlugin.class
├── MyListener.class
└── MyCommand.classGradle 构建
kotlin
plugins {
id("java")
}
repositories {
mavenCentral()
}
dependencies {
compileOnly("cn.org.bukkit.bngeuit:Bngeuit:1.0")
}
java {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}插件配置 (config.yml)
如果 JAR 内包含 config.yml,Bngeuit 会在首次加载时自动复制到 plugins/<插件名>/config.yml。已有配置不会被覆盖。
java
// 读取
String groupId = getConfig().getString("group_openid");
int count = getConfig().getInt("max_count");
// 写入
getConfig().set("last_user", "xxx");
getConfig().save();依赖排序
硬依赖(depend)
yaml
depend:
- RequiredLib # 必须存在,否则加载失败软依赖(softdepend)
yaml
softdepend:
- OptionalFeature # 存在则先加载,不存在则跳过注解自动扫描
插件 JAR 内的所有类会被 PluginManager 自动扫描,无需手动注册:
@SubscribeEvent→ 自动注册到事件总线@Command→ 自动注册到命令管理器
YamlConfig API
java
YamlConfig config = getConfig();
String str = config.getString("key");
int num = config.getInt("count");
boolean flag = config.getBoolean("enabled");
List<String> list = config.getStringList("items");
config.set("section.key", "value");
config.save();