Skip to content

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)

多源配置,按优先级查找:

  1. 环境变量 (priority=0)
  2. 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 接口定义配置源行为
  • 多个实现:EnvConfigProviderFileConfigProvider
  • DefaultConfigManager 按优先级聚合

模板方法模式

  • Service 接口定义 init()shutdown() 方法
  • 各服务实现具体逻辑
  • ServiceRegistry 统一调用

装饰器模式

  • LoggerService.withPrefix() 创建带前缀的子日志器
  • 共享父日志器的级别控制
  • 灵活组合日志前缀

扩展点

扩展点方式
添加新服务实现 Service 接口,在主类注册
替换 HTTP 实现实现 HttpClient 接口
添加配置源实现 ConfigProvider 接口
添加新环境类型扩展 Environment 枚举