perf: 精简代码
This commit is contained in:
@@ -4,7 +4,7 @@ dependencies {
|
||||
implementation(project(":core-common")) {
|
||||
isTransitive = false
|
||||
}
|
||||
compileOnly("org.spigotmc:spigot-api:1.20.2-R0.1-SNAPSHOT")
|
||||
compileOnly("org.spigotmc:spigot-api:1.20.4-R0.1-SNAPSHOT")
|
||||
|
||||
implementation("de.tr7zw:item-nbt-api:2.12.3-SNAPSHOT")
|
||||
compileOnly("net.milkbowl.vault:VaultAPI:1.7") {
|
||||
|
@@ -23,6 +23,7 @@ import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@SuppressWarnings("CallToPrintStackTrace")
|
||||
@@ -56,17 +57,19 @@ public class HamsterCorePlugin extends JavaPlugin {
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
instance = this;
|
||||
long start = System.currentTimeMillis();
|
||||
Logger logger = getLogger();
|
||||
logger.info("仓鼠核心正在初始化");
|
||||
logger.info("Minecraft 版本: " + MinecraftVersion.getMCVersion());
|
||||
logger.info("nms 版本: " + MinecraftVersion.getNMSVersion());
|
||||
instance = this;
|
||||
saveDefaultConfig();
|
||||
reloadConfig();
|
||||
logger.info("已读取配置文件");
|
||||
logger.info("NMS 版本: " + MinecraftVersion.getNMSVersion());
|
||||
try {
|
||||
CoreBukkitAPI.init();
|
||||
File dataFolder = getDataFolder();
|
||||
if (dataFolder.mkdir()) {
|
||||
logger.info("已生成插件存档文件夹");
|
||||
}
|
||||
File file = new File(dataFolder, "config.yml");
|
||||
CoreBukkitAPI.init(file);
|
||||
logger.info("已初始化 CoreAPI");
|
||||
} catch (Exception e) {
|
||||
logger.warning("初始化 CoreAPI 出错");
|
||||
@@ -108,7 +111,7 @@ public class HamsterCorePlugin extends JavaPlugin {
|
||||
Logger logger = getLogger();
|
||||
CoreAPI.getInstance().getRedisClient().close();
|
||||
logger.info("已关闭 Redis 连接池");
|
||||
CoreBukkitAPI.getInstance().getDataSource().close();
|
||||
CoreAPI.getInstance().getHikariDataSource().close();
|
||||
logger.info("已关闭数据库连接池");
|
||||
CoreAPI.getInstance().getExecutorService().shutdownNow();
|
||||
logger.info("已关闭 ExecutorService 线程池");
|
||||
|
@@ -5,35 +5,32 @@ 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.util.MinecraftVersion;
|
||||
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.YamlConfig;
|
||||
import cn.hamster3.mc.plugin.core.common.data.DisplayMessage;
|
||||
import cn.hamster3.mc.plugin.core.common.impl.ComponentTypeAdapter;
|
||||
import cn.hamster3.mc.plugin.core.common.impl.MessageTypeAdapter;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.zaxxer.hikari.HikariConfig;
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
import de.tr7zw.changeme.nbtapi.utils.nmsmappings.ClassWrapper;
|
||||
import io.lettuce.core.RedisClient;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class CoreBukkitAPI extends CoreAPI {
|
||||
@NotNull
|
||||
private final Gson gson;
|
||||
@NotNull
|
||||
private final Gson humanGson;
|
||||
@NotNull
|
||||
private final RedisClient redisClient;
|
||||
@NotNull
|
||||
private final HikariDataSource datasource;
|
||||
|
||||
private CoreBukkitAPI() {
|
||||
private CoreBukkitAPI(@NotNull ConfigSection config) {
|
||||
super(config);
|
||||
gson = new GsonBuilder()
|
||||
.registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE)
|
||||
.registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE)
|
||||
@@ -45,67 +42,28 @@ public final class CoreBukkitAPI extends CoreAPI {
|
||||
.registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE)
|
||||
.registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE)
|
||||
.registerTypeAdapter(ItemStack.class, ItemStackAdapter.INSTANCE)
|
||||
.registerTypeAdapter(ClassWrapper.CRAFT_ITEMSTACK.getClazz(), ItemStackAdapter.INSTANCE)
|
||||
.registerTypeAdapter(MinecraftVersion.getCraftBukkitClassSilent("inventory.CraftItemStack"), ItemStackAdapter.INSTANCE)
|
||||
.registerTypeAdapter(PotionEffect.class, PotionEffectAdapter.INSTANCE)
|
||||
.serializeNulls()
|
||||
.setPrettyPrinting()
|
||||
.create();
|
||||
|
||||
HamsterCorePlugin plugin = HamsterCorePlugin.getInstance();
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
|
||||
HamsterCorePlugin.getInstance().getLogger().info("正在创建 redis 客户端");
|
||||
redisClient = RedisClient.create(config.getString("redis-url"));
|
||||
HamsterCorePlugin.getInstance().getLogger().info("redis 客户端创建完成");
|
||||
|
||||
ConfigurationSection datasourceConfig = config.getConfigurationSection("datasource");
|
||||
if (datasourceConfig == null) {
|
||||
throw new IllegalArgumentException("配置文件中未找到 datasource 节点");
|
||||
}
|
||||
HamsterCorePlugin.getInstance().getLogger().info("正在创建数据库连接池");
|
||||
HikariConfig hikariConfig = new HikariConfig();
|
||||
hikariConfig.setDriverClassName(datasourceConfig.getString("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("HamsterCore-Pool");
|
||||
datasource = new HikariDataSource(hikariConfig);
|
||||
HamsterCorePlugin.getInstance().getLogger().info("数据库连接池创建完成");
|
||||
}
|
||||
|
||||
public static CoreBukkitAPI getInstance() {
|
||||
return (CoreBukkitAPI) instance;
|
||||
}
|
||||
|
||||
public static void init() {
|
||||
public static void init(@NotNull File configFile) throws IOException {
|
||||
if (instance != null) {
|
||||
return;
|
||||
}
|
||||
instance = new CoreBukkitAPI();
|
||||
YamlConfig config = YamlConfig.load(configFile);
|
||||
instance = new CoreBukkitAPI(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull BukkitAudiences getAudienceProvider() {
|
||||
return HamsterCorePlugin.getInstance().getAudienceProvider();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull HikariDataSource getDataSource() {
|
||||
return datasource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull RedisClient getRedisClient() {
|
||||
return redisClient;
|
||||
public @NotNull Logger getLogger() {
|
||||
return HamsterCorePlugin.getInstance().getLogger();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -117,4 +75,9 @@ public final class CoreBukkitAPI extends CoreAPI {
|
||||
public @NotNull Gson getHumanGson() {
|
||||
return humanGson;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull BukkitAudiences getAudienceProvider() {
|
||||
return HamsterCorePlugin.getInstance().getAudienceProvider();
|
||||
}
|
||||
}
|
||||
|
@@ -74,7 +74,7 @@ public enum CoreMessage {
|
||||
public static void init(@NotNull Plugin plugin) {
|
||||
File dataFolder = plugin.getDataFolder();
|
||||
if (dataFolder.mkdirs()) {
|
||||
plugin.getLogger().info("已生成插件存档文件夹 " + dataFolder.getName());
|
||||
plugin.getLogger().info("已生成插件存档文件夹");
|
||||
}
|
||||
File file = new File(dataFolder, "messages.yml");
|
||||
YamlConfiguration config = new YamlConfiguration();
|
||||
|
@@ -307,7 +307,7 @@ public final class CoreBukkitUtils {
|
||||
File file = new File(plugin.getDataFolder(), filename);
|
||||
File parentFile = file.getParentFile();
|
||||
if (parentFile.mkdirs()) {
|
||||
plugin.getLogger().info("已生成插件存档文件夹 " + parentFile.getName());
|
||||
plugin.getLogger().info("已生成插件存档文件夹");
|
||||
}
|
||||
if (!file.exists()) {
|
||||
plugin.getLogger().info("生成配置文件: " + filename);
|
||||
@@ -367,6 +367,7 @@ public final class CoreBukkitUtils {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@SuppressWarnings("deprecation")
|
||||
public static JsonObject serializePotionEffect(@NotNull PotionEffect effect) {
|
||||
JsonObject object = new JsonObject();
|
||||
object.addProperty("type", effect.getType().getName());
|
||||
@@ -376,6 +377,7 @@ public final class CoreBukkitUtils {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@SuppressWarnings("deprecation")
|
||||
public static PotionEffect deserializePotionEffect(@NotNull JsonObject object) {
|
||||
//noinspection ConstantConditions
|
||||
return new PotionEffect(
|
||||
|
@@ -22,7 +22,7 @@ public class MinecraftVersion {
|
||||
}
|
||||
|
||||
/**
|
||||
* 与当前服务端运行的 mc 版本号对比
|
||||
* 与当前服务端运行的 Minecraft 版本号对比
|
||||
* <p>
|
||||
* 1: 当前版本高于输入版本号
|
||||
* <p>
|
||||
|
Reference in New Issue
Block a user