Frontleaves MC 插件共享库——为所有 Frontleaves 插件提供 gRPC 客户端基础设施(通道管理 + 认证拦截器)。
- gRPC 通道管理:创建
ManagedChannel并自动追踪生命周期,插件卸载时自动清理未关闭的通道 - 认证拦截器:通过
ClientAuthInterceptor在每次 gRPC 调用的 metadata 中注入plugin-name和plugin-secret-key - 单例访问:
FrontleavesLib.getInstance()供依赖插件获取库实例
flowchart TB
subgraph MC["Minecraft Server (Paper)"]
subgraph LIB["frontleaves-lib"]
FL["FrontleavesLib"]
CAI["ClientAuthInterceptor<br/>plugin-name / plugin-secret-key"]
end
FL --> CAI
P1["server-status"]
P2["plugin-b"]
P3["plugin-c"]
end
P1 -- "createChannel()" --> FL
P2 -- "createChannel()" --> FL
P3 -- "createChannel()" --> FL
CAI -- "ManagedChannel (Plaintext)" --> GO
subgraph GO["frontleaves-plugin (Go 后端)"]
SVR["gRPC Server"]
end
| 类别 | 技术 |
|---|---|
| 语言 | Java 21 |
| 平台 | Paper API 1.21.1 |
| 构建 | Maven + Shade Plugin |
| gRPC | 1.62.2 |
| Protobuf | 3.25.3 |
- JDK 21+
- Maven 3.8+
mvn clean install构建产物安装到本地 Maven 仓库,供其他插件通过 <dependency> 引用。
在业务插件的 pom.xml 中添加:
<dependency>
<groupId>com.frontleaves.plugins</groupId>
<artifactId>frontleaves-lib</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>在业务插件的 paper-plugin.yml 中声明依赖:
dependencies:
server:
FrontleavesLib:
required: true
load: BEFOREFrontleavesLib lib = FrontleavesLib.getInstance().orElseThrow();
ManagedChannel channel = lib.createChannel("localhost", 50051, "server-status", "your-secret-key");.
├── pom.xml # Maven 构建(含 shade 插件)
└── src/main/
├── java/.../lib/
│ ├── FrontleavesLib.java # 主类:通道管理 + 单例
│ └── grpc/
│ └── ClientAuthInterceptor.java # gRPC 认证拦截器
└── resources/
└── paper-plugin.yml # Paper 插件描述(STARTUP 加载)
| 项目 | 说明 |
|---|---|
| server-status | 服务器状态监控插件(Java/gRPC) |
| frontleaves-plugin | Go 后端服务(gRPC Server + RESTful API) |