perf: 简化代码
This commit is contained in:
@@ -13,6 +13,9 @@ import lombok.Getter;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.plugin.Plugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@SuppressWarnings("CallToPrintStackTrace")
|
||||
@@ -27,7 +30,19 @@ public class HamsterBallPlugin extends Plugin {
|
||||
logger.info("仓鼠球正在初始化");
|
||||
instance = this;
|
||||
try {
|
||||
BallBungeeCordAPI.init();
|
||||
File dataFolder = getDataFolder();
|
||||
if (dataFolder.mkdir()) {
|
||||
logger.info("已生成插件存档文件夹");
|
||||
}
|
||||
File configFile = new File(dataFolder, "config.yml");
|
||||
if (!configFile.exists()) {
|
||||
Files.copy(
|
||||
getResourceAsStream("config.yml"),
|
||||
configFile.toPath(),
|
||||
StandardCopyOption.REPLACE_EXISTING
|
||||
);
|
||||
}
|
||||
BallBungeeCordAPI.init(configFile);
|
||||
logger.info("已初始化 BallAPI");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
@@ -1,66 +1,31 @@
|
||||
package cn.hamster3.mc.plugin.ball.bungee.api;
|
||||
|
||||
import cn.hamster3.mc.plugin.ball.bungee.HamsterBallPlugin;
|
||||
import cn.hamster3.mc.plugin.ball.bungee.util.BallBungeeCordUtils;
|
||||
import cn.hamster3.mc.plugin.ball.common.api.BallAPI;
|
||||
import cn.hamster3.mc.plugin.ball.common.config.BallConfig;
|
||||
import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo;
|
||||
import cn.hamster3.mc.plugin.ball.common.entity.BallServerType;
|
||||
import cn.hamster3.mc.plugin.core.bungee.util.CoreBungeeCordUtils;
|
||||
import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
|
||||
import net.md_5.bungee.config.Configuration;
|
||||
import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
|
||||
import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class BallBungeeCordAPI extends BallAPI {
|
||||
public BallBungeeCordAPI(@NotNull BallConfig ballConfig) {
|
||||
super(ballConfig);
|
||||
public BallBungeeCordAPI(@NotNull ConfigSection config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
public static BallBungeeCordAPI getInstance() {
|
||||
return (BallBungeeCordAPI) instance;
|
||||
}
|
||||
|
||||
public static void init() {
|
||||
public static void init(@NotNull File configFile) throws IOException {
|
||||
if (instance != null) {
|
||||
return;
|
||||
}
|
||||
HamsterBallPlugin plugin = HamsterBallPlugin.getInstance();
|
||||
Configuration config = CoreBungeeCordUtils.getPluginConfig(plugin);
|
||||
Map<String, String> env = System.getenv();
|
||||
|
||||
BallServerInfo serverInfo = new BallServerInfo(
|
||||
env.getOrDefault("BALL_LOCAL_SERVER_INFO_ID", config.getString("server-info.id")),
|
||||
env.getOrDefault("BALL_LOCAL_SERVER_INFO_NAME", config.getString("server-info.name")),
|
||||
BallServerType.PROXY,
|
||||
env.getOrDefault("BALL_LOCAL_SERVER_IP", config.getString("server-info.host", "0.0.0.0")),
|
||||
Integer.parseInt(
|
||||
env.getOrDefault("BALL_LOCAL_SERVER_PORT", config.getString("server-info.port", "25577"))
|
||||
)
|
||||
);
|
||||
|
||||
DataSource datasource;
|
||||
if (config.contains("datasource")) {
|
||||
plugin.getLogger().info("启用仓鼠球自定义数据库连接池");
|
||||
datasource = BallBungeeCordUtils.getDataSource(config.getSection("datasource"));
|
||||
} else {
|
||||
plugin.getLogger().info("复用 HamsterCore 的数据库连接池");
|
||||
datasource = CoreAPI.getInstance().getDataSource();
|
||||
}
|
||||
|
||||
BallConfig ballConfig = new BallConfig(
|
||||
config.getBoolean("debug", false),
|
||||
config.getString("channel-prefix", "") + ":",
|
||||
config.getBoolean("game-server-update-player-info", false),
|
||||
config.getStringList("load-player-info-filter"),
|
||||
serverInfo,
|
||||
datasource
|
||||
);
|
||||
instance = new BallBungeeCordAPI(ballConfig);
|
||||
YamlConfig config = YamlConfig.load(configFile);
|
||||
instance = new BallBungeeCordAPI(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -5,15 +5,10 @@ import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo;
|
||||
import cn.hamster3.mc.plugin.ball.common.event.BallActions;
|
||||
import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerInfoUpdateEvent;
|
||||
import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
|
||||
import cn.hamster3.mc.plugin.core.lib.com.zaxxer.hikari.HikariConfig;
|
||||
import cn.hamster3.mc.plugin.core.lib.com.zaxxer.hikari.HikariDataSource;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.connection.Server;
|
||||
import net.md_5.bungee.config.Configuration;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
@@ -60,32 +55,4 @@ public final class BallBungeeCordUtils {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static DataSource getDataSource(@Nullable Configuration datasourceConfig) {
|
||||
if (datasourceConfig == null) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
HikariConfig hikariConfig = new HikariConfig();
|
||||
String driver = datasourceConfig.getString("driver");
|
||||
hikariConfig.setDriverClassName(driver);
|
||||
hikariConfig.setJdbcUrl(datasourceConfig.getString("url"));
|
||||
hikariConfig.setUsername(datasourceConfig.getString("username"));
|
||||
hikariConfig.setPassword(datasourceConfig.getString("password"));
|
||||
hikariConfig.setMaximumPoolSize(datasourceConfig.getInt("maximum-pool-size", 3));
|
||||
hikariConfig.setMinimumIdle(datasourceConfig.getInt("minimum-idle", 1));
|
||||
long keepAliveTime = datasourceConfig.getLong("keep-alive-time", 0);
|
||||
if (keepAliveTime > 5000) {
|
||||
hikariConfig.setKeepaliveTime(keepAliveTime);
|
||||
}
|
||||
hikariConfig.setIdleTimeout(datasourceConfig.getLong("idle-timeout", 10 * 60 * 1000));
|
||||
hikariConfig.setMaxLifetime(datasourceConfig.getLong("max-lifetime", 30 * 60 * 1000));
|
||||
hikariConfig.setValidationTimeout(datasourceConfig.getLong("validation-timeout", 5000));
|
||||
hikariConfig.setPoolName("HamsterBall-Pool");
|
||||
return new HikariDataSource(hikariConfig);
|
||||
} catch (Exception | Error e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user