Skip to content

插件开发

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.class

Gradle 构建

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();