Skip to content

环境 API 使用指南

概述

环境 API 允许其他插件获取当前服务器的环境信息(生产/测试/开发),并根据环境执行不同的逻辑。

获取 API 实例

java
import cn.enderrealm.core.EnderRealmServerCore;
import cn.enderrealm.core.api.EnvironmentAPI;

// 方式 1:静态方法(推荐)
EnvironmentAPI env = EnderRealmServerCore.getEnvironmentAPI();

// 方式 2:通过插件实例
EnderRealmServerCore core = JavaPlugin.getPlugin(EnderRealmServerCore.class);
EnvironmentAPI env = core.getEnvironmentManager();

API 方法

环境判断

java
// 获取环境枚举
Environment environment = env.getEnvironment();

// 快捷判断方法
boolean isProd = env.isProduction();
boolean isStaging = env.isStaging();
boolean isDev = env.isDevelopment();

服务器信息

java
// 获取服务器名称
String serverName = env.getServerName();

// 获取自定义配置
String maxPlayers = env.getConfig("max_players");
String motd = env.getConfig("motd", "默认 MOTD");  // 带默认值

使用示例

示例 1:根据环境调整日志级别

java
public class MyPlugin extends JavaPlugin {
    @Override
    public void onEnable() {
        EnvironmentAPI env = EnderRealmServerCore.getEnvironmentAPI();
        
        if (env.isDevelopment()) {
            // 开发环境:详细日志
            getLogger().setLevel(Level.FINE);
        } else {
            // 生产环境:只记录重要日志
            getLogger().setLevel(Level.WARNING);
        }
    }
}

示例 2:根据环境使用不同配置

java
public class GameConfig {
    private final EnvironmentAPI env;
    
    public GameConfig() {
        this.env = EnderRealmServerCore.getEnvironmentAPI();
    }
    
    public int getMaxPlayers() {
        // 从自定义配置获取,生产环境默认 100,开发环境默认 10
        String defaultMax = env.isProduction() ? "100" : "10";
        return Integer.parseInt(env.getConfig("max_players", defaultMax));
    }
    
    public boolean isDebugMode() {
        // 开发环境默认开启调试
        return env.isDevelopment();
    }
}

示例 3:根据环境启用不同功能

java
public class FeatureManager {
    private final EnvironmentAPI env;
    
    public FeatureManager() {
        this.env = EnderRealmServerCore.getEnvironmentAPI();
    }
    
    public void registerFeatures() {
        // 所有环境都启用的功能
        registerBasicFeatures();
        
        // 仅测试环境启用的功能
        if (env.isStaging() || env.isDevelopment()) {
            registerBetaFeatures();
        }
        
        // 仅开发环境启用的功能
        if (env.isDevelopment()) {
            registerDebugFeatures();
        }
    }
}

示例 4:根据环境连接不同后端

java
public class BackendClient {
    private final EnvironmentAPI env;
    private final HttpClient httpClient;
    
    public BackendClient() {
        this.env = EnderRealmServerCore.getEnvironmentAPI();
        this.httpClient = new JdkHttpClient(...);
    }
    
    public String getBackendUrl() {
        // 根据环境返回不同的后端地址
        return switch (env.getEnvironment()) {
            case PRODUCTION -> "https://api.enderrealm.cn";
            case STAGING -> "https://staging-api.enderrealm.cn";
            case DEVELOPMENT -> "http://localhost:8000";
        };
    }
}

Environment 枚举

java
public enum Environment {
    PRODUCTION("production"),    // 生产环境
    STAGING("staging"),          // 测试环境
    DEVELOPMENT("development");  // 开发环境
    
    private final String value;
    
    public String getValue() { return value; }
    
    public static Environment fromString(String value) { ... }
}

注意事项

  1. 初始化顺序:确保在 EnderRealmServerCore 启动后再调用 API
  2. 空值处理getConfig() 可能返回 null,使用带默认值的方法更安全
  3. 缓存机制:环境配置在启动时获取并缓存,运行时不会变化
  4. 容错机制:如果 API 服务不可用,会使用 config.yml 中的 fallback 配置

错误处理

java
EnvironmentAPI env = EnderRealmServerCore.getEnvironmentAPI();

// 安全地获取配置
String value = env.getConfig("key");
if (value == null) {
    // 配置不存在,使用默认值
    value = "default";
}

// 或者直接使用带默认值的方法
String value = env.getConfig("key", "default");