From 271328ef6fd4031b3b951f27fe8eee207feddfbc Mon Sep 17 00:00:00 2001
From: MiniDay <372403923@qq.com>
Date: Fri, 5 Apr 2024 16:18:01 +0800
Subject: [PATCH 01/18] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20CompletableT?=
=?UTF-8?q?ask=20=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 8 +-
build.gradle.kts | 2 +-
.../common/util/async/CompletableTask.java | 164 ++++++++++++++++++
.../core/common/util/async/RunTask.java | 5 +
.../core/common/util/async/SupplyTask.java | 5 +
5 files changed, 179 insertions(+), 5 deletions(-)
create mode 100644 core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/CompletableTask.java
create mode 100644 core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/RunTask.java
create mode 100644 core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/SupplyTask.java
diff --git a/README.md b/README.md
index f1cb78a..716d0a1 100644
--- a/README.md
+++ b/README.md
@@ -26,9 +26,9 @@ repositories {
dependencies {
// 对于 Bukkit 插件
- compileOnly("cn.hamster3.mc.plugin:core-bukkit:1.3.3")
+ compileOnly("cn.hamster3.mc.plugin:core-bukkit:1.3.4-SNAPSHOT")
// 对于 BungeeCord 插件
- compileOnly("cn.hamster3.mc.plugin:core-bungee:1.3.3")
+ compileOnly("cn.hamster3.mc.plugin:core-bungee:1.3.4-SNAPSHOT")
}
```
@@ -54,13 +54,13 @@ dependencies {
cn.hamster3.mc.plugin
core-bukkit
- 1.3.3
+ 1.3.4-SNAPSHOT
cn.hamster3.mc.plugin
core-bungee
- 1.3.3
+ 1.3.4-SNAPSHOT
diff --git a/build.gradle.kts b/build.gradle.kts
index e4a617a..cd64bc6 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -5,7 +5,7 @@ plugins {
}
group = "cn.hamster3.mc.plugin"
-version = "1.3.3"
+version = "1.3.4-SNAPSHOT"
description = "叁只仓鼠的 Minecraft 插件开发通用工具包"
subprojects {
diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/CompletableTask.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/CompletableTask.java
new file mode 100644
index 0000000..0d61f46
--- /dev/null
+++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/CompletableTask.java
@@ -0,0 +1,164 @@
+package cn.hamster3.mc.plugin.core.common.util.async;
+
+import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+
+@SuppressWarnings({"unused", "CallToPrintStackTrace"})
+public class CompletableTask {
+ @NotNull
+ private final List> onSuccess;
+ @NotNull
+ private final List> onFailed;
+ @NotNull
+ private State state;
+ private T value;
+ private Throwable throwable;
+
+ public CompletableTask() {
+ state = State.WAITING;
+ onSuccess = new ArrayList<>();
+ onFailed = new ArrayList<>();
+ }
+
+ @NotNull
+ public static CompletableTask runAsync(@NotNull RunTask runTask) {
+ CompletableTask task = new CompletableTask<>();
+ CoreAPI.getInstance().getExecutorService().submit(() -> {
+ try {
+ runTask.run();
+ task.success(null);
+ } catch (Exception e) {
+ task.failed(e);
+ }
+ });
+ return task;
+ }
+
+ @NotNull
+ public static CompletableTask supplyAsync(@NotNull SupplyTask supplyTask) {
+ CompletableTask task = new CompletableTask<>();
+ CoreAPI.getInstance().getExecutorService().submit(() -> {
+ try {
+ T call = supplyTask.call();
+ task.success(call);
+ } catch (Exception e) {
+ task.failed(e);
+ }
+ });
+ return task;
+ }
+
+ public void success(@Nullable T value) {
+ if (state != State.WAITING) {
+ throw new IllegalStateException();
+ }
+ this.value = value;
+ state = State.SUCCESS;
+ synchronized (this) {
+ notifyAll();
+ }
+ for (Consumer success : onSuccess) {
+ try {
+ success.accept(value);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public void failed(@Nullable Throwable throwable) {
+ if (state != State.WAITING) {
+ throw new IllegalStateException();
+ }
+ this.value = null;
+ state = State.FAILED;
+ this.throwable = throwable;
+ synchronized (this) {
+ notifyAll();
+ }
+ for (Consumer consumer : onFailed) {
+ try {
+ consumer.accept(throwable);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @NotNull
+ public CompletableTask onSuccess(@NotNull Consumer consumer) {
+ if (state == State.SUCCESS) {
+ try {
+ consumer.accept(value);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+ onSuccess.add(consumer);
+ }
+ return this;
+ }
+
+ @NotNull
+ public CompletableTask onFailed(@NotNull Consumer consumer) {
+ if (state == State.FAILED) {
+ try {
+ consumer.accept(throwable);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+ onFailed.add(consumer);
+ }
+ return this;
+ }
+
+ public T get() throws Throwable {
+ if (state == State.WAITING) {
+ synchronized (this) {
+ try {
+ wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ switch (state) {
+ case SUCCESS:
+ return value;
+ case FAILED:
+ throw throwable;
+ }
+ return null;
+ }
+
+ public T getOrDefault(T defaultValue) {
+ if (state == State.WAITING) {
+ synchronized (this) {
+ try {
+ wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ switch (state) {
+ case SUCCESS:
+ return value;
+ case FAILED:
+ return defaultValue;
+ }
+ return defaultValue;
+ }
+
+ public enum State {
+ WAITING,
+ SUCCESS,
+ FAILED
+ }
+}
diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/RunTask.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/RunTask.java
new file mode 100644
index 0000000..59fd43c
--- /dev/null
+++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/RunTask.java
@@ -0,0 +1,5 @@
+package cn.hamster3.mc.plugin.core.common.util.async;
+
+public interface RunTask {
+ void run() throws Exception;
+}
diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/SupplyTask.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/SupplyTask.java
new file mode 100644
index 0000000..e8cba53
--- /dev/null
+++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/SupplyTask.java
@@ -0,0 +1,5 @@
+package cn.hamster3.mc.plugin.core.common.util.async;
+
+public interface SupplyTask {
+ T call() throws Exception;
+}
From 738b566a2d7bd8b968c7842ab5a22dffd27d77c0 Mon Sep 17 00:00:00 2001
From: MiniDay <372403923@qq.com>
Date: Sat, 29 Jun 2024 01:42:12 +0800
Subject: [PATCH 02/18] =?UTF-8?q?feat(bukkit):=20=E6=94=AF=E6=8C=81=201.20?=
=?UTF-8?q?.6=20=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
core-bukkit/build.gradle.kts | 2 +-
.../core/bukkit/util/MinecraftVersion.java | 35 +++++++++---------
.../common/util/async/CompletableTask.java | 36 +++++--------------
3 files changed, 28 insertions(+), 45 deletions(-)
diff --git a/core-bukkit/build.gradle.kts b/core-bukkit/build.gradle.kts
index c8e8219..b26b17c 100644
--- a/core-bukkit/build.gradle.kts
+++ b/core-bukkit/build.gradle.kts
@@ -29,7 +29,7 @@ dependencies {
api("com.sun.mail:jakarta.mail:2.0.1")
// https://www.spigotmc.org/resources/nbt-api.7939/
- implementation("de.tr7zw:item-nbt-api:2.12.2")
+ implementation("de.tr7zw:item-nbt-api:+")
// https://mvnrepository.com/artifact/com.zaxxer/HikariCP
implementation("com.zaxxer:HikariCP:4.0.3") { exclude(group = "org.slf4j") }
// https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jdk8
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java
index 3b70e19..300ec99 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java
@@ -7,18 +7,18 @@ import org.jetbrains.annotations.NotNull;
@SuppressWarnings("unused")
public class MinecraftVersion {
@Getter
- public static final int Version1;
+ public static final int version1;
@Getter
- public static final int Version2;
+ public static final int version2;
@Getter
- public static final int Version3;
+ public static final int version3;
static {
String version = getMCVersion();
String[] split = version.split("\\.");
- Version1 = Integer.parseInt(split[0]);
- Version2 = Integer.parseInt(split[1]);
- Version3 = split.length >= 3 ? Integer.parseInt(split[2]) : 0;
+ version1 = Integer.parseInt(split[0]);
+ version2 = Integer.parseInt(split[1]);
+ version3 = split.length >= 3 ? Integer.parseInt(split[2]) : 0;
}
/**
@@ -35,18 +35,18 @@ public class MinecraftVersion {
*/
public static int compareTo(@NotNull String version) {
String[] split = version.split("\\.");
- int version1 = Integer.parseInt(split[0]);
- int version2 = Integer.parseInt(split[1]);
- int version3 = split.length >= 3 ? Integer.parseInt(split[2]) : 0;
- int compare = Integer.compare(Version1, version1);
+ int compareVersion1 = Integer.parseInt(split[0]);
+ int compareVersion2 = Integer.parseInt(split[1]);
+ int compareVersion3 = split.length >= 3 ? Integer.parseInt(split[2]) : 0;
+ int compare = Integer.compare(compareVersion1, MinecraftVersion.version1);
if (compare != 0) {
return compare;
}
- compare = Integer.compare(Version2, version2);
+ compare = Integer.compare(compareVersion2, MinecraftVersion.version2);
if (compare != 0) {
return compare;
}
- return Integer.compare(Version3, version3);
+ return Integer.compare(compareVersion3, MinecraftVersion.version3);
}
@NotNull
@@ -61,7 +61,7 @@ public class MinecraftVersion {
@NotNull
public static Class> getNMSClass(@NotNull String className) throws ClassNotFoundException {
- if (Version2 >= 17) {
+ if (version1 >= 1 && version2 >= 17) {
return Class.forName("net.minecraft.server." + className);
}
String nmsVersion = getNMSVersion();
@@ -70,9 +70,8 @@ public class MinecraftVersion {
@NotNull
public static Class> getNMSClassSilent(@NotNull String className) {
- String nmsVersion = getNMSVersion();
try {
- return Class.forName("net.minecraft.server." + nmsVersion + "." + className);
+ return getNMSClass(className);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
@@ -80,15 +79,17 @@ public class MinecraftVersion {
@NotNull
public static Class> getCraftBukkitClass(@NotNull String className) throws ClassNotFoundException {
+ if (version1 >= 1 && version2 >= 20 && version3 >= 6) {
+ return Class.forName("org.bukkit.craftbukkit." + className);
+ }
String nmsVersion = getNMSVersion();
return Class.forName("org.bukkit.craftbukkit." + nmsVersion + "." + className);
}
@NotNull
public static Class> getCraftBukkitClassSilent(@NotNull String className) {
- String nmsVersion = getNMSVersion();
try {
- return Class.forName("org.bukkit.craftbukkit." + nmsVersion + "." + className);
+ return getCraftBukkitClass(className);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/CompletableTask.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/CompletableTask.java
index 0d61f46..61f4c73 100644
--- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/CompletableTask.java
+++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/async/CompletableTask.java
@@ -118,42 +118,24 @@ public class CompletableTask {
return this;
}
- public T get() throws Throwable {
+ public T get() throws InterruptedException {
if (state == State.WAITING) {
synchronized (this) {
- try {
- wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ wait();
}
}
- switch (state) {
- case SUCCESS:
- return value;
- case FAILED:
- throw throwable;
+ if (state == State.SUCCESS) {
+ return value;
}
return null;
}
- public T getOrDefault(T defaultValue) {
- if (state == State.WAITING) {
- synchronized (this) {
- try {
- wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
+ public T join() {
+ try {
+ return get();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
- switch (state) {
- case SUCCESS:
- return value;
- case FAILED:
- return defaultValue;
- }
- return defaultValue;
}
public enum State {
From a0ae6ec550aee32e6b0be532451b4dea54dc755f Mon Sep 17 00:00:00 2001
From: MiniDay <372403923@qq.com>
Date: Wed, 3 Jul 2024 18:02:43 +0800
Subject: [PATCH 03/18] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20PluginLogger?=
=?UTF-8?q?=20=E5=B7=A5=E5=85=B7=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../plugin/core/bukkit/HamsterCorePlugin.java | 4 +-
.../core/bukkit/constant/CoreMessage.java | 11 +-
.../core/bukkit/util/BukkitPluginLogger.java | 100 ++++++++++++++++++
.../plugin/core/bungee/HamsterCorePlugin.java | 5 +-
.../core/bungee/util/BungeePluginLogger.java | 100 ++++++++++++++++++
gradle/wrapper/gradle-wrapper.properties | 2 +-
6 files changed, 209 insertions(+), 13 deletions(-)
create mode 100644 core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitPluginLogger.java
create mode 100644 core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeePluginLogger.java
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java
index 6047a14..48bd531 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java
@@ -33,6 +33,7 @@ import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
+import java.util.logging.Level;
import java.util.logging.Logger;
public class HamsterCorePlugin extends JavaPlugin {
@@ -87,8 +88,7 @@ public class HamsterCorePlugin extends JavaPlugin {
CoreBukkitAPI.init(configFile);
logger.info("已初始化 CoreAPI");
} catch (Exception e) {
- logger.warning("初始化 CoreAPI 出错");
- e.printStackTrace();
+ logger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
}
CoreMessage.init(this);
logger.info("已初始化语言文本");
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java
index 8337548..2879851 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java
@@ -14,6 +14,7 @@ import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
+import java.util.logging.Level;
@Getter
public enum CoreMessage {
@@ -70,7 +71,6 @@ public enum CoreMessage {
this.message = new DisplayMessage().setMessage(message);
}
- @SuppressWarnings("CallToPrintStackTrace")
public static void init(@NotNull Plugin plugin) {
File dataFolder = plugin.getDataFolder();
if (dataFolder.mkdirs()) {
@@ -82,8 +82,7 @@ public enum CoreMessage {
try {
config.load(file);
} catch (Exception e) {
- plugin.getLogger().warning("加载消息配置文件时出现了一个异常:");
- e.printStackTrace();
+ plugin.getLogger().log(Level.WARNING, "加载消息配置文件时出现了一个异常:", e);
}
}
for (CoreMessage value : values()) {
@@ -96,15 +95,13 @@ public enum CoreMessage {
try {
value.message = CoreBukkitUtils.loadDisplayMessage(section);
} catch (Exception e) {
- plugin.getLogger().warning("加载消息设置 " + value.name() + " 时遇到了一个异常: ");
- e.printStackTrace();
+ plugin.getLogger().log(Level.WARNING, "加载消息设置 " + value.name() + " 时遇到了一个异常: ", e);
}
}
try {
config.save(file);
} catch (IOException e) {
- plugin.getLogger().warning("保存消息配置文件时出现了一个异常:");
- e.printStackTrace();
+ plugin.getLogger().log(Level.WARNING, "保存消息配置文件时出现了一个异常:", e);
}
}
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitPluginLogger.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitPluginLogger.java
new file mode 100644
index 0000000..f58517c
--- /dev/null
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitPluginLogger.java
@@ -0,0 +1,100 @@
+package cn.hamster3.mc.plugin.core.bukkit.util;
+
+import lombok.Getter;
+import org.bukkit.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 BukkitPluginLogger {
+ @NotNull
+ private final Plugin plugin;
+ @NotNull
+ private final Logger logger;
+
+ public BukkitPluginLogger(@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);
+ }
+}
diff --git a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java
index 9af906f..bed756f 100644
--- a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java
+++ b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java
@@ -17,9 +17,9 @@ import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
+import java.util.logging.Level;
import java.util.logging.Logger;
-@SuppressWarnings("CallToPrintStackTrace")
public class HamsterCorePlugin extends Plugin {
@Getter
private static HamsterCorePlugin instance;
@@ -48,8 +48,7 @@ public class HamsterCorePlugin extends Plugin {
CoreBungeeAPI.init(configFile);
logger.info("已初始化 CoreAPI");
} catch (Exception e) {
- logger.warning("初始化 CoreAPI 出错");
- e.printStackTrace();
+ logger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
}
long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
diff --git a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeePluginLogger.java b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeePluginLogger.java
new file mode 100644
index 0000000..4a7e8a4
--- /dev/null
+++ b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeePluginLogger.java
@@ -0,0 +1,100 @@
+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);
+ }
+}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index e411586..c893b36 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
+distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
From b6e66410419f7d381c268dabcc973a1aff5d5f7e Mon Sep 17 00:00:00 2001
From: MiniDay <372403923@qq.com>
Date: Sat, 6 Jul 2024 13:31:29 +0800
Subject: [PATCH 04/18] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=20SimpleLogger?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../plugin/core/bukkit/HamsterCorePlugin.java | 57 +++++-----
.../plugin/core/bukkit/api/CoreBukkitAPI.java | 6 +-
.../bukkit/command/core/sub/YamlCommand.java | 4 +-
.../plugin/core/bukkit/hook/EconomyAPI.java | 2 +-
.../mc/plugin/core/bukkit/hook/PointAPI.java | 15 +--
.../mc/plugin/core/bukkit/hook/VaultAPI.java | 57 +++-------
.../plugin/core/bukkit/page/ButtonGroup.java | 6 +-
.../plugin/core/bukkit/page/PageConfig.java | 13 ++-
.../bukkit/page/listener/PageListener.java | 18 ++--
.../core/bukkit/util/BukkitSimpleLogger.java | 38 +++++++
core-bukkit/src/main/resources/config.yml | 7 ++
.../plugin/core/bungee/HamsterCorePlugin.java | 43 ++++----
.../plugin/core/bungee/api/CoreBungeeAPI.java | 6 +-
.../core/bungee/util/BungeePluginLogger.java | 100 ------------------
.../core/bungee/util/BungeeSimpleLogger.java | 38 +++++++
.../mc/plugin/core/common/api/CoreAPI.java | 79 +++++++++-----
.../plugin/core/common/util/SimpleLogger.java | 54 +++++-----
.../core/velocity/HamsterCorePlugin.java | 40 +++----
.../core/velocity/api/CoreVelocityAPI.java | 6 +-
.../velocity/util/VelocitySimpleLogger.java | 57 ++++++++++
20 files changed, 338 insertions(+), 308 deletions(-)
create mode 100644 core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitSimpleLogger.java
delete mode 100644 core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeePluginLogger.java
create mode 100644 core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeeSimpleLogger.java
rename core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitPluginLogger.java => core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/SimpleLogger.java (60%)
create mode 100644 core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/util/VelocitySimpleLogger.java
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java
index 48bd531..e5f842e 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java
@@ -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.page.handler.PageHandler;
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.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.util.UpdateCheckUtils;
+import com.zaxxer.hikari.HikariDataSource;
import lombok.Getter;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.Bukkit;
@@ -34,12 +36,13 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.logging.Level;
-import java.util.logging.Logger;
public class HamsterCorePlugin extends JavaPlugin {
@Getter
private static HamsterCorePlugin instance;
@Getter
+ private static BukkitSimpleLogger simpleLogger;
+ @Getter
private BukkitAudiences audienceProvider;
/**
@@ -67,15 +70,15 @@ public class HamsterCorePlugin extends JavaPlugin {
@Override
public void onLoad() {
instance = this;
+ simpleLogger = new BukkitSimpleLogger(getInstance());
long start = System.currentTimeMillis();
- Logger logger = getLogger();
- logger.info("仓鼠核心正在初始化");
- logger.info("Minecraft 版本: " + MinecraftVersion.getMCVersion());
- logger.info("NMS 版本: " + MinecraftVersion.getNMSVersion());
+ simpleLogger.info("仓鼠核心正在初始化");
+ simpleLogger.info("Minecraft 版本: " + MinecraftVersion.getMCVersion());
+ simpleLogger.info("NMS 版本: " + MinecraftVersion.getNMSVersion());
try {
File dataFolder = getDataFolder();
if (dataFolder.mkdir()) {
- logger.info("已生成插件存档文件夹");
+ simpleLogger.info("已生成插件存档文件夹");
}
File configFile = new File(dataFolder, "config.yml");
if (!configFile.exists()) {
@@ -86,53 +89,55 @@ public class HamsterCorePlugin extends JavaPlugin {
}
}
CoreBukkitAPI.init(configFile);
- logger.info("已初始化 CoreAPI");
+ simpleLogger.info("已初始化 CoreAPI");
} catch (Exception e) {
- logger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
+ simpleLogger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
}
CoreMessage.init(this);
- logger.info("已初始化语言文本");
+ simpleLogger.info("已初始化语言文本");
long time = System.currentTimeMillis() - start;
- logger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
+ simpleLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
}
@Override
public void onEnable() {
long start = System.currentTimeMillis();
- Logger logger = getLogger();
- logger.info("仓鼠核心正在启动");
+ simpleLogger.info("仓鼠核心正在启动");
audienceProvider = BukkitAudiences.create(this);
- logger.info("已创建 AudienceProvider");
+ simpleLogger.info("已创建 AudienceProvider");
CoreCommand.INSTANCE.register();
LoreCommand.INSTANCE.register();
NBTCommand.INSTANCE.register();
Bukkit.getPluginManager().registerEvents(PageListener.INSTANCE, this);
- logger.info("已注册 PageListener");
+ simpleLogger.info("已注册 PageListener");
Bukkit.getPluginManager().registerEvents(CallbackListener.INSTANCE, this);
- logger.info("已注册 CallbackListener");
+ simpleLogger.info("已注册 CallbackListener");
Bukkit.getPluginManager().registerEvents(DebugListener.INSTANCE, this);
- logger.info("已注册 DebugListener");
+ simpleLogger.info("已注册 DebugListener");
long time = System.currentTimeMillis() - start;
sync(() -> {
PointAPI.reloadPlayerPointAPIHook();
VaultAPI.reloadVaultHook();
async(this::checkUpdate);
});
- logger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
+ simpleLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
}
@Override
public void onDisable() {
long start = System.currentTimeMillis();
- Logger logger = getLogger();
- CoreAPI.getInstance().getJedisPool().close();
- logger.info("已关闭 Redis 连接池");
- CoreAPI.getInstance().getHikariDataSource().close();
- logger.info("已关闭数据库连接池");
+ if (CoreAPI.getInstance().isEnableRedis()) {
+ CoreAPI.getInstance().getJedisPool().close();
+ simpleLogger.info("已关闭 Redis 连接池");
+ }
+ if (CoreAPI.getInstance().isEnableDatabase()) {
+ ((HikariDataSource) CoreAPI.getInstance().getDataSource()).close();
+ simpleLogger.info("已关闭数据库连接池");
+ }
CoreAPI.getInstance().getExecutorService().shutdownNow();
- logger.info("已关闭 ExecutorService 线程池");
+ simpleLogger.info("已关闭 ExecutorService 线程池");
CoreAPI.getInstance().getScheduledService().shutdownNow();
- logger.info("已关闭 ScheduledExecutorService 线程池");
+ simpleLogger.info("已关闭 ScheduledExecutorService 线程池");
for (Player player : Bukkit.getOnlinePlayers()) {
InventoryView view = player.getOpenInventory();
Inventory inventory = view.getTopInventory();
@@ -141,9 +146,9 @@ public class HamsterCorePlugin extends JavaPlugin {
}
player.closeInventory();
}
- logger.info("已关闭所有玩家的界面");
+ simpleLogger.info("已关闭所有玩家的界面");
long time = System.currentTimeMillis() - start;
- logger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
+ simpleLogger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
}
private void checkUpdate() {
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/api/CoreBukkitAPI.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/api/CoreBukkitAPI.java
index af17474..645bcc9 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/api/CoreBukkitAPI.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/api/CoreBukkitAPI.java
@@ -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.impl.ItemStackAdapter;
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.common.api.CoreAPI;
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.IOException;
-import java.util.logging.Logger;
@SuppressWarnings("unused")
public final class CoreBukkitAPI extends CoreAPI {
@@ -62,8 +62,8 @@ public final class CoreBukkitAPI extends CoreAPI {
}
@Override
- public @NotNull Logger getLogger() {
- return HamsterCorePlugin.getInstance().getLogger();
+ public @NotNull BukkitSimpleLogger getLogger() {
+ return HamsterCorePlugin.getSimpleLogger();
}
@Override
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/sub/YamlCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/sub/YamlCommand.java
index e8a9ad9..2694777 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/sub/YamlCommand.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/core/sub/YamlCommand.java
@@ -78,13 +78,13 @@ public class YamlCommand extends ChildCommand {
config.set("test-item", stack);
File dataFolder = new File(HamsterCorePlugin.getInstance().getDataFolder(), "yaml");
if (dataFolder.mkdirs()) {
- HamsterCorePlugin.getInstance().getLogger().info("创建 yaml 存档文件夹");
+ HamsterCorePlugin.getSimpleLogger().info("创建 yaml 存档文件夹");
}
File saveFile = new File(dataFolder, sender.getName() + "_" + System.currentTimeMillis() + ".yml");
try {
config.save(saveFile);
} catch (IOException e) {
- e.printStackTrace();
+ HamsterCorePlugin.getSimpleLogger().error(e);
}
sender.sendMessage("§a信息已保存至文件 " + saveFile.getAbsolutePath());
return true;
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/EconomyAPI.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/EconomyAPI.java
index 37a790e..6600a35 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/EconomyAPI.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/EconomyAPI.java
@@ -20,7 +20,7 @@ public class EconomyAPI {
* @return true代表安装了,false代表未安装
*/
public static boolean isSetupEconomy() {
- return VaultAPI.isSetupVault() && VaultAPI.getEconomy() != null;
+ return VaultAPI.isVaultEnabled() && VaultAPI.getEconomy() != null;
}
/**
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/PointAPI.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/PointAPI.java
index 55c78b2..edefe29 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/PointAPI.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/PointAPI.java
@@ -1,6 +1,7 @@
package cn.hamster3.mc.plugin.core.bukkit.hook;
import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin;
+import lombok.Getter;
import org.black_ixx.playerpoints.PlayerPoints;
import org.black_ixx.playerpoints.PlayerPointsAPI;
import org.bukkit.Bukkit;
@@ -14,6 +15,7 @@ import java.util.UUID;
*/
@SuppressWarnings("unused")
public class PointAPI {
+ @Getter
private static PlayerPointsAPI playerPointsAPI;
private PointAPI() {
@@ -25,20 +27,11 @@ public class PointAPI {
public static void reloadPlayerPointAPIHook() {
Plugin plugin = Bukkit.getPluginManager().getPlugin("PlayerPoints");
if (plugin == null) {
- HamsterCorePlugin.getInstance().getLogger().warning("未检测到 PlayerPointAPI 插件");
+ HamsterCorePlugin.getSimpleLogger().warn("未检测到 PlayerPointAPI 插件");
return;
}
playerPointsAPI = ((PlayerPoints) plugin).getAPI();
- HamsterCorePlugin.getInstance().getLogger().info("PlayerPointAPI 挂接成功");
- }
-
- /**
- * 获取 PlayerPointsAPI 实例
- *
- * @return PlayerPointsAPI 实例
- */
- public static PlayerPointsAPI getPlayerPointsAPI() {
- return playerPointsAPI;
+ HamsterCorePlugin.getSimpleLogger().info("PlayerPointAPI 挂接成功");
}
/**
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/VaultAPI.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/VaultAPI.java
index 0c7c12f..df73b29 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/VaultAPI.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/hook/VaultAPI.java
@@ -1,22 +1,27 @@
package cn.hamster3.mc.plugin.core.bukkit.hook;
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.economy.Economy;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.Bukkit;
import org.bukkit.plugin.RegisteredServiceProvider;
-import java.util.logging.Logger;
-
/**
* Vault API
*/
+@Getter
@SuppressWarnings("unused")
public class VaultAPI {
+ @Getter
private static boolean vaultEnabled;
+ @Getter
private static Chat chat;
+ @Getter
private static Economy economy;
+ @Getter
private static Permission permission;
private VaultAPI() {
@@ -27,9 +32,9 @@ public class VaultAPI {
economy = null;
permission = null;
vaultEnabled = Bukkit.getPluginManager().isPluginEnabled("Vault");
- Logger logger = HamsterCorePlugin.getInstance().getLogger();
+ BukkitSimpleLogger logger = HamsterCorePlugin.getSimpleLogger();
if (!vaultEnabled) {
- logger.warning("未检测到 Vault 插件");
+ logger.warn("未检测到 Vault 插件");
return;
}
logger.info("已连接 Vault");
@@ -40,7 +45,7 @@ public class VaultAPI {
chat = chatProvider.getProvider();
logger.info("聊天系统挂接成功");
} else {
- logger.warning("未检测到聊天系统");
+ logger.warn("未检测到聊天系统");
}
RegisteredServiceProvider economyProvider = Bukkit.getServer().getServicesManager().getRegistration(Economy.class);
@@ -48,7 +53,7 @@ public class VaultAPI {
economy = economyProvider.getProvider();
logger.info("经济系统挂接成功");
} else {
- logger.warning("未检测到经济系统");
+ logger.warn("未检测到经济系统");
}
RegisteredServiceProvider permissionProvider = Bukkit.getServer().getServicesManager().getRegistration(Permission.class);
@@ -56,45 +61,9 @@ public class VaultAPI {
permission = permissionProvider.getProvider();
logger.info("权限系统挂接成功");
} else {
- logger.warning("未检测到权限插件");
+ logger.warn("未检测到权限插件");
}
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;
- }
-
-}
+}
\ No newline at end of file
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/ButtonGroup.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/ButtonGroup.java
index 07e59dc..d77ad06 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/ButtonGroup.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/ButtonGroup.java
@@ -188,8 +188,8 @@ public class ButtonGroup {
@Override
public String toString() {
return "ButtonGroup{" +
- "name='" + name + '\'' +
- ", buttonNameMap=" + buttonNameMap +
- '}';
+ "name='" + name + '\'' +
+ ", buttonNameMap=" + buttonNameMap +
+ '}';
}
}
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageConfig.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageConfig.java
index 928f599..9ca0df9 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageConfig.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageConfig.java
@@ -98,8 +98,7 @@ public class PageConfig implements InventoryHolder {
try {
buttonSounds.put(key, Sound.valueOf(soundName));
} catch (Exception e) {
- HamsterCorePlugin.getInstance().getLogger().warning("初始化 PageConfig 时遇到了一个异常:");
- e.printStackTrace();
+ HamsterCorePlugin.getSimpleLogger().error(e, "初始化 PageConfig 时遇到了一个异常: ");
}
}
}
@@ -197,10 +196,10 @@ public class PageConfig implements InventoryHolder {
@Override
public String toString() {
return "PageConfig{" +
- ", title='" + title + '\'' +
- ", graphic=" + graphic +
- ", buttonMap=" + buttons +
- ", buttonGroups=" + buttonGroups +
- '}';
+ ", title='" + title + '\'' +
+ ", graphic=" + graphic +
+ ", buttonMap=" + buttons +
+ ", buttonGroups=" + buttonGroups +
+ '}';
}
}
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/listener/PageListener.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/listener/PageListener.java
index e0a82bc..493be4b 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/listener/PageListener.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/listener/PageListener.java
@@ -39,8 +39,7 @@ public class PageListener implements Listener {
try {
pageHandler.onClick(event);
} catch (Exception e) {
- HamsterCorePlugin.getInstance().getLogger().warning(String.format("执行 %s 的 onClick(event) 时遇到了一个异常: ", pageHandler.getClass().getName()));
- e.printStackTrace();
+ HamsterCorePlugin.getSimpleLogger().warn(e, "执行 %s 的 onClick(event) 时遇到了一个异常: ", pageHandler.getClass().getName());
}
if (event.isCancelled()) {
return;
@@ -55,31 +54,29 @@ public class PageListener implements Listener {
try {
pageHandler.onClickInside(event);
} catch (Exception e) {
- HamsterCorePlugin.getInstance().getLogger().warning(String.format("执行 %s 的 onClickInside(event) 时遇到了一个异常: ", pageHandler.getClass().getName()));
- e.printStackTrace();
+ HamsterCorePlugin.getSimpleLogger().warn(e, "执行 %s 的 onClickInside(event) 时遇到了一个异常: ", pageHandler.getClass().getName());
}
try {
pageHandler.onClickInside(event.getClick(), event.getAction(), index);
} catch (Exception e) {
- HamsterCorePlugin.getInstance().getLogger().warning(String.format(
+ HamsterCorePlugin.getSimpleLogger().warn(e,
"执行 %s 的 onClickInside(%s, %s, %d) 时遇到了一个异常: ",
pageHandler.getClass().getName(),
event.getClick().name(),
event.getAction().name(),
index
- ));
- e.printStackTrace();
+ );
}
try {
pageHandler.onPlayButtonSound(event.getClick(), event.getAction(), index);
} catch (Exception e) {
- HamsterCorePlugin.getInstance().getLogger().warning(String.format(
+ HamsterCorePlugin.getSimpleLogger().warn(e,
"执行 %s 的 onPlayButtonSound(%s, %s, %d) 时遇到了一个异常: ",
pageHandler.getClass().getName(),
event.getClick().name(),
event.getAction().name(),
index
- ));
+ );
}
}
@@ -93,8 +90,7 @@ public class PageListener implements Listener {
try {
pageHandler.onDrag(event);
} catch (Exception e) {
- HamsterCorePlugin.getInstance().getLogger().warning(String.format("执行 %s 的 onDrag(event) 时遇到了一个异常: ", pageHandler.getClass().getName()));
- e.printStackTrace();
+ HamsterCorePlugin.getSimpleLogger().warn(e, "执行 %s 的 onDrag(event) 时遇到了一个异常: ", pageHandler.getClass().getName());
}
if (event.isCancelled()) {
return;
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitSimpleLogger.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitSimpleLogger.java
new file mode 100644
index 0000000..fd0db59
--- /dev/null
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitSimpleLogger.java
@@ -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);
+ }
+}
diff --git a/core-bukkit/src/main/resources/config.yml b/core-bukkit/src/main/resources/config.yml
index 0babd79..f170fbe 100644
--- a/core-bukkit/src/main/resources/config.yml
+++ b/core-bukkit/src/main/resources/config.yml
@@ -1,3 +1,6 @@
+# 是否启用 redis 连接池功能
+enable-redis: false
+
# redis 连接配置
# 完整格式如下:
# redis://用户名:密码@主机名:端口/数据库索引?参数名=参数值&参数名=参数值
@@ -8,6 +11,10 @@
# 若不设置数据库,则默认使用 0
redis-url: "redis://localhost:6379/0?clientName=HamsterCore&timeout=5s"
+# 是否启用数据库连接池功能
+enable-database: false
+
+# 数据库连接池配置
datasource:
# 数据库链接驱动地址,旧版服务端(低于1.13)请使用:com.mysql.jdbc.Driver
driver: "com.mysql.cj.jdbc.Driver"
diff --git a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java
index bed756f..02a4584 100644
--- a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java
+++ b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java
@@ -1,10 +1,12 @@
package cn.hamster3.mc.plugin.core.bungee;
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.config.ConfigSection;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import cn.hamster3.mc.plugin.core.common.util.UpdateCheckUtils;
+import com.zaxxer.hikari.HikariDataSource;
import lombok.Getter;
import net.kyori.adventure.platform.bungeecord.BungeeAudiences;
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.StandardCopyOption;
import java.util.logging.Level;
-import java.util.logging.Logger;
public class HamsterCorePlugin extends Plugin {
@Getter
private static HamsterCorePlugin instance;
@Getter
+ private static BungeeSimpleLogger simpleLogger;
+ @Getter
private BungeeAudiences audienceProvider;
@Override
public void onLoad() {
instance = this;
+ simpleLogger = new BungeeSimpleLogger(this);
long start = System.currentTimeMillis();
- Logger logger = getLogger();
- logger.info("仓鼠核心正在初始化");
+ simpleLogger.info("仓鼠核心正在初始化");
try {
File dataFolder = getDataFolder();
if (dataFolder.mkdir()) {
- logger.info("已生成插件存档文件夹");
+ simpleLogger.info("已生成插件存档文件夹");
}
File configFile = new File(dataFolder, "config.yml");
if (!configFile.exists()) {
@@ -46,40 +49,42 @@ public class HamsterCorePlugin extends Plugin {
}
}
CoreBungeeAPI.init(configFile);
- logger.info("已初始化 CoreAPI");
+ simpleLogger.info("已初始化 CoreAPI");
} catch (Exception e) {
- logger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
+ simpleLogger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
}
long time = System.currentTimeMillis() - start;
- logger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
+ simpleLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
}
@Override
public void onEnable() {
long start = System.currentTimeMillis();
- Logger logger = getLogger();
- logger.info("仓鼠核心正在启动");
+ simpleLogger.info("仓鼠核心正在启动");
audienceProvider = BungeeAudiences.create(this);
- logger.info("已创建 AudienceProvider");
+ simpleLogger.info("已创建 AudienceProvider");
CoreAPI.getInstance().getExecutorService().submit(this::checkUpdate);
long time = System.currentTimeMillis() - start;
- logger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
+ simpleLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
}
@Override
public void onDisable() {
long start = System.currentTimeMillis();
- Logger logger = getLogger();
- CoreAPI.getInstance().getJedisPool().close();
- logger.info("已关闭 Redis 连接池");
- CoreAPI.getInstance().getHikariDataSource().close();
- logger.info("已关闭数据库连接池");
+ if (CoreAPI.getInstance().isEnableRedis()) {
+ CoreAPI.getInstance().getJedisPool().close();
+ simpleLogger.info("已关闭 Redis 连接池");
+ }
+ if (CoreAPI.getInstance().isEnableDatabase()) {
+ ((HikariDataSource) CoreAPI.getInstance().getDataSource()).close();
+ simpleLogger.info("已关闭数据库连接池");
+ }
CoreAPI.getInstance().getExecutorService().shutdownNow();
- logger.info("已关闭 ExecutorService 线程池");
+ simpleLogger.info("已关闭 ExecutorService 线程池");
CoreAPI.getInstance().getScheduledService().shutdownNow();
- logger.info("已关闭 ScheduledExecutorService 线程池");
+ simpleLogger.info("已关闭 ScheduledExecutorService 线程池");
long time = System.currentTimeMillis() - start;
- logger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
+ simpleLogger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
}
private void checkUpdate() {
diff --git a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/CoreBungeeAPI.java b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/CoreBungeeAPI.java
index 147bad5..d811d9f 100644
--- a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/CoreBungeeAPI.java
+++ b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/CoreBungeeAPI.java
@@ -1,6 +1,7 @@
package cn.hamster3.mc.plugin.core.bungee.api;
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.config.ConfigSection;
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.IOException;
-import java.util.logging.Logger;
@SuppressWarnings("unused")
public final class CoreBungeeAPI extends CoreAPI {
@@ -51,8 +51,8 @@ public final class CoreBungeeAPI extends CoreAPI {
}
@Override
- public @NotNull Logger getLogger() {
- return HamsterCorePlugin.getInstance().getLogger();
+ public @NotNull BungeeSimpleLogger getLogger() {
+ return HamsterCorePlugin.getSimpleLogger();
}
@Override
diff --git a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeePluginLogger.java b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeePluginLogger.java
deleted file mode 100644
index 4a7e8a4..0000000
--- a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeePluginLogger.java
+++ /dev/null
@@ -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);
- }
-}
diff --git a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeeSimpleLogger.java b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeeSimpleLogger.java
new file mode 100644
index 0000000..8d18a42
--- /dev/null
+++ b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/util/BungeeSimpleLogger.java
@@ -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);
+ }
+}
diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/api/CoreAPI.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/api/CoreAPI.java
index 83dbeec..6676b08 100644
--- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/api/CoreAPI.java
+++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/api/CoreAPI.java
@@ -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.thread.NamedThreadFactory;
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.zaxxer.hikari.HikariDataSource;
import lombok.Getter;
import net.kyori.adventure.platform.AudienceProvider;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import redis.clients.jedis.JedisPool;
import javax.sql.DataSource;
@@ -16,50 +18,62 @@ import java.sql.SQLException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
-import java.util.logging.Logger;
+@Getter
@SuppressWarnings("unused")
public abstract class CoreAPI {
@Getter
protected static CoreAPI instance;
- /**
- * Redis 连接池
- */
- @Getter
- @NotNull
- private final JedisPool jedisPool;
- /**
- * 公用数据库连接池
- */
- @Getter
- @NotNull
- private final HikariDataSource hikariDataSource;
+ private final boolean enableRedis;
+ private final boolean enableDatabase;
/**
* 异步线程池
*/
- @Getter
+ @NotNull
private final ExecutorService executorService;
/**
* 调度器线程池
*/
- @Getter
+ @NotNull
private final ScheduledExecutorService scheduledService;
+ /**
+ * 公用 Redis 连接池
+ */
+ @Nullable
+ private JedisPool jedisPool;
+ /**
+ * 公用数据库连接池
+ */
+ @Nullable
+ private HikariDataSource hikariDataSource;
public CoreAPI(@NotNull ConfigSection config) {
+ SimpleLogger logger = getLogger();
executorService = Executors.newCachedThreadPool(new NamedThreadFactory("HamsterCore - Executor"));
scheduledService = Executors.newScheduledThreadPool(1, new NamedThreadFactory("HamsterCore - Scheduler"));
+ logger.info("已创建线程池");
- getLogger().info("正在创建 Redis 连接池");
- jedisPool = new JedisPool(config.getString("redis-url"));
- getLogger().info("Redis 连接池创建完成");
-
- ConfigSection datasourceConfig = config.getSection("datasource");
- if (datasourceConfig == null) {
- throw new IllegalArgumentException("配置文件中未找到 datasource 节点");
+ enableRedis = config.getBoolean("enable-redis", true);
+ if (enableRedis) {
+ logger.info("正在创建 Redis 连接池");
+ jedisPool = new JedisPool(config.getString("redis-url"));
+ logger.info("Redis 连接池创建完成");
+ } else {
+ 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
public DataSource getDataSource() {
- return hikariDataSource;
+ if (hikariDataSource != null) {
+ return hikariDataSource;
+ }
+ throw new IllegalStateException("仓鼠核心未启用数据库功能");
}
/**
@@ -84,7 +101,15 @@ public abstract class CoreAPI {
}
@NotNull
- public abstract Logger getLogger();
+ public JedisPool getJedisPool() {
+ if (jedisPool != null) {
+ return jedisPool;
+ }
+ throw new IllegalStateException("仓鼠核心未启用 Redis 功能");
+ }
+
+ @NotNull
+ public abstract SimpleLogger getLogger();
/**
* @return GSON 工具
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitPluginLogger.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/SimpleLogger.java
similarity index 60%
rename from core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitPluginLogger.java
rename to core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/SimpleLogger.java
index f58517c..9ac29ce 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/BukkitPluginLogger.java
+++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/SimpleLogger.java
@@ -1,52 +1,38 @@
-package cn.hamster3.mc.plugin.core.bukkit.util;
+package cn.hamster3.mc.plugin.core.common.util;
import lombok.Getter;
-import org.bukkit.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 BukkitPluginLogger {
- @NotNull
- private final Plugin plugin;
- @NotNull
- private final Logger logger;
+public abstract class SimpleLogger {
+ public abstract void log(@NotNull Level level, @NotNull String msg);
- public BukkitPluginLogger(@NotNull Plugin plugin) {
- this.plugin = plugin;
- logger = plugin.getLogger();
- }
+ public abstract void log(@NotNull Level level, @NotNull Throwable throwable);
- public void log(@NotNull Level level, @NotNull String msg) {
- logger.log(level, msg);
- }
+ public abstract void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg);
public void log(@NotNull Level level, @NotNull String msg, @NotNull Object... args) {
try {
- logger.log(level, String.format(msg, args));
+ 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);
+ log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
+ log(Level.WARNING, "日志参数: " + Arrays.toString(args));
+ 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);
+ 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);
+ log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
+ log(Level.WARNING, "日志参数: " + Arrays.toString(args));
+ log(Level.WARNING, "异常参数: ", throwable);
+ log(Level.WARNING, "异常信息: ", e);
}
}
@@ -58,6 +44,10 @@ public class BukkitPluginLogger {
log(Level.INFO, msg, args);
}
+ public void info(@NotNull Throwable throwable) {
+ log(Level.INFO, throwable);
+ }
+
public void info(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.INFO, throwable, msg);
}
@@ -74,6 +64,10 @@ public class BukkitPluginLogger {
log(Level.WARNING, msg, args);
}
+ public void warn(@NotNull Throwable throwable) {
+ log(Level.WARNING, throwable);
+ }
+
public void warn(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.WARNING, throwable, msg);
}
@@ -90,6 +84,10 @@ public class BukkitPluginLogger {
log(Level.SEVERE, msg, args);
}
+ public void error(@NotNull Throwable throwable) {
+ log(Level.SEVERE, throwable);
+ }
+
public void error(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.SEVERE, throwable, msg);
}
diff --git a/core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/HamsterCorePlugin.java b/core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/HamsterCorePlugin.java
index 98a3342..fe013bf 100644
--- a/core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/HamsterCorePlugin.java
+++ b/core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/HamsterCorePlugin.java
@@ -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.util.UpdateCheckUtils;
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.velocitypowered.api.event.PostOrder;
import com.velocitypowered.api.event.Subscribe;
@@ -36,25 +37,22 @@ public class HamsterCorePlugin {
@Getter
private static HamsterCorePlugin instance;
@Getter
- private final java.util.logging.Logger logger;
- @Getter
- private final Logger slf4jLogger;
+ private final VelocitySimpleLogger simpleLogger;
@Getter
private final ProxyServer proxyServer;
@Getter
private final File dataFolder;
@Inject
- public HamsterCorePlugin(Logger slf4jLogger, ProxyServer proxyServer, @DataDirectory Path dataPath) {
- logger = java.util.logging.Logger.getLogger("hamster-core");
- this.slf4jLogger = slf4jLogger;
+ public HamsterCorePlugin(Logger logger, ProxyServer proxyServer, @DataDirectory Path dataPath) {
+ this.simpleLogger = new VelocitySimpleLogger(logger);
this.proxyServer = proxyServer;
dataFolder = dataPath.toFile();
instance = this;
long start = System.currentTimeMillis();
try {
if (dataFolder.mkdir()) {
- slf4jLogger.info("已生成插件存档文件夹");
+ simpleLogger.info("已生成插件存档文件夹");
}
File configFile = new File(dataFolder, "config.yml");
if (!configFile.exists()) {
@@ -65,38 +63,40 @@ public class HamsterCorePlugin {
}
}
CoreVelocityAPI.init(configFile);
- slf4jLogger.info("已初始化 CoreAPI");
+ simpleLogger.info("已初始化 CoreAPI");
} catch (Exception e) {
- slf4jLogger.error("初始化 CoreAPI 出错", e);
+ simpleLogger.error("初始化 CoreAPI 出错", e);
}
long time = System.currentTimeMillis() - start;
- slf4jLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
+ simpleLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
}
@Subscribe(order = PostOrder.FIRST)
public void onProxyInitialization(ProxyInitializeEvent event) {
long start = System.currentTimeMillis();
- slf4jLogger.info("仓鼠核心正在启动");
+ simpleLogger.info("仓鼠核心正在启动");
CoreAPI.getInstance().getExecutorService().submit(this::checkUpdate);
long time = System.currentTimeMillis() - start;
- slf4jLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
+ simpleLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
}
@Subscribe(order = PostOrder.LAST)
public void onProxyShutdown(ProxyShutdownEvent event) {
long start = System.currentTimeMillis();
- CoreAPI.getInstance().getJedisPool().close();
- slf4jLogger.info("已关闭 Redis 连接池");
- if (CoreAPI.getInstance().getDataSource() instanceof HikariDataSource dataSource) {
- dataSource.close();
- slf4jLogger.info("已关闭数据库连接池");
+ if (CoreAPI.getInstance().isEnableRedis()) {
+ CoreAPI.getInstance().getJedisPool().close();
+ simpleLogger.info("已关闭 Redis 连接池");
+ }
+ if (CoreAPI.getInstance().isEnableDatabase()) {
+ ((HikariDataSource) CoreAPI.getInstance().getDataSource()).close();
+ simpleLogger.info("已关闭数据库连接池");
}
CoreAPI.getInstance().getExecutorService().shutdownNow();
- slf4jLogger.info("已关闭 ExecutorService 线程池");
+ simpleLogger.info("已关闭 ExecutorService 线程池");
CoreAPI.getInstance().getScheduledService().shutdownNow();
- slf4jLogger.info("已关闭 ScheduledExecutorService 线程池");
+ simpleLogger.info("已关闭 ScheduledExecutorService 线程池");
long time = System.currentTimeMillis() - start;
- slf4jLogger.info("仓鼠核心关闭完成,总计耗时 " + time + " ms");
+ simpleLogger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
}
private void checkUpdate() {
diff --git a/core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/api/CoreVelocityAPI.java b/core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/api/CoreVelocityAPI.java
index d28eab8..02274a9 100644
--- a/core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/api/CoreVelocityAPI.java
+++ b/core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/api/CoreVelocityAPI.java
@@ -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.velocity.HamsterCorePlugin;
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.GsonBuilder;
import net.kyori.adventure.platform.AudienceProvider;
@@ -16,7 +17,6 @@ import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
-import java.util.logging.Logger;
@SuppressWarnings("unused")
public final class CoreVelocityAPI extends CoreAPI {
@@ -57,8 +57,8 @@ public final class CoreVelocityAPI extends CoreAPI {
}
@Override
- public @NotNull Logger getLogger() {
- return HamsterCorePlugin.getInstance().getLogger();
+ public @NotNull VelocitySimpleLogger getLogger() {
+ return HamsterCorePlugin.getInstance().getSimpleLogger();
}
@Override
diff --git a/core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/util/VelocitySimpleLogger.java b/core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/util/VelocitySimpleLogger.java
new file mode 100644
index 0000000..8f0810e
--- /dev/null
+++ b/core-velocity/src/main/java/cn/hamster3/mc/plugin/core/velocity/util/VelocitySimpleLogger.java
@@ -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);
+ }
+ }
+}
From be25334cc74bb22a302fbd35fa2929bb5deb35ce Mon Sep 17 00:00:00 2001
From: MiniDay <372403923@qq.com>
Date: Sat, 6 Jul 2024 14:22:14 +0800
Subject: [PATCH 05/18] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E9=85=8D?=
=?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E6=8F=8F=E8=BF=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
core-bukkit/src/main/resources/config.yml | 3 ---
core-bungee/src/main/resources/config.yml | 11 +++++++++--
core-velocity/src/main/resources/config.yml | 11 +++++++++--
3 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/core-bukkit/src/main/resources/config.yml b/core-bukkit/src/main/resources/config.yml
index f170fbe..6963a3f 100644
--- a/core-bukkit/src/main/resources/config.yml
+++ b/core-bukkit/src/main/resources/config.yml
@@ -21,9 +21,6 @@ datasource:
# MySQL数据库链接填写格式:
# jdbc:mysql://{数据库地址}:{数据库端口}/{使用的库名}?参数
url: "jdbc:mysql://localhost:3306/Test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"
- # 如果你不需要做多端跨服,那么请使用 sqlite 作本地数据库 ↓
- # driver: "org.sqlite.JDBC"
- # url: "jdbc:sqlite:./plugins/HamsterCore/database.db"
# 用户名
username: "root"
# 密码
diff --git a/core-bungee/src/main/resources/config.yml b/core-bungee/src/main/resources/config.yml
index da86f90..03c8c3f 100644
--- a/core-bungee/src/main/resources/config.yml
+++ b/core-bungee/src/main/resources/config.yml
@@ -1,3 +1,6 @@
+# 是否启用 redis 连接池功能
+enable-redis: false
+
# redis 连接配置
# 完整格式如下:
# redis://用户名:密码@主机名:端口/数据库索引?参数名=参数值&参数名=参数值
@@ -8,6 +11,10 @@
# 若不设置数据库,则默认使用 0
redis-url: "redis://localhost:6379/0?clientName=HamsterCore&timeout=5s"
+# 是否启用数据库连接池功能
+enable-database: false
+
+# 数据库连接池配置
datasource:
# 数据库链接驱动地址
driver: "com.mysql.cj.jdbc.Driver"
@@ -22,8 +29,8 @@ datasource:
# 推荐值:1~3
minimum-idle: 0
# 最大链接数
- # 推荐值:不低于5
- maximum-pool-size: 5
+ # 推荐值:不低于3
+ maximum-pool-size: 3
# 保持连接池可用的间隔
# 除非你的服务器数据库连接经常断开,否则不建议启用该选项
# 单位:毫秒
diff --git a/core-velocity/src/main/resources/config.yml b/core-velocity/src/main/resources/config.yml
index da86f90..03c8c3f 100644
--- a/core-velocity/src/main/resources/config.yml
+++ b/core-velocity/src/main/resources/config.yml
@@ -1,3 +1,6 @@
+# 是否启用 redis 连接池功能
+enable-redis: false
+
# redis 连接配置
# 完整格式如下:
# redis://用户名:密码@主机名:端口/数据库索引?参数名=参数值&参数名=参数值
@@ -8,6 +11,10 @@
# 若不设置数据库,则默认使用 0
redis-url: "redis://localhost:6379/0?clientName=HamsterCore&timeout=5s"
+# 是否启用数据库连接池功能
+enable-database: false
+
+# 数据库连接池配置
datasource:
# 数据库链接驱动地址
driver: "com.mysql.cj.jdbc.Driver"
@@ -22,8 +29,8 @@ datasource:
# 推荐值:1~3
minimum-idle: 0
# 最大链接数
- # 推荐值:不低于5
- maximum-pool-size: 5
+ # 推荐值:不低于3
+ maximum-pool-size: 3
# 保持连接池可用的间隔
# 除非你的服务器数据库连接经常断开,否则不建议启用该选项
# 单位:毫秒
From be756b0a56907d72a3f8eca4eee82e8eb1517cce Mon Sep 17 00:00:00 2001
From: MiniDay <372403923@qq.com>
Date: Fri, 12 Jul 2024 15:19:52 +0800
Subject: [PATCH 06/18] =?UTF-8?q?feat:=20=E5=A2=9E=E5=BC=BA=20ConfigSectio?=
=?UTF-8?q?n?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../plugin/core/common/config/ConfigSection.java | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/config/ConfigSection.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/config/ConfigSection.java
index 4b6bb40..c4a4ea1 100644
--- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/config/ConfigSection.java
+++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/config/ConfigSection.java
@@ -4,10 +4,7 @@ import lombok.Getter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
@SuppressWarnings({"unused", "unchecked"})
@Getter
@@ -27,6 +24,15 @@ public class ConfigSection {
return map.containsKey(key);
}
+ public Set getKeys() {
+ return map.keySet();
+ }
+
+ @Nullable
+ public Object get(@NotNull String key) {
+ return map.get(key);
+ }
+
@Nullable
public ConfigSection getSection(@NotNull String key) {
Object o = map.get(key);
From 2263a74a77cc6b63e22a91ae9cbb209f8cb6532e Mon Sep 17 00:00:00 2001
From: MiniDay <372403923@qq.com>
Date: Thu, 25 Jul 2024 20:22:32 +0800
Subject: [PATCH 07/18] =?UTF-8?q?feat:=20=E5=85=BC=E5=AE=B91.21?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mc/plugin/core/bukkit/HamsterCorePlugin.java | 6 ++++--
.../core/bukkit/util/MinecraftVersion.java | 16 ++++++++++++----
.../mc/plugin/core/bungee/HamsterCorePlugin.java | 3 +--
.../mc/plugin/core/common/util/SimpleLogger.java | 6 +++---
4 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java
index e5f842e..f693f66 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java
@@ -35,7 +35,6 @@ import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
-import java.util.logging.Level;
public class HamsterCorePlugin extends JavaPlugin {
@Getter
@@ -91,7 +90,7 @@ public class HamsterCorePlugin extends JavaPlugin {
CoreBukkitAPI.init(configFile);
simpleLogger.info("已初始化 CoreAPI");
} catch (Exception e) {
- simpleLogger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
+ simpleLogger.error(e, "初始化 CoreAPI 出错");
}
CoreMessage.init(this);
simpleLogger.info("已初始化语言文本");
@@ -114,6 +113,9 @@ public class HamsterCorePlugin extends JavaPlugin {
simpleLogger.info("已注册 CallbackListener");
Bukkit.getPluginManager().registerEvents(DebugListener.INSTANCE, this);
simpleLogger.info("已注册 DebugListener");
+ simpleLogger.info("Redis 启用状态: %b", CoreAPI.getInstance().isEnableRedis());
+ simpleLogger.info("Database 启用状态: %b", CoreAPI.getInstance().isEnableDatabase());
+ simpleLogger.info("已注册 DebugListener");
long time = System.currentTimeMillis() - start;
sync(() -> {
PointAPI.reloadPlayerPointAPIHook();
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java
index 300ec99..0510477 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java
@@ -61,8 +61,10 @@ public class MinecraftVersion {
@NotNull
public static Class> getNMSClass(@NotNull String className) throws ClassNotFoundException {
- if (version1 >= 1 && version2 >= 17) {
- return Class.forName("net.minecraft.server." + className);
+ if (version1 >= 1) {
+ if (version2 >= 17) {
+ return Class.forName("net.minecraft.server." + className);
+ }
}
String nmsVersion = getNMSVersion();
return Class.forName("net.minecraft.server." + nmsVersion + "." + className);
@@ -79,8 +81,13 @@ public class MinecraftVersion {
@NotNull
public static Class> getCraftBukkitClass(@NotNull String className) throws ClassNotFoundException {
- if (version1 >= 1 && version2 >= 20 && version3 >= 6) {
- return Class.forName("org.bukkit.craftbukkit." + className);
+ if (version1 >= 1) {
+ if (version2 >= 21) {
+ return Class.forName("org.bukkit.craftbukkit." + className);
+ }
+ if (version2 == 20 && version3 >= 6) {
+ return Class.forName("org.bukkit.craftbukkit." + className);
+ }
}
String nmsVersion = getNMSVersion();
return Class.forName("org.bukkit.craftbukkit." + nmsVersion + "." + className);
@@ -91,6 +98,7 @@ public class MinecraftVersion {
try {
return getCraftBukkitClass(className);
} catch (ClassNotFoundException e) {
+ e.printStackTrace();
throw new RuntimeException(e);
}
}
diff --git a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java
index 02a4584..75b2a8a 100644
--- a/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java
+++ b/core-bungee/src/main/java/cn/hamster3/mc/plugin/core/bungee/HamsterCorePlugin.java
@@ -19,7 +19,6 @@ import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
-import java.util.logging.Level;
public class HamsterCorePlugin extends Plugin {
@Getter
@@ -51,7 +50,7 @@ public class HamsterCorePlugin extends Plugin {
CoreBungeeAPI.init(configFile);
simpleLogger.info("已初始化 CoreAPI");
} catch (Exception e) {
- simpleLogger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
+ simpleLogger.error(e, "初始化 CoreAPI 出错");
}
long time = System.currentTimeMillis() - start;
simpleLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/SimpleLogger.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/SimpleLogger.java
index 9ac29ce..ebf844a 100644
--- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/SimpleLogger.java
+++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/SimpleLogger.java
@@ -19,9 +19,9 @@ public abstract class SimpleLogger {
try {
log(level, String.format(msg, args));
} catch (Exception e) {
- log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
- log(Level.WARNING, "日志参数: " + Arrays.toString(args));
- log(Level.WARNING, "异常信息: ", e);
+ log(Level.WARNING, "输出日志 %s 时遇到一个异常", msg);
+ log(Level.WARNING, "日志参数: %s", Arrays.toString(args));
+ log(Level.WARNING, e, "异常信息: ");
}
}
From a75853187ccab023eb8a0b57b3f95260f3d7a906 Mon Sep 17 00:00:00 2001
From: MiniDay <372403923@qq.com>
Date: Thu, 25 Jul 2024 20:23:04 +0800
Subject: [PATCH 08/18] =?UTF-8?q?style:=20=E7=A7=BB=E9=99=A4=E6=97=A0?=
=?UTF-8?q?=E6=95=88=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java
index 0510477..34a99fa 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java
@@ -98,7 +98,6 @@ public class MinecraftVersion {
try {
return getCraftBukkitClass(className);
} catch (ClassNotFoundException e) {
- e.printStackTrace();
throw new RuntimeException(e);
}
}
From 608a6ef289a42f72e0a451e101ad2a2aabebfacb Mon Sep 17 00:00:00 2001
From: MiniDay <372403923@qq.com>
Date: Sun, 28 Jul 2024 12:10:48 +0800
Subject: [PATCH 09/18] =?UTF-8?q?feat:=20=E5=A2=9E=E5=BC=BA=E9=83=A8?=
=?UTF-8?q?=E5=88=86API?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../core/bukkit/command/ParentCommand.java | 10 +--
.../core/common/config/ConfigSection.java | 51 +++++++++---
.../plugin/core/common/config/YamlConfig.java | 82 ++++++++++++++++---
.../plugin/core/common/util/SimpleLogger.java | 8 +-
4 files changed, 119 insertions(+), 32 deletions(-)
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java
index 5764792..833b575 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java
@@ -94,7 +94,7 @@ public abstract class ParentCommand extends ChildCommand {
@NotNull
public Map getCommandHelp(CommandSender sender) {
- HashMap map = new HashMap<>();
+ Map map = new LinkedHashMap<>();
for (ChildCommand child : childCommands) {
if (!child.hasPermission(sender)) {
continue;
@@ -111,14 +111,12 @@ public abstract class ParentCommand extends ChildCommand {
public void sendHelp(@NotNull CommandSender sender) {
sender.sendMessage("§e==================== [ " + getName() + " 使用帮助] ====================");
- Map helpMap = getCommandHelp(sender);
- int maxLength = helpMap.keySet().stream()
+ Map map = getCommandHelp(sender);
+ int maxLength = map.keySet().stream()
.map(String::length)
.max(Integer::compareTo)
.orElse(-1);
- ArrayList> list = new ArrayList<>(helpMap.entrySet());
- list.sort(Map.Entry.comparingByKey());
- for (Map.Entry entry : list) {
+ for (Map.Entry entry : map.entrySet()) {
sender.sendMessage(String.format("§a%-" + maxLength + "s - %s", entry.getKey(), entry.getValue()));
}
}
diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/config/ConfigSection.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/config/ConfigSection.java
index c4a4ea1..5c94ac8 100644
--- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/config/ConfigSection.java
+++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/config/ConfigSection.java
@@ -5,6 +5,8 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
+import java.util.function.BiFunction;
+import java.util.function.Function;
@SuppressWarnings({"unused", "unchecked"})
@Getter
@@ -71,16 +73,6 @@ public class ConfigSection {
return o.toString();
}
- public List getStringList(@NotNull String key) {
- Object o = map.get(key);
- if (o instanceof List) {
- return (List) o;
- }
- ArrayList list = new ArrayList<>();
- map.put(key, list);
- return list;
- }
-
public boolean getBoolean(@NotNull String key) {
String string = getString(key);
if (string == null) {
@@ -161,6 +153,45 @@ public class ConfigSection {
return Long.parseLong(string);
}
+ public List getList(@NotNull String key, Function