EnderRealmServerCore 核心架构
整体架构
┌─────────────────────────────────────────────────────────────────┐
│ 其他插件 (bedwars, disaster 等) │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ API 层 (api/) │ │
│ │ EnvironmentAPI LoggerAPI │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 服务层 (service/) │ │
│ │ EnvironmentManager LoggerService │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────┼─────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Config │ │ HTTP │ │ Log │ │
│ │ Manager │ │ Client │ │ Logger │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 基础设施层 (infra/) │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ config/ │ │ http/ │ │ log/ │ │service/ │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
│
│ HTTP API
▼
┌─────────────────────────────────────────────────────────────────┐
│ EnderRealmServerApi │
│ (Python FastAPI 后端) │
└─────────────────────────────────────────────────────────────────┘模块结构
cn.enderrealm.core/
├── EnderRealmServerCore.java # 插件主类
│
├── api/ # API 层
│ ├── EnvironmentAPI.java # 环境 API 接口
│ └── LoggerAPI.java # 日志 API 接口
│
├── infra/ # 基础设施层
│ ├── config/ # 配置管理
│ │ ├── ConfigManager.java # 配置管理器接口
│ │ ├── ConfigProvider.java # 配置源接口
│ │ └── impl/
│ │ ├── DefaultConfigManager.java # 默认实现
│ │ ├── EnvConfigProvider.java # 环境变量源
│ │ └── FileConfigProvider.java # YAML 文件源
│ │
│ ├── http/ # HTTP 工具
│ │ ├── HttpClient.java # HTTP 客户端接口
│ │ ├── HttpClientConfig.java # 配置记录
│ │ ├── HttpException.java # 异常类
│ │ └── impl/
│ │ └── JdkHttpClient.java # JDK 实现
│ │
│ ├── log/ # 日志工具(内部实现)
│ │ ├── LogLevel.java # 日志级别枚举
│ │ └── PluginLogger.java # 日志器封装
│ │
│ └── service/ # 服务框架
│ ├── Service.java # 服务接口
│ └── ServiceRegistry.java # 注册中心
│
└── service/ # 业务服务层
├── environment/ # 环境服务
│ ├── Environment.java # 环境枚举
│ ├── EnvironmentConfig.java # 配置数据记录
│ ├── EnvironmentClient.java # API 客户端
│ └── EnvironmentManager.java # 管理器(实现 Service + EnvironmentAPI)
│
└── log/ # 日志服务
└── LoggerService.java # 日志服务(实现 Service + LoggerAPI)核心组件
1. 插件主类 (EnderRealmServerCore.java)
插件入口点,负责:
- 创建服务注册中心
- 注册所有服务
- 统一初始化和关闭
- 暴露公开 API
java
public class EnderRealmServerCore extends JavaPlugin {
private ServiceRegistry serviceRegistry;
private LoggerService loggerService;
private EnvironmentManager environmentManager;
@Override
public void onEnable() {
instance = this;
// 1. 创建注册中心
serviceRegistry = new ServiceRegistry();
// 2. 注册服务(按依赖顺序)
registerServices();
// 3. 统一初始化
serviceRegistry.initAll();
}
private void registerServices() {
// 日志服务(最先注册,其他服务依赖它)
loggerService = new LoggerService(getLogger(), "[EnderRealm]");
serviceRegistry.register(loggerService);
// 环境管理服务
environmentManager = new EnvironmentManager(...);
serviceRegistry.register(environmentManager);
}
// 公开 API
public static LoggerAPI getLoggerAPI() { return instance.loggerService; }
public static EnvironmentAPI getEnvironmentAPI() { return instance.environmentManager; }
}2. 服务框架 (ServiceRegistry)
统一管理服务生命周期:
- 注册:
register(Service)注册服务 - 初始化:
initAll()按注册顺序初始化 - 关闭:
shutdownAll()按注册逆序关闭
java
public class ServiceRegistry {
private final List<Service> services = new ArrayList<>();
public void register(Service service) {
services.add(service);
}
public void initAll() {
for (Service service : services) {
service.init();
}
}
public void shutdownAll() {
// 逆序关闭
for (int i = services.size() - 1; i >= 0; i--) {
services.get(i).shutdown();
}
}
}3. 日志服务 (LoggerService)
统一的日志管理服务:
- 实现
LoggerAPI接口,供其他插件使用 - 支持 debug/trace 级别控制
- 支持创建带前缀的子日志器
- 根据环境自动调整级别
java
// 公开 API 接口
public interface LoggerAPI {
void info(String msg, Object... args);
void warn(String msg, Object... args);
void error(String msg);
void error(String msg, Throwable t);
void debug(String msg, Object... args);
void trace(String msg, Object... args);
LoggerAPI withPrefix(String prefix);
}
// 服务实现
public class LoggerService implements Service, LoggerAPI {
private final PluginLogger coreLogger;
public LoggerAPI withPrefix(String prefix) {
return new PrefixedLoggerAPI(coreLogger, prefix);
}
}4. 环境服务 (EnvironmentManager)
环境管理服务:
- 实现
EnvironmentAPI接口 - 从 API 服务获取环境配置
- 缓存在内存中,供其他插件访问
java
public interface EnvironmentAPI {
Environment getEnvironment();
boolean isProduction();
boolean isStaging();
boolean isDevelopment();
String getServerName();
String getConfig(String key);
String getConfig(String key, String defaultValue);
}5. 配置管理 (ConfigManager)
多源配置,按优先级查找:
- 环境变量 (priority=0)
- config.yml 文件 (priority=100)
java
public interface ConfigManager {
String getString(String key, String defaultValue);
int getInt(String key, int defaultValue);
boolean getBoolean(String key, boolean defaultValue);
}6. HTTP 客户端 (HttpClient)
统一的 HTTP 工具:
- 支持 GET/POST
- 自动 JSON 序列化/反序列化
- 支持重试和超时配置
java
public interface HttpClient {
<T> T get(String url, Class<T> responseType) throws HttpException;
<T, B> T post(String url, B body, Class<T> responseType) throws HttpException;
}数据流
┌────────────────────────────────────────────────────────────────┐
│ 插件启动流程 │
└────────────────────────────────────────────────────────────────┘
onEnable()
│
├─── 1. 创建 ServiceRegistry
│
├─── 2. registerServices()
│ ├── 创建 LoggerService(最先注册)
│ ├── 创建 ConfigManager
│ ├── 创建 HttpClient
│ └── 创建 EnvironmentManager
│
├─── 3. serviceRegistry.initAll()
│ ├── LoggerService.init()
│ └── EnvironmentManager.init()
│ ├── 调用 API 服务
│ └── 缓存环境配置
│
└─── 4. 插件就绪
┌────────────────────────────────────────────────────────────────┐
│ 运行时调用 │
└────────────────────────────────────────────────────────────────┘
其他插件
│
├─── EnderRealmServerCore.getLoggerAPI()
│ └── LoggerService
│ ├── info/warn/error
│ ├── debug/trace(受级别控制)
│ └── withPrefix("[MyPlugin]")
│
└─── EnderRealmServerCore.getEnvironmentAPI()
└── EnvironmentManager (内存缓存)
├── getEnvironment()
├── isProduction()
└── getConfig(key)设计模式
服务注册模式
- 所有服务实现
Service接口 - 通过
ServiceRegistry统一管理生命周期 - 便于扩展新服务
策略模式
ConfigProvider接口定义配置源行为- 多个实现:
EnvConfigProvider、FileConfigProvider DefaultConfigManager按优先级聚合
模板方法模式
Service接口定义init()和shutdown()方法- 各服务实现具体逻辑
ServiceRegistry统一调用
装饰器模式
LoggerService.withPrefix()创建带前缀的子日志器- 共享父日志器的级别控制
- 灵活组合日志前缀
扩展点
| 扩展点 | 方式 |
|---|---|
| 添加新服务 | 实现 Service 接口,在主类注册 |
| 替换 HTTP 实现 | 实现 HttpClient 接口 |
| 添加配置源 | 实现 ConfigProvider 接口 |
| 添加新环境类型 | 扩展 Environment 枚举 |