feat: 完成 SimpleLogger

This commit is contained in:
2024-07-06 13:31:29 +08:00
parent a0ae6ec550
commit b6e6641041
20 changed files with 338 additions and 308 deletions

View File

@@ -11,11 +11,13 @@ import cn.hamster3.mc.plugin.core.bukkit.listener.CallbackListener;
import cn.hamster3.mc.plugin.core.bukkit.listener.DebugListener; import cn.hamster3.mc.plugin.core.bukkit.listener.DebugListener;
import cn.hamster3.mc.plugin.core.bukkit.page.handler.PageHandler; import cn.hamster3.mc.plugin.core.bukkit.page.handler.PageHandler;
import cn.hamster3.mc.plugin.core.bukkit.page.listener.PageListener; import cn.hamster3.mc.plugin.core.bukkit.page.listener.PageListener;
import cn.hamster3.mc.plugin.core.bukkit.util.BukkitSimpleLogger;
import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion; import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection; import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig; import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import cn.hamster3.mc.plugin.core.common.util.UpdateCheckUtils; import cn.hamster3.mc.plugin.core.common.util.UpdateCheckUtils;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Getter; import lombok.Getter;
import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -34,12 +36,13 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.StandardCopyOption; import java.nio.file.StandardCopyOption;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger;
public class HamsterCorePlugin extends JavaPlugin { public class HamsterCorePlugin extends JavaPlugin {
@Getter @Getter
private static HamsterCorePlugin instance; private static HamsterCorePlugin instance;
@Getter @Getter
private static BukkitSimpleLogger simpleLogger;
@Getter
private BukkitAudiences audienceProvider; private BukkitAudiences audienceProvider;
/** /**
@@ -67,15 +70,15 @@ public class HamsterCorePlugin extends JavaPlugin {
@Override @Override
public void onLoad() { public void onLoad() {
instance = this; instance = this;
simpleLogger = new BukkitSimpleLogger(getInstance());
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
Logger logger = getLogger(); simpleLogger.info("仓鼠核心正在初始化");
logger.info("仓鼠核心正在初始化"); simpleLogger.info("Minecraft 版本: " + MinecraftVersion.getMCVersion());
logger.info("Minecraft 版本: " + MinecraftVersion.getMCVersion()); simpleLogger.info("NMS 版本: " + MinecraftVersion.getNMSVersion());
logger.info("NMS 版本: " + MinecraftVersion.getNMSVersion());
try { try {
File dataFolder = getDataFolder(); File dataFolder = getDataFolder();
if (dataFolder.mkdir()) { if (dataFolder.mkdir()) {
logger.info("已生成插件存档文件夹"); simpleLogger.info("已生成插件存档文件夹");
} }
File configFile = new File(dataFolder, "config.yml"); File configFile = new File(dataFolder, "config.yml");
if (!configFile.exists()) { if (!configFile.exists()) {
@@ -86,53 +89,55 @@ public class HamsterCorePlugin extends JavaPlugin {
} }
} }
CoreBukkitAPI.init(configFile); CoreBukkitAPI.init(configFile);
logger.info("已初始化 CoreAPI"); simpleLogger.info("已初始化 CoreAPI");
} catch (Exception e) { } catch (Exception e) {
logger.log(Level.WARNING, "初始化 CoreAPI 出错", e); simpleLogger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
} }
CoreMessage.init(this); CoreMessage.init(this);
logger.info("已初始化语言文本"); simpleLogger.info("已初始化语言文本");
long time = System.currentTimeMillis() - start; long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms"); simpleLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
} }
@Override @Override
public void onEnable() { public void onEnable() {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
Logger logger = getLogger(); simpleLogger.info("仓鼠核心正在启动");
logger.info("仓鼠核心正在启动");
audienceProvider = BukkitAudiences.create(this); audienceProvider = BukkitAudiences.create(this);
logger.info("已创建 AudienceProvider"); simpleLogger.info("已创建 AudienceProvider");
CoreCommand.INSTANCE.register(); CoreCommand.INSTANCE.register();
LoreCommand.INSTANCE.register(); LoreCommand.INSTANCE.register();
NBTCommand.INSTANCE.register(); NBTCommand.INSTANCE.register();
Bukkit.getPluginManager().registerEvents(PageListener.INSTANCE, this); Bukkit.getPluginManager().registerEvents(PageListener.INSTANCE, this);
logger.info("已注册 PageListener"); simpleLogger.info("已注册 PageListener");
Bukkit.getPluginManager().registerEvents(CallbackListener.INSTANCE, this); Bukkit.getPluginManager().registerEvents(CallbackListener.INSTANCE, this);
logger.info("已注册 CallbackListener"); simpleLogger.info("已注册 CallbackListener");
Bukkit.getPluginManager().registerEvents(DebugListener.INSTANCE, this); Bukkit.getPluginManager().registerEvents(DebugListener.INSTANCE, this);
logger.info("已注册 DebugListener"); simpleLogger.info("已注册 DebugListener");
long time = System.currentTimeMillis() - start; long time = System.currentTimeMillis() - start;
sync(() -> { sync(() -> {
PointAPI.reloadPlayerPointAPIHook(); PointAPI.reloadPlayerPointAPIHook();
VaultAPI.reloadVaultHook(); VaultAPI.reloadVaultHook();
async(this::checkUpdate); async(this::checkUpdate);
}); });
logger.info("仓鼠核心启动完成,总计耗时 " + time + " ms"); simpleLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
} }
@Override @Override
public void onDisable() { public void onDisable() {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
Logger logger = getLogger(); if (CoreAPI.getInstance().isEnableRedis()) {
CoreAPI.getInstance().getJedisPool().close(); CoreAPI.getInstance().getJedisPool().close();
logger.info("已关闭 Redis 连接池"); simpleLogger.info("已关闭 Redis 连接池");
CoreAPI.getInstance().getHikariDataSource().close(); }
logger.info("已关闭数据库连接池"); if (CoreAPI.getInstance().isEnableDatabase()) {
((HikariDataSource) CoreAPI.getInstance().getDataSource()).close();
simpleLogger.info("已关闭数据库连接池");
}
CoreAPI.getInstance().getExecutorService().shutdownNow(); CoreAPI.getInstance().getExecutorService().shutdownNow();
logger.info("已关闭 ExecutorService 线程池"); simpleLogger.info("已关闭 ExecutorService 线程池");
CoreAPI.getInstance().getScheduledService().shutdownNow(); CoreAPI.getInstance().getScheduledService().shutdownNow();
logger.info("已关闭 ScheduledExecutorService 线程池"); simpleLogger.info("已关闭 ScheduledExecutorService 线程池");
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
InventoryView view = player.getOpenInventory(); InventoryView view = player.getOpenInventory();
Inventory inventory = view.getTopInventory(); Inventory inventory = view.getTopInventory();
@@ -141,9 +146,9 @@ public class HamsterCorePlugin extends JavaPlugin {
} }
player.closeInventory(); player.closeInventory();
} }
logger.info("已关闭所有玩家的界面"); simpleLogger.info("已关闭所有玩家的界面");
long time = System.currentTimeMillis() - start; long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心已关闭,总计耗时 " + time + " ms"); simpleLogger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
} }
private void checkUpdate() { private void checkUpdate() {

View File

@@ -3,6 +3,7 @@ package cn.hamster3.mc.plugin.core.bukkit.api;
import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.bukkit.impl.ItemStackAdapter; import cn.hamster3.mc.plugin.core.bukkit.impl.ItemStackAdapter;
import cn.hamster3.mc.plugin.core.bukkit.impl.PotionEffectAdapter; import cn.hamster3.mc.plugin.core.bukkit.impl.PotionEffectAdapter;
import cn.hamster3.mc.plugin.core.bukkit.util.BukkitSimpleLogger;
import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion; import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection; import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
@@ -20,7 +21,6 @@ import org.jetbrains.annotations.NotNull;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Logger;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public final class CoreBukkitAPI extends CoreAPI { public final class CoreBukkitAPI extends CoreAPI {
@@ -62,8 +62,8 @@ public final class CoreBukkitAPI extends CoreAPI {
} }
@Override @Override
public @NotNull Logger getLogger() { public @NotNull BukkitSimpleLogger getLogger() {
return HamsterCorePlugin.getInstance().getLogger(); return HamsterCorePlugin.getSimpleLogger();
} }
@Override @Override

View File

@@ -78,13 +78,13 @@ public class YamlCommand extends ChildCommand {
config.set("test-item", stack); config.set("test-item", stack);
File dataFolder = new File(HamsterCorePlugin.getInstance().getDataFolder(), "yaml"); File dataFolder = new File(HamsterCorePlugin.getInstance().getDataFolder(), "yaml");
if (dataFolder.mkdirs()) { if (dataFolder.mkdirs()) {
HamsterCorePlugin.getInstance().getLogger().info("创建 yaml 存档文件夹"); HamsterCorePlugin.getSimpleLogger().info("创建 yaml 存档文件夹");
} }
File saveFile = new File(dataFolder, sender.getName() + "_" + System.currentTimeMillis() + ".yml"); File saveFile = new File(dataFolder, sender.getName() + "_" + System.currentTimeMillis() + ".yml");
try { try {
config.save(saveFile); config.save(saveFile);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); HamsterCorePlugin.getSimpleLogger().error(e);
} }
sender.sendMessage("§a信息已保存至文件 " + saveFile.getAbsolutePath()); sender.sendMessage("§a信息已保存至文件 " + saveFile.getAbsolutePath());
return true; return true;

View File

@@ -20,7 +20,7 @@ public class EconomyAPI {
* @return true代表安装了false代表未安装 * @return true代表安装了false代表未安装
*/ */
public static boolean isSetupEconomy() { public static boolean isSetupEconomy() {
return VaultAPI.isSetupVault() && VaultAPI.getEconomy() != null; return VaultAPI.isVaultEnabled() && VaultAPI.getEconomy() != null;
} }
/** /**

View File

@@ -1,6 +1,7 @@
package cn.hamster3.mc.plugin.core.bukkit.hook; package cn.hamster3.mc.plugin.core.bukkit.hook;
import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin;
import lombok.Getter;
import org.black_ixx.playerpoints.PlayerPoints; import org.black_ixx.playerpoints.PlayerPoints;
import org.black_ixx.playerpoints.PlayerPointsAPI; import org.black_ixx.playerpoints.PlayerPointsAPI;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -14,6 +15,7 @@ import java.util.UUID;
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class PointAPI { public class PointAPI {
@Getter
private static PlayerPointsAPI playerPointsAPI; private static PlayerPointsAPI playerPointsAPI;
private PointAPI() { private PointAPI() {
@@ -25,20 +27,11 @@ public class PointAPI {
public static void reloadPlayerPointAPIHook() { public static void reloadPlayerPointAPIHook() {
Plugin plugin = Bukkit.getPluginManager().getPlugin("PlayerPoints"); Plugin plugin = Bukkit.getPluginManager().getPlugin("PlayerPoints");
if (plugin == null) { if (plugin == null) {
HamsterCorePlugin.getInstance().getLogger().warning("未检测到 PlayerPointAPI 插件"); HamsterCorePlugin.getSimpleLogger().warn("未检测到 PlayerPointAPI 插件");
return; return;
} }
playerPointsAPI = ((PlayerPoints) plugin).getAPI(); playerPointsAPI = ((PlayerPoints) plugin).getAPI();
HamsterCorePlugin.getInstance().getLogger().info("PlayerPointAPI 挂接成功"); HamsterCorePlugin.getSimpleLogger().info("PlayerPointAPI 挂接成功");
}
/**
* 获取 PlayerPointsAPI 实例
*
* @return PlayerPointsAPI 实例
*/
public static PlayerPointsAPI getPlayerPointsAPI() {
return playerPointsAPI;
} }
/** /**

View File

@@ -1,22 +1,27 @@
package cn.hamster3.mc.plugin.core.bukkit.hook; package cn.hamster3.mc.plugin.core.bukkit.hook;
import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.bukkit.util.BukkitSimpleLogger;
import lombok.Getter;
import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.chat.Chat;
import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission; import net.milkbowl.vault.permission.Permission;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.RegisteredServiceProvider;
import java.util.logging.Logger;
/** /**
* Vault API * Vault API
*/ */
@Getter
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class VaultAPI { public class VaultAPI {
@Getter
private static boolean vaultEnabled; private static boolean vaultEnabled;
@Getter
private static Chat chat; private static Chat chat;
@Getter
private static Economy economy; private static Economy economy;
@Getter
private static Permission permission; private static Permission permission;
private VaultAPI() { private VaultAPI() {
@@ -27,9 +32,9 @@ public class VaultAPI {
economy = null; economy = null;
permission = null; permission = null;
vaultEnabled = Bukkit.getPluginManager().isPluginEnabled("Vault"); vaultEnabled = Bukkit.getPluginManager().isPluginEnabled("Vault");
Logger logger = HamsterCorePlugin.getInstance().getLogger(); BukkitSimpleLogger logger = HamsterCorePlugin.getSimpleLogger();
if (!vaultEnabled) { if (!vaultEnabled) {
logger.warning("未检测到 Vault 插件"); logger.warn("未检测到 Vault 插件");
return; return;
} }
logger.info("已连接 Vault"); logger.info("已连接 Vault");
@@ -40,7 +45,7 @@ public class VaultAPI {
chat = chatProvider.getProvider(); chat = chatProvider.getProvider();
logger.info("聊天系统挂接成功"); logger.info("聊天系统挂接成功");
} else { } else {
logger.warning("未检测到聊天系统"); logger.warn("未检测到聊天系统");
} }
RegisteredServiceProvider<Economy> economyProvider = Bukkit.getServer().getServicesManager().getRegistration(Economy.class); RegisteredServiceProvider<Economy> economyProvider = Bukkit.getServer().getServicesManager().getRegistration(Economy.class);
@@ -48,7 +53,7 @@ public class VaultAPI {
economy = economyProvider.getProvider(); economy = economyProvider.getProvider();
logger.info("经济系统挂接成功"); logger.info("经济系统挂接成功");
} else { } else {
logger.warning("未检测到经济系统"); logger.warn("未检测到经济系统");
} }
RegisteredServiceProvider<Permission> permissionProvider = Bukkit.getServer().getServicesManager().getRegistration(Permission.class); RegisteredServiceProvider<Permission> permissionProvider = Bukkit.getServer().getServicesManager().getRegistration(Permission.class);
@@ -56,45 +61,9 @@ public class VaultAPI {
permission = permissionProvider.getProvider(); permission = permissionProvider.getProvider();
logger.info("权限系统挂接成功"); logger.info("权限系统挂接成功");
} else { } else {
logger.warning("未检测到权限插件"); logger.warn("未检测到权限插件");
} }
logger.info("已完成 VaultAPI 挂载"); logger.info("已完成 VaultAPI 挂载");
} }
/**
* 返回服务器是否安装了 Vault 插件
*
* @return true 代表服务器已安装
*/
public static boolean isSetupVault() {
return vaultEnabled;
}
/**
* 返回 Vault 的 Chat 前置系统
*
* @return Chat 系统
*/
public static Chat getChat() {
return chat;
}
/**
* 返回 Vault 的 Economy 前置系统
*
* @return Economy 系统
*/
public static Economy getEconomy() {
return economy;
}
/**
* 返回 Vault 的 Permission 前置系统
*
* @return Permission 系统
*/
public static Permission getPermission() {
return permission;
}
} }

