feat: 优化日志
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# [HamsterBall](https://gitee.com/MiniDay/hamster-ball)
|
# [HamsterBall](https://gitee.com/MiniDay/hamster-ball)
|
||||||
|
|
||||||
仓鼠球:一个基于 Netty 的 Minecraft 服务端通用消息中间件(原HamsterService)
|
仓鼠球:一个基于 Redis 的 Minecraft 服务端通用消息中间件(原HamsterService)
|
||||||
|
|
||||||
该插件依赖于 [仓鼠核心](https://gitee.com/MiniDay/hamster-core)
|
该插件依赖于 [仓鼠核心](https://gitee.com/MiniDay/hamster-core)
|
||||||
|
|
||||||
|
@@ -28,21 +28,33 @@ public class HamsterBallPlugin extends JavaPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
instance = this;
|
long start = System.currentTimeMillis();
|
||||||
Logger logger = getLogger();
|
Logger logger = getLogger();
|
||||||
|
logger.info("仓鼠球正在初始化...");
|
||||||
|
instance = this;
|
||||||
|
saveDefaultConfig();
|
||||||
|
reloadConfig();
|
||||||
|
logger.info("已读取配置文件.");
|
||||||
try {
|
try {
|
||||||
BallBukkitAPI.init();
|
BallBukkitAPI.init();
|
||||||
logger.info("BallBukkitAPI 已初始化.");
|
logger.info("已初始化 BallAPI.");
|
||||||
BallBukkitAPI.getInstance().enable();
|
|
||||||
logger.info("BallBukkitAPI 已启动.");
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
long time = System.currentTimeMillis() - start;
|
||||||
|
logger.info("仓鼠球初始化完成,总计耗时 " + time + " ms.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
Logger logger = getLogger();
|
Logger logger = getLogger();
|
||||||
|
logger.info("仓鼠球正在启动...");
|
||||||
|
try {
|
||||||
|
BallBukkitAPI.getInstance().enable();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
if (!BallAPI.getInstance().isEnabled()) {
|
if (!BallAPI.getInstance().isEnabled()) {
|
||||||
sync(() -> {
|
sync(() -> {
|
||||||
logger.info("由于 HamsterBall 未能成功连接, 服务器将立即关闭.");
|
logger.info("由于 HamsterBall 未能成功连接, 服务器将立即关闭.");
|
||||||
@@ -57,21 +69,27 @@ public class HamsterBallPlugin extends JavaPlugin {
|
|||||||
ServerOnlineEvent.ACTION,
|
ServerOnlineEvent.ACTION,
|
||||||
new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo())
|
new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo())
|
||||||
);
|
);
|
||||||
logger.info("HamsterBall 已启动.");
|
|
||||||
sync(() -> {
|
sync(() -> {
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
PlaceholderHook.INSTANCE.register();
|
PlaceholderHook.INSTANCE.register();
|
||||||
logger.info("已挂载 PlaceholderAPI 变量!");
|
logger.info("已挂载 PlaceholderAPI 变量!");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
long time = System.currentTimeMillis() - start;
|
||||||
|
logger.info("仓鼠球启动完成,总计耗时 " + time + " ms.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
Logger logger = getLogger();
|
||||||
|
logger.info("仓鼠球正在关闭...");
|
||||||
try {
|
try {
|
||||||
BallBukkitAPI.getInstance().disable();
|
BallBukkitAPI.getInstance().disable();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
long time = System.currentTimeMillis() - start;
|
||||||
|
logger.info("仓鼠球已关闭,总计耗时 " + time + " ms.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -65,7 +65,15 @@ public class BallBukkitAPI extends BallAPI {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
DataSource datasource = BallBukkitUtils.getDataSource(config.getConfigurationSection("datasource"));
|
DataSource datasource;
|
||||||
|
if (config.contains("datasource")) {
|
||||||
|
plugin.getLogger().info("检测到配置文件中包含 datasource 节点,启用自定义数据库连接.");
|
||||||
|
datasource = BallBukkitUtils.getDataSource(config.getConfigurationSection("datasource"));
|
||||||
|
}else {
|
||||||
|
plugin.getLogger().info("未检测到配置文件中的 datasource 节点,复用 HamsterCore 数据库连接.");
|
||||||
|
datasource = CoreAPI.getInstance().getDataSource();
|
||||||
|
}
|
||||||
|
|
||||||
File redissionConfig = new File(plugin.getDataFolder(), "redission.yml");
|
File redissionConfig = new File(plugin.getDataFolder(), "redission.yml");
|
||||||
if (!redissionConfig.exists()) {
|
if (!redissionConfig.exists()) {
|
||||||
Files.copy(
|
Files.copy(
|
||||||
|
@@ -5,7 +5,7 @@ api-version: 1.13
|
|||||||
|
|
||||||
author: MiniDay
|
author: MiniDay
|
||||||
website: https://gitee.com/MiniDay/hamster-ball
|
website: https://gitee.com/MiniDay/hamster-ball
|
||||||
description: 仓鼠球:一个基于 Netty 的 Minecraft 服务端通用消息中间件(原HamsterService)
|
description: 仓鼠球:一个基于 Redis 的 Minecraft 服务端通用消息中间件(原HamsterService)
|
||||||
|
|
||||||
load: STARTUP
|
load: STARTUP
|
||||||
|
|
||||||
|
@@ -15,6 +15,8 @@ dependencies {
|
|||||||
exclude(group = "org.yaml")
|
exclude(group = "org.yaml")
|
||||||
exclude(group = "org.slf4j")
|
exclude(group = "org.slf4j")
|
||||||
}
|
}
|
||||||
|
// https://mvnrepository.com/artifact/io.netty/netty-resolver-dns
|
||||||
|
implementation("io.netty:netty-resolver-dns:4.1.96.Final")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -20,22 +20,31 @@ public class HamsterBallPlugin extends Plugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
instance = this;
|
long start = System.currentTimeMillis();
|
||||||
Logger logger = getLogger();
|
Logger logger = getLogger();
|
||||||
|
logger.info("仓鼠球正在初始化...");
|
||||||
|
instance = this;
|
||||||
try {
|
try {
|
||||||
BallBungeeCordAPI.init();
|
BallBungeeCordAPI.init();
|
||||||
logger.info("BallBungeeCordAPI 已初始化.");
|
logger.info("已初始化 BallAPI.");
|
||||||
BallBungeeCordAPI.getInstance().enable();
|
|
||||||
logger.info("BallBungeeCordAPI 已启动.");
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
ProxyServer.getInstance().stop();
|
ProxyServer.getInstance().stop();
|
||||||
}
|
}
|
||||||
|
long time = System.currentTimeMillis() - start;
|
||||||
|
logger.info("仓鼠球初始化完成,总计耗时 " + time + " ms.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
Logger logger = getLogger();
|
Logger logger = getLogger();
|
||||||
|
logger.info("仓鼠球正在启动...");
|
||||||
|
try {
|
||||||
|
BallBungeeCordAPI.getInstance().enable();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
if (!BallAPI.getInstance().isEnabled()) {
|
if (!BallAPI.getInstance().isEnabled()) {
|
||||||
ProxyServer.getInstance().stop("由于 HamsterBall 未能成功连接, 服务器将立即关闭.");
|
ProxyServer.getInstance().stop("由于 HamsterBall 未能成功连接, 服务器将立即关闭.");
|
||||||
return;
|
return;
|
||||||
@@ -47,7 +56,6 @@ public class HamsterBallPlugin extends Plugin {
|
|||||||
ServerOnlineEvent.ACTION,
|
ServerOnlineEvent.ACTION,
|
||||||
new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo())
|
new ServerOnlineEvent(BallAPI.getInstance().getLocalServerInfo())
|
||||||
);
|
);
|
||||||
logger.info("HamsterBall 已启动.");
|
|
||||||
BallAPI.getInstance().getAllPlayerInfo().values()
|
BallAPI.getInstance().getAllPlayerInfo().values()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(BallPlayerInfo::isOnline)
|
.filter(BallPlayerInfo::isOnline)
|
||||||
@@ -56,14 +64,22 @@ public class HamsterBallPlugin extends Plugin {
|
|||||||
playerInfo.setOnline(false);
|
playerInfo.setOnline(false);
|
||||||
BallBungeeCordUtils.uploadPlayerInfo(playerInfo);
|
BallBungeeCordUtils.uploadPlayerInfo(playerInfo);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
long time = System.currentTimeMillis() - start;
|
||||||
|
logger.info("仓鼠球启动完成,总计耗时 " + time + " ms.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
Logger logger = getLogger();
|
||||||
|
logger.info("仓鼠球正在关闭...");
|
||||||
try {
|
try {
|
||||||
BallBungeeCordAPI.getInstance().disable();
|
BallBungeeCordAPI.getInstance().disable();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
long time = System.currentTimeMillis() - start;
|
||||||
|
logger.info("仓鼠球已关闭,总计耗时 " + time + " ms.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -61,7 +61,15 @@ public class BallBungeeCordAPI extends BallAPI {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
DataSource datasource = BallBungeeCordUtils.getDataSource(config.getSection("datasource"));
|
DataSource datasource;
|
||||||
|
if (config.contains("datasource")) {
|
||||||
|
plugin.getLogger().info("检测到配置文件中包含 datasource 节点,启用自定义数据库连接.");
|
||||||
|
datasource = BallBungeeCordUtils.getDataSource(config.getSection("datasource"));
|
||||||
|
}else {
|
||||||
|
plugin.getLogger().info("未检测到配置文件中的 datasource 节点,复用 HamsterCore 数据库连接.");
|
||||||
|
datasource = CoreAPI.getInstance().getDataSource();
|
||||||
|
}
|
||||||
|
|
||||||
File redissionConfig = new File(plugin.getDataFolder(), "redission.yml");
|
File redissionConfig = new File(plugin.getDataFolder(), "redission.yml");
|
||||||
if (!redissionConfig.exists()) {
|
if (!redissionConfig.exists()) {
|
||||||
Files.copy(
|
Files.copy(
|
||||||
|
@@ -85,7 +85,7 @@ public final class BallBungeeCordListener implements Listener, BallListener {
|
|||||||
String serverID = event.getLocation().getServerID();
|
String serverID = event.getLocation().getServerID();
|
||||||
ServerInfo serverInfo = ProxyServer.getInstance().getServerInfo(serverID);
|
ServerInfo serverInfo = ProxyServer.getInstance().getServerInfo(serverID);
|
||||||
if (serverInfo == null) {
|
if (serverInfo == null) {
|
||||||
HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 服务器 " + serverID + " 不在线!");
|
HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 服务器 " + serverID + " 不在线!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
for (UUID uuid : event.getSendPlayerUUID()) {
|
for (UUID uuid : event.getSendPlayerUUID()) {
|
||||||
@@ -105,7 +105,7 @@ public final class BallBungeeCordListener implements Listener, BallListener {
|
|||||||
UUID toPlayerUUID = event.getToPlayerUUID();
|
UUID toPlayerUUID = event.getToPlayerUUID();
|
||||||
ProxiedPlayer toPlayer = ProxyServer.getInstance().getPlayer(toPlayerUUID);
|
ProxiedPlayer toPlayer = ProxyServer.getInstance().getPlayer(toPlayerUUID);
|
||||||
if (toPlayer == null) {
|
if (toPlayer == null) {
|
||||||
HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 目标玩家 " + toPlayerUUID + " 不在线!");
|
HamsterBallPlugin.getInstance().getLogger().warning("试图传送玩家时失败: 目标玩家 " + toPlayerUUID + " 不在线!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ServerInfo toServer = toPlayer.getServer().getInfo();
|
ServerInfo toServer = toPlayer.getServer().getInfo();
|
||||||
|
@@ -3,7 +3,7 @@ main: cn.hamster3.mc.plugin.core.bungee.HamsterBallPlugin
|
|||||||
version: ${version}
|
version: ${version}
|
||||||
|
|
||||||
author: MiniDay
|
author: MiniDay
|
||||||
description: 仓鼠球:一个基于 Netty 的 Minecraft 服务端通用消息中间件(原HamsterService)
|
description: 仓鼠球:一个基于 Redis 的 Minecraft 服务端通用消息中间件(原HamsterService)
|
||||||
|
|
||||||
depend:
|
depend:
|
||||||
- HamsterCore
|
- HamsterCore
|
||||||
|
@@ -1,17 +1,16 @@
|
|||||||
# 是否允许在控制台输出调试信息
|
# 是否允许在控制台输出调试信息
|
||||||
debug: false
|
debug: false
|
||||||
|
|
||||||
ball-server:
|
|
||||||
host: "ball.hamster3.cn"
|
|
||||||
port: 58888
|
|
||||||
event-loop-thread: 5
|
|
||||||
|
|
||||||
server-info:
|
server-info:
|
||||||
# 服务器唯一识别码,最长 32 字符
|
# 服务器唯一识别码,最长 32 字符
|
||||||
id: "BungeeCord"
|
id: "BungeeCord"
|
||||||
# 服务端名称,用于展示给玩家看
|
# 服务端名称,用于展示给玩家看
|
||||||
name: "代理端"
|
name: "代理端"
|
||||||
|
# 当前子服的地址
|
||||||
|
# 不填则自动设置为 0.0.0.0
|
||||||
host: 0.0.0.0
|
host: 0.0.0.0
|
||||||
|
# 当前子服端口
|
||||||
|
# 不填则自动设置为 25577
|
||||||
port: 25577
|
port: 25577
|
||||||
|
|
||||||
# 数据库连接池配置
|
# 数据库连接池配置
|
||||||
|
@@ -3,8 +3,9 @@
|
|||||||
dependencies {
|
dependencies {
|
||||||
// https://mvnrepository.com/artifact/com.google.code.gson/gson
|
// https://mvnrepository.com/artifact/com.google.code.gson/gson
|
||||||
compileOnly("com.google.code.gson:gson:2.8.0")
|
compileOnly("com.google.code.gson:gson:2.8.0")
|
||||||
// https://mvnrepository.com/artifact/io.netty/netty-all
|
|
||||||
compileOnly("io.netty:netty-all:4.1.86.Final")
|
// https://mvnrepository.com/artifact/io.netty/netty-buffer
|
||||||
|
compileOnly("io.netty:netty-buffer:4.1.96.Final")
|
||||||
|
|
||||||
val hamsterCoreVersion = property("hamster_core_version")
|
val hamsterCoreVersion = property("hamster_core_version")
|
||||||
compileOnly("cn.hamster3.mc.plugin:core-common:${hamsterCoreVersion}")
|
compileOnly("cn.hamster3.mc.plugin:core-common:${hamsterCoreVersion}")
|
||||||
|
@@ -209,10 +209,10 @@ public abstract class BallAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
enabled = true;
|
|
||||||
|
|
||||||
RTopic topic = getRedissonClient().getTopic(BALL_CHANNEL, BallMessageInfoCodec.INSTANCE);
|
RTopic topic = getRedissonClient().getTopic(BALL_CHANNEL, BallMessageInfoCodec.INSTANCE);
|
||||||
topic.addListener(BallMessageInfo.class, BallMessageListener.INSTANCE);
|
topic.addListener(BallMessageInfo.class, BallMessageListener.INSTANCE);
|
||||||
|
|
||||||
|
enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void disable() throws SQLException, InterruptedException {
|
protected void disable() throws SQLException, InterruptedException {
|
||||||
@@ -233,7 +233,9 @@ public abstract class BallAPI {
|
|||||||
statement.executeUpdate();
|
statement.executeUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
getLogger().info("正在关闭 redission...");
|
||||||
getRedissonClient().shutdown();
|
getRedissonClient().shutdown();
|
||||||
|
getLogger().info("已关闭 redission.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -58,6 +58,12 @@ subprojects {
|
|||||||
"https://bukkit.windit.net/javadoc"
|
"https://bukkit.windit.net/javadoc"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
shadowJar {
|
||||||
|
destinationDirectory = rootProject.buildDir
|
||||||
|
}
|
||||||
|
build {
|
||||||
|
dependsOn(shadowJar)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
|
Reference in New Issue
Block a user