View File

@@ -188,8 +188,8 @@ public class ButtonGroup {
@Override @Override
public String toString() { public String toString() {
return "ButtonGroup{" + return "ButtonGroup{" +
"name='" + name + '\'' + "name='" + name + '\'' +
", buttonNameMap=" + buttonNameMap + ", buttonNameMap=" + buttonNameMap +
'}'; '}';
} }
} }

View File

@@ -98,8 +98,7 @@ public class PageConfig implements InventoryHolder {
try { try {
buttonSounds.put(key, Sound.valueOf(soundName)); buttonSounds.put(key, Sound.valueOf(soundName));
} catch (Exception e) { } catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning("初始化 PageConfig 时遇到了一个异常:"); HamsterCorePlugin.getSimpleLogger().error(e, "初始化 PageConfig 时遇到了一个异常: ");
e.printStackTrace();
} }
} }
} }
@@ -197,10 +196,10 @@ public class PageConfig implements InventoryHolder {
@Override @Override
public String toString() { public String toString() {
return "PageConfig{" + return "PageConfig{" +
", title='" + title + '\'' + ", title='" + title + '\'' +
", graphic=" + graphic + ", graphic=" + graphic +
", buttonMap=" + buttons + ", buttonMap=" + buttons +
", buttonGroups=" + buttonGroups + ", buttonGroups=" + buttonGroups +
'}'; '}';
} }
} }

View File

@@ -39,8 +39,7 @@ public class PageListener implements Listener {
try { try {
pageHandler.onClick(event); pageHandler.onClick(event);
} catch (Exception e) { } catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning(String.format("执行 %s 的 onClick(event) 时遇到了一个异常: ", pageHandler.getClass().getName())); HamsterCorePlugin.getSimpleLogger().warn(e, "执行 %s 的 onClick(event) 时遇到了一个异常: ", pageHandler.getClass().getName());
e.printStackTrace();
} }
if (event.isCancelled()) { if (event.isCancelled()) {
return; return;
@@ -55,31 +54,29 @@ public class PageListener implements Listener {
try { try {
pageHandler.onClickInside(event); pageHandler.onClickInside(event);
} catch (Exception e) { } catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning(String.format("执行 %s 的 onClickInside(event) 时遇到了一个异常: ", pageHandler.getClass().getName())); HamsterCorePlugin.getSimpleLogger().warn(e, "执行 %s 的 onClickInside(event) 时遇到了一个异常: ", pageHandler.getClass().getName());
e.printStackTrace();
} }
try { try {
pageHandler.onClickInside(event.getClick(), event.getAction(), index); pageHandler.onClickInside(event.getClick(), event.getAction(), index);
} catch (Exception e) { } catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning(String.format( HamsterCorePlugin.getSimpleLogger().warn(e,
"执行 %s 的 onClickInside(%s, %s, %d) 时遇到了一个异常: ", "执行 %s 的 onClickInside(%s, %s, %d) 时遇到了一个异常: ",
pageHandler.getClass().getName(), pageHandler.getClass().getName(),
event.getClick().name(), event.getClick().name(),
event.getAction().name(), event.getAction().name(),
index index
)); );
e.printStackTrace();
} }
try { try {
pageHandler.onPlayButtonSound(event.getClick(), event.getAction(), index); pageHandler.onPlayButtonSound(event.getClick(), event.getAction(), index);
} catch (Exception e) { } catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning(String.format( HamsterCorePlugin.getSimpleLogger().warn(e,
"执行 %s 的 onPlayButtonSound(%s, %s, %d) 时遇到了一个异常: ", "执行 %s 的 onPlayButtonSound(%s, %s, %d) 时遇到了一个异常: ",
pageHandler.getClass().getName(), pageHandler.getClass().getName(),
event.getClick().name(), event.getClick().name(),
event.getAction().name(), event.getAction().name(),
index index
)); );
} }
} }
@@ -93,8 +90,7 @@ public class PageListener implements Listener {
try { try {
pageHandler.onDrag(event); pageHandler.onDrag(event);
} catch (Exception e) { } catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning(String.format("执行 %s 的 onDrag(event) 时遇到了一个异常: ", pageHandler.getClass().getName())); HamsterCorePlugin.getSimpleLogger().warn(e, "执行 %s 的 onDrag(event) 时遇到了一个异常: ", pageHandler.getClass().getName());
e.printStackTrace();
} }
if (event.isCancelled()) { if (event.isCancelled()) {
return; return;

View File

@@ -0,0 +1,38 @@
package cn.hamster3.mc.plugin.core.bukkit.util;
import cn.hamster3.mc.plugin.core.common.util.SimpleLogger;
import lombok.Getter;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.util.logging.Level;
import java.util.logging.Logger;
@Getter
@SuppressWarnings("unused")
public class BukkitSimpleLogger extends SimpleLogger {
@NotNull
private final Plugin plugin;
@NotNull
private final Logger logger;
public BukkitSimpleLogger(@NotNull Plugin plugin) {
this.plugin = plugin;
logger = plugin.getLogger();
}
@Override
public void log(@NotNull Level level, @NotNull String msg) {
logger.log(level, msg);
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable) {
logger.log(level, "", throwable);
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg) {
logger.log(level, msg, throwable);
}
}

View File

@@ -1,3 +1,6 @@
# 是否启用 redis 连接池功能
enable-redis: false
# redis 连接配置 # redis 连接配置
# 完整格式如下: # 完整格式如下:
# redis://用户名:密码@主机名:端口/数据库索引?参数名=参数值&参数名=参数值 # redis://用户名:密码@主机名:端口/数据库索引?参数名=参数值&参数名=参数值
@@ -8,6 +11,10 @@
# 若不设置数据库,则默认使用 0 # 若不设置数据库,则默认使用 0
redis-url: "redis://localhost:6379/0?clientName=HamsterCore&timeout=5s" redis-url: "redis://localhost:6379/0?clientName=HamsterCore&timeout=5s"
# 是否启用数据库连接池功能
enable-database: false
# 数据库连接池配置
datasource: datasource:
# 数据库链接驱动地址旧版服务端低于1.13请使用com.mysql.jdbc.Driver # 数据库链接驱动地址旧版服务端低于1.13请使用com.mysql.jdbc.Driver
driver: "com.mysql.cj.jdbc.Driver" driver: "com.mysql.cj.jdbc.Driver"

View File

@@ -1,10 +1,12 @@
package cn.hamster3.mc.plugin.core.bungee; package cn.hamster3.mc.plugin.core.bungee;
import cn.hamster3.mc.plugin.core.bungee.api.CoreBungeeAPI; import cn.hamster3.mc.plugin.core.bungee.api.CoreBungeeAPI;
import cn.hamster3.mc.plugin.core.bungee.util.BungeeSimpleLogger;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection; import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig; import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import cn.hamster3.mc.plugin.core.common.util.UpdateCheckUtils; import cn.hamster3.mc.plugin.core.common.util.UpdateCheckUtils;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Getter; import lombok.Getter;
import net.kyori.adventure.platform.bungeecord.BungeeAudiences; import net.kyori.adventure.platform.bungeecord.BungeeAudiences;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
@@ -18,24 +20,25 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.StandardCopyOption; import java.nio.file.StandardCopyOption;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger;
public class HamsterCorePlugin extends Plugin { public class HamsterCorePlugin extends Plugin {
@Getter @Getter
private static HamsterCorePlugin instance; private static HamsterCorePlugin instance;
@Getter @Getter
private static BungeeSimpleLogger simpleLogger;
@Getter
private BungeeAudiences audienceProvider; private BungeeAudiences audienceProvider;
@Override @Override
public void onLoad() { public void onLoad() {
instance = this; instance = this;
simpleLogger = new BungeeSimpleLogger(this);
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
Logger logger = getLogger(); simpleLogger.info("仓鼠核心正在初始化");
logger.info("仓鼠核心正在初始化");
try { try {
File dataFolder = getDataFolder(); File dataFolder = getDataFolder();
if (dataFolder.mkdir()) { if (dataFolder.mkdir()) {
logger.info("已生成插件存档文件夹"); simpleLogger.info("已生成插件存档文件夹");
} }
File configFile = new File(dataFolder, "config.yml"); File configFile = new File(dataFolder, "config.yml");
if (!configFile.exists()) { if (!configFile.exists()) {
@@ -46,40 +49,42 @@ public class HamsterCorePlugin extends Plugin {
} }
} }
CoreBungeeAPI.init(configFile); CoreBungeeAPI.init(configFile);
logger.info("已初始化 CoreAPI"); simpleLogger.info("已初始化 CoreAPI");
} catch (Exception e) { } catch (Exception e) {
logger.log(Level.WARNING, "初始化 CoreAPI 出错", e); simpleLogger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
} }
long time = System.currentTimeMillis() - start; long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms"); simpleLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
} }
@Override @Override
public void onEnable() { public void onEnable() {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
Logger logger = getLogger(); simpleLogger.info("仓鼠核心正在启动");
logger.info("仓鼠核心正在启动");
audienceProvider = BungeeAudiences.create(this); audienceProvider = BungeeAudiences.create(this);
logger.info("已创建 AudienceProvider"); simpleLogger.info("已创建 AudienceProvider");
CoreAPI.getInstance().getExecutorService().submit(this::checkUpdate); CoreAPI.getInstance().getExecutorService().submit(this::checkUpdate);
long time = System.currentTimeMillis() - start; long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心启动完成,总计耗时 " + time + " ms"); simpleLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
} }
@Override @Override
public void onDisable() { public void onDisable() {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
Logger logger = getLogger(); if (CoreAPI.getInstance().isEnableRedis()) {
CoreAPI.getInstance().getJedisPool().close(); CoreAPI.getInstance().getJedisPool().close();
logger.info("已关闭 Redis 连接池"); simpleLogger.info("已关闭 Redis 连接池");
CoreAPI.getInstance().getHikariDataSource().close(); }
logger.info("已关闭数据库连接池"); if (CoreAPI.getInstance().isEnableDatabase()) {
((HikariDataSource) CoreAPI.getInstance().getDataSource()).close();
simpleLogger.info("已关闭数据库连接池");
}
CoreAPI.getInstance().getExecutorService().shutdownNow(); CoreAPI.getInstance().getExecutorService().shutdownNow();
logger.info("已关闭 ExecutorService 线程池"); simpleLogger.info("已关闭 ExecutorService 线程池");
CoreAPI.getInstance().getScheduledService().shutdownNow(); CoreAPI.getInstance().getScheduledService().shutdownNow();
logger.info("已关闭 ScheduledExecutorService 线程池"); simpleLogger.info("已关闭 ScheduledExecutorService 线程池");
long time = System.currentTimeMillis() - start; long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心已关闭,总计耗时 " + time + " ms"); simpleLogger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
} }
private void checkUpdate() { private void checkUpdate() {

View File

@@ -1,6 +1,7 @@
package cn.hamster3.mc.plugin.core.bungee.api; package cn.hamster3.mc.plugin.core.bungee.api;
import cn.hamster3.mc.plugin.core.bungee.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bungee.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.bungee.util.BungeeSimpleLogger;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection; import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig; import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
@@ -15,7 +16,6 @@ import org.jetbrains.annotations.NotNull;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Logger;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public final class CoreBungeeAPI extends CoreAPI { public final class CoreBungeeAPI extends CoreAPI {
@@ -51,8 +51,8 @@ public final class CoreBungeeAPI extends CoreAPI {
} }
@Override @Override
public @NotNull Logger getLogger() { public @NotNull BungeeSimpleLogger getLogger() {
return HamsterCorePlugin.getInstance().getLogger(); return HamsterCorePlugin.getSimpleLogger();
} }
@Override @Override

View File

@@ -1,100 +0,0 @@
package cn.hamster3.mc.plugin.core.bungee.util;
import lombok.Getter;
import net.md_5.bungee.api.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
@Getter
@SuppressWarnings("unused")
public class BungeePluginLogger {
@NotNull
private final Plugin plugin;
@NotNull
private final Logger logger;
public BungeePluginLogger(@NotNull Plugin plugin) {
this.plugin = plugin;
logger = plugin.getLogger();
}
public void log(@NotNull Level level, @NotNull String msg) {
logger.log(level, msg);
}
public void log(@NotNull Level level, @NotNull String msg, @NotNull Object... args) {
try {
logger.log(level, String.format(msg, args));
} catch (Exception e) {
logger.log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
logger.log(Level.WARNING, "日志参数: " + Arrays.toString(args));
logger.log(Level.WARNING, "异常信息: ", e);
}
}
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg) {
logger.log(level, msg, throwable);
}
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg, @NotNull Object... args) {
try {
logger.log(level, String.format(msg, args), throwable);
} catch (Exception e) {
logger.log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
logger.log(Level.WARNING, "日志参数: " + Arrays.toString(args));
logger.log(Level.WARNING, "异常参数: ", throwable);
logger.log(Level.WARNING, "异常信息: ", e);
}
}
public void info(@NotNull String msg) {
log(Level.INFO, msg);
}
public void info(@NotNull String msg, @NotNull Object... args) {
log(Level.INFO, msg, args);
}
public void info(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.INFO, throwable, msg);
}
public void info(@NotNull Throwable throwable, @NotNull String msg, @NotNull Object... args) {
log(Level.INFO, throwable, msg, args);
}
public void warn(@NotNull String msg) {
log(Level.WARNING, msg);
}
public void warn(@NotNull String msg, @NotNull Object... args) {
log(Level.WARNING, msg, args);
}
public void warn(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.WARNING, throwable, msg);
}
public void warn(@NotNull Throwable throwable, @NotNull String msg, @NotNull Object... args) {
log(Level.WARNING, throwable, msg, args);
}
public void error(@NotNull String msg) {
log(Level.SEVERE, msg);
}
public void error(@NotNull String msg, @NotNull Object... args) {
log(Level.SEVERE, msg, args);
}
public void error(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.SEVERE, throwable, msg);
}
public void error(@NotNull Throwable throwable, @NotNull String msg, @NotNull Object... args) {
log(Level.SEVERE, throwable, msg, args);
}
}

View File

@@ -0,0 +1,38 @@
package cn.hamster3.mc.plugin.core.bungee.util;
import cn.hamster3.mc.plugin.core.common.util.SimpleLogger;
import lombok.Getter;
import net.md_5.bungee.api.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.util.logging.Level;
import java.util.logging.Logger;
@Getter
@SuppressWarnings("unused")
public class BungeeSimpleLogger extends SimpleLogger {
@NotNull
private final Plugin plugin;
@NotNull
private final Logger logger;
public BungeeSimpleLogger(@NotNull Plugin plugin) {
this.plugin = plugin;
logger = plugin.getLogger();
}
@Override
public void log(@NotNull Level level, @NotNull String msg) {
logger.log(level, msg);
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable) {
logger.log(level, "", throwable);
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg) {
logger.log(level, msg, throwable);
}
}

View File

@@ -3,11 +3,13 @@ package cn.hamster3.mc.plugin.core.common.api;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection; import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
import cn.hamster3.mc.plugin.core.common.thread.NamedThreadFactory; import cn.hamster3.mc.plugin.core.common.thread.NamedThreadFactory;
import cn.hamster3.mc.plugin.core.common.util.CoreUtils; import cn.hamster3.mc.plugin.core.common.util.CoreUtils;
import cn.hamster3.mc.plugin.core.common.util.SimpleLogger;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
import lombok.Getter; import lombok.Getter;
import net.kyori.adventure.platform.AudienceProvider; import net.kyori.adventure.platform.AudienceProvider;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPool;
import javax.sql.DataSource; import javax.sql.DataSource;
@@ -16,50 +18,62 @@ import java.sql.SQLException;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.logging.Logger;
@Getter
@SuppressWarnings("unused") @SuppressWarnings("unused")
public abstract class CoreAPI { public abstract class CoreAPI {
@Getter @Getter
protected static CoreAPI instance; protected static CoreAPI instance;
/** private final boolean enableRedis;
* Redis 连接池 private final boolean enableDatabase;
*/
@Getter
@NotNull
private final JedisPool jedisPool;
/**
* 公用数据库连接池
*/
@Getter
@NotNull
private final HikariDataSource hikariDataSource;
/** /**
* 异步线程池 * 异步线程池
*/ */
@Getter @NotNull
private final ExecutorService executorService; private final ExecutorService executorService;
/** /**
* 调度器线程池 * 调度器线程池
*/ */
@Getter @NotNull
private final ScheduledExecutorService scheduledService; private final ScheduledExecutorService scheduledService;
/**
* 公用 Redis 连接池
*/
@Nullable
private JedisPool jedisPool;
/**
* 公用数据库连接池
*/
@Nullable
private HikariDataSource hikariDataSource;
public CoreAPI(@NotNull ConfigSection config) { public CoreAPI(@NotNull ConfigSection config) {
SimpleLogger logger = getLogger();
executorService = Executors.newCachedThreadPool(new NamedThreadFactory("HamsterCore - Executor")); executorService = Executors.newCachedThreadPool(new NamedThreadFactory("HamsterCore - Executor"));
scheduledService = Executors.newScheduledThreadPool(1, new NamedThreadFactory("HamsterCore - Scheduler")); scheduledService = Executors.newScheduledThreadPool(1, new NamedThreadFactory("HamsterCore - Scheduler"));
logger.info("已创建线程池");
getLogger().info("正在创建 Redis 连接池"); enableRedis = config.getBoolean("enable-redis", true);
jedisPool = new JedisPool(config.getString("redis-url")); if (enableRedis) {
getLogger().info("Redis 连接池创建完成"); logger.info("正在创建 Redis 连接池");
jedisPool = new JedisPool(config.getString("redis-url"));
ConfigSection datasourceConfig = config.getSection("datasource"); logger.info("Redis 连接池创建完成");
if (datasourceConfig == null) { } else {
throw new IllegalArgumentException("配置文件中未找到 datasource 节点"); logger.info("未启用 Redis 功能");
}
enableDatabase = config.getBoolean("enable-database", true);
if (enableDatabase) {
ConfigSection datasourceConfig = config.getSection("datasource");
if (datasourceConfig == null) {
throw new IllegalArgumentException("配置文件中未找到 datasource 节点");
}
logger.info("正在创建数据库连接池");
hikariDataSource = (HikariDataSource) CoreUtils.getDataSource(datasourceConfig);
logger.info("数据库连接池创建完成");
} else {
logger.info("未启用数据库功能");
} }
getLogger().info("正在创建数据库连接池");
hikariDataSource = (HikariDataSource) CoreUtils.getDataSource(datasourceConfig);
getLogger().info("数据库连接池创建完成");
} }
/** /**
@@ -69,7 +83,10 @@ public abstract class CoreAPI {
*/ */
@NotNull @NotNull
public DataSource getDataSource() { public DataSource getDataSource() {
return hikariDataSource; if (hikariDataSource != null) {
return hikariDataSource;
}
throw new IllegalStateException("仓鼠核心未启用数据库功能");
} }
/** /**
@@ -84,7 +101,15 @@ public abstract class CoreAPI {
} }
@NotNull @NotNull
public abstract Logger getLogger(); public JedisPool getJedisPool() {
if (jedisPool != null) {
return jedisPool;
}
throw new IllegalStateException("仓鼠核心未启用 Redis 功能");
}
@NotNull
public abstract SimpleLogger getLogger();
/** /**
* @return GSON 工具 * @return GSON 工具

View File

@@ -1,52 +1,38 @@
package cn.hamster3.mc.plugin.core.bukkit.util; package cn.hamster3.mc.plugin.core.common.util;
import lombok.Getter; import lombok.Getter;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Arrays; import java.util.Arrays;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger;
@Getter @Getter
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class BukkitPluginLogger { public abstract class SimpleLogger {
@NotNull public abstract void log(@NotNull Level level, @NotNull String msg);
private final Plugin plugin;
@NotNull
private final Logger logger;
public BukkitPluginLogger(@NotNull Plugin plugin) { public abstract void log(@NotNull Level level, @NotNull Throwable throwable);
this.plugin = plugin;
logger = plugin.getLogger();
}
public void log(@NotNull Level level, @NotNull String msg) { public abstract void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg);
logger.log(level, msg);
}
public void log(@NotNull Level level, @NotNull String msg, @NotNull Object... args) { public void log(@NotNull Level level, @NotNull String msg, @NotNull Object... args) {
try { try {
logger.log(level, String.format(msg, args)); log(level, String.format(msg, args));
} catch (Exception e) { } catch (Exception e) {
logger.log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常"); log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
logger.log(Level.WARNING, "日志参数: " + Arrays.toString(args)); log(Level.WARNING, "日志参数: " + Arrays.toString(args));
logger.log(Level.WARNING, "异常信息: ", e); log(Level.WARNING, "异常信息: ", e);
} }
} }
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg) {
logger.log(level, msg, throwable);
}
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg, @NotNull Object... args) { public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg, @NotNull Object... args) {
try { try {
logger.log(level, String.format(msg, args), throwable); log(level, String.format(msg, args), throwable);
} catch (Exception e) { } catch (Exception e) {
logger.log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常"); log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
logger.log(Level.WARNING, "日志参数: " + Arrays.toString(args)); log(Level.WARNING, "日志参数: " + Arrays.toString(args));
logger.log(Level.WARNING, "异常参数: ", throwable); log(Level.WARNING, "异常参数: ", throwable);
logger.log(Level.WARNING, "异常信息: ", e); log(Level.WARNING, "异常信息: ", e);
} }
} }
@@ -58,6 +44,10 @@ public class BukkitPluginLogger {
log(Level.INFO, msg, args); log(Level.INFO, msg, args);
} }
public void info(@NotNull Throwable throwable) {
log(Level.INFO, throwable);
}
public void info(@NotNull Throwable throwable, @NotNull String msg) { public void info(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.INFO, throwable, msg); log(Level.INFO, throwable, msg);
} }
@@ -74,6 +64,10 @@ public class BukkitPluginLogger {
log(Level.WARNING, msg, args); log(Level.WARNING, msg, args);
} }
public void warn(@NotNull Throwable throwable) {
log(Level.WARNING, throwable);
}
public void warn(@NotNull Throwable throwable, @NotNull String msg) { public void warn(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.WARNING, throwable, msg); log(Level.WARNING, throwable, msg);
} }
@@ -90,6 +84,10 @@ public class BukkitPluginLogger {
log(Level.SEVERE, msg, args); log(Level.SEVERE, msg, args);
} }
public void error(@NotNull Throwable throwable) {
log(Level.SEVERE, throwable);
}
public void error(@NotNull Throwable throwable, @NotNull String msg) { public void error(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.SEVERE, throwable, msg); log(Level.SEVERE, throwable, msg);
} }

View File

@@ -4,6 +4,7 @@ import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig; import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import cn.hamster3.mc.plugin.core.common.util.UpdateCheckUtils; import cn.hamster3.mc.plugin.core.common.util.UpdateCheckUtils;
import cn.hamster3.mc.plugin.core.velocity.api.CoreVelocityAPI; import cn.hamster3.mc.plugin.core.velocity.api.CoreVelocityAPI;
import cn.hamster3.mc.plugin.core.velocity.util.VelocitySimpleLogger;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.velocitypowered.api.event.PostOrder; import com.velocitypowered.api.event.PostOrder;
import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.Subscribe;
@@ -36,25 +37,22 @@ public class HamsterCorePlugin {
@Getter @Getter
private static HamsterCorePlugin instance; private static HamsterCorePlugin instance;
@Getter @Getter
private final java.util.logging.Logger logger; private final VelocitySimpleLogger simpleLogger;
@Getter
private final Logger slf4jLogger;
@Getter @Getter
private final ProxyServer proxyServer; private final ProxyServer proxyServer;
@Getter @Getter
private final File dataFolder; private final File dataFolder;
@Inject @Inject
public HamsterCorePlugin(Logger slf4jLogger, ProxyServer proxyServer, @DataDirectory Path dataPath) { public HamsterCorePlugin(Logger logger, ProxyServer proxyServer, @DataDirectory Path dataPath) {
logger = java.util.logging.Logger.getLogger("hamster-core"); this.simpleLogger = new VelocitySimpleLogger(logger);
this.slf4jLogger = slf4jLogger;
this.proxyServer = proxyServer; this.proxyServer = proxyServer;
dataFolder = dataPath.toFile(); dataFolder = dataPath.toFile();
instance = this; instance = this;
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
try { try {
if (dataFolder.mkdir()) { if (dataFolder.mkdir()) {
slf4jLogger.info("已生成插件存档文件夹"); simpleLogger.info("已生成插件存档文件夹");
} }
File configFile = new File(dataFolder, "config.yml"); File configFile = new File(dataFolder, "config.yml");
if (!configFile.exists()) { if (!configFile.exists()) {
@@ -65,38 +63,40 @@ public class HamsterCorePlugin {
} }
} }
CoreVelocityAPI.init(configFile); CoreVelocityAPI.init(configFile);
slf4jLogger.info("已初始化 CoreAPI"); simpleLogger.info("已初始化 CoreAPI");
} catch (Exception e) { } catch (Exception e) {
slf4jLogger.error("初始化 CoreAPI 出错", e); simpleLogger.error("初始化 CoreAPI 出错", e);
} }
long time = System.currentTimeMillis() - start; long time = System.currentTimeMillis() - start;
slf4jLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms"); simpleLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
} }
@Subscribe(order = PostOrder.FIRST) @Subscribe(order = PostOrder.FIRST)
public void onProxyInitialization(ProxyInitializeEvent event) { public void onProxyInitialization(ProxyInitializeEvent event) {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
slf4jLogger.info("仓鼠核心正在启动"); simpleLogger.info("仓鼠核心正在启动");
CoreAPI.getInstance().getExecutorService().submit(this::checkUpdate); CoreAPI.getInstance().getExecutorService().submit(this::checkUpdate);
long time = System.currentTimeMillis() - start; long time = System.currentTimeMillis() - start;
slf4jLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms"); simpleLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
} }
@Subscribe(order = PostOrder.LAST) @Subscribe(order = PostOrder.LAST)
public void onProxyShutdown(ProxyShutdownEvent event) { public void onProxyShutdown(ProxyShutdownEvent event) {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
CoreAPI.getInstance().getJedisPool().close(); if (CoreAPI.getInstance().isEnableRedis()) {
slf4jLogger.info("已关闭 Redis 连接池"); CoreAPI.getInstance().getJedisPool().close();
if (CoreAPI.getInstance().getDataSource() instanceof HikariDataSource dataSource) { simpleLogger.info("已关闭 Redis 连接池");
dataSource.close(); }
slf4jLogger.info("已关闭数据库连接池"); if (CoreAPI.getInstance().isEnableDatabase()) {
((HikariDataSource) CoreAPI.getInstance().getDataSource()).close();
simpleLogger.info("已关闭数据库连接池");
} }
CoreAPI.getInstance().getExecutorService().shutdownNow(); CoreAPI.getInstance().getExecutorService().shutdownNow();
slf4jLogger.info("已关闭 ExecutorService 线程池"); simpleLogger.info("已关闭 ExecutorService 线程池");
CoreAPI.getInstance().getScheduledService().shutdownNow(); CoreAPI.getInstance().getScheduledService().shutdownNow();
slf4jLogger.info("已关闭 ScheduledExecutorService 线程池"); simpleLogger.info("已关闭 ScheduledExecutorService 线程池");
long time = System.currentTimeMillis() - start; long time = System.currentTimeMillis() - start;
slf4jLogger.info("仓鼠核心关闭完成,总计耗时 " + time + " ms"); simpleLogger.info("仓鼠核心关闭,总计耗时 " + time + " ms");
} }
private void checkUpdate() { private void checkUpdate() {

View File

@@ -8,6 +8,7 @@ import cn.hamster3.mc.plugin.core.common.impl.ComponentTypeAdapter;
import cn.hamster3.mc.plugin.core.common.impl.MessageTypeAdapter; import cn.hamster3.mc.plugin.core.common.impl.MessageTypeAdapter;
import cn.hamster3.mc.plugin.core.velocity.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.velocity.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.velocity.impl.AudienceProviderImpl; import cn.hamster3.mc.plugin.core.velocity.impl.AudienceProviderImpl;
import cn.hamster3.mc.plugin.core.velocity.util.VelocitySimpleLogger;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import net.kyori.adventure.platform.AudienceProvider; import net.kyori.adventure.platform.AudienceProvider;
@@ -16,7 +17,6 @@ import org.jetbrains.annotations.NotNull;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Logger;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public final class CoreVelocityAPI extends CoreAPI { public final class CoreVelocityAPI extends CoreAPI {
@@ -57,8 +57,8 @@ public final class CoreVelocityAPI extends CoreAPI {
} }
@Override @Override
public @NotNull Logger getLogger() { public @NotNull VelocitySimpleLogger getLogger() {
return HamsterCorePlugin.getInstance().getLogger(); return HamsterCorePlugin.getInstance().getSimpleLogger();
} }
@Override @Override

View File

@@ -0,0 +1,57 @@
package cn.hamster3.mc.plugin.core.velocity.util;
import cn.hamster3.mc.plugin.core.common.util.SimpleLogger;
import lombok.Getter;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import java.util.logging.Level;
@Getter
public class VelocitySimpleLogger extends SimpleLogger {
@NotNull
private final Logger logger;
public VelocitySimpleLogger(@NotNull Logger logger) {
this.logger = logger;
}
@Override
public void log(@NotNull Level level, @NotNull String msg) {
if (level == Level.INFO) {
logger.info(msg);
} else if (level == Level.WARNING) {
logger.warn(msg);
} else if (level == Level.SEVERE) {
logger.error(msg);
} else {
logger.trace(msg);
}
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable) {
if (level == Level.INFO) {
logger.info("", throwable);
} else if (level == Level.WARNING) {
logger.warn("", throwable);
} else if (level == Level.SEVERE) {
logger.error("", throwable);
} else {
logger.trace("", throwable);
}
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg) {
if (level == Level.INFO) {
logger.info(msg, throwable);
} else if (level == Level.WARNING) {
logger.warn(msg, throwable);
} else if (level == Level.SEVERE) {
logger.error(msg, throwable);
} else {
logger.trace(msg, throwable);
}
}
}