diff --git a/build.gradle.kts b/build.gradle.kts index c84cdc5..34062c8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "cn.hamster3.mc.plugin" -version = "1.2.0" +version = "1.2.1" subprojects { apply { 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 682c843..d510669 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 @@ -25,6 +25,7 @@ import org.jetbrains.annotations.NotNull; import java.util.logging.Logger; +@SuppressWarnings("CallToPrintStackTrace") public class HamsterCorePlugin extends JavaPlugin { @Getter private static HamsterCorePlugin instance; @@ -64,8 +65,13 @@ public class HamsterCorePlugin extends JavaPlugin { saveDefaultConfig(); reloadConfig(); logger.info("已读取配置文件"); - CoreBukkitAPI.init(); - logger.info("已初始化 CoreAPI"); + try { + CoreBukkitAPI.init(); + logger.info("已初始化 CoreAPI"); + } catch (Exception e) { + logger.warning("初始化 CoreAPI 出错"); + e.printStackTrace(); + } CoreMessage.init(this); logger.info("已初始化语言文本"); long time = System.currentTimeMillis() - start; 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 7cc1048..c187758 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 @@ -32,16 +32,33 @@ public final class CoreBukkitAPI extends CoreAPI { private final HikariDataSource datasource; private CoreBukkitAPI() { + gson = new GsonBuilder() + .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) + .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) + .registerTypeAdapter(ItemStack.class, ItemStackAdapter.INSTANCE) + .registerTypeAdapter(PotionEffect.class, PotionEffectAdapter.INSTANCE) + .create(); + humanGson = new GsonBuilder() + .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) + .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) + .registerTypeAdapter(ItemStack.class, 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")); @@ -58,21 +75,7 @@ public final class CoreBukkitAPI extends CoreAPI { hikariConfig.setValidationTimeout(datasourceConfig.getLong("validation-timeout", 5000)); hikariConfig.setPoolName("HamsterCore-Pool"); datasource = new HikariDataSource(hikariConfig); - - gson = new GsonBuilder() - .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) - .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) - .registerTypeAdapter(ItemStack.class, ItemStackAdapter.INSTANCE) - .registerTypeAdapter(PotionEffect.class, PotionEffectAdapter.INSTANCE) - .create(); - humanGson = new GsonBuilder() - .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) - .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) - .registerTypeAdapter(ItemStack.class, ItemStackAdapter.INSTANCE) - .registerTypeAdapter(PotionEffect.class, PotionEffectAdapter.INSTANCE) - .serializeNulls() - .setPrettyPrinting() - .create(); + HamsterCorePlugin.getInstance().getLogger().info("数据库连接池创建完成"); } public static CoreBukkitAPI getInstance() { 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 e3dc5d5..8137f65 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 @@ -15,6 +15,7 @@ import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; +@Getter public enum CoreMessage { COMMAND_NOT_FOUND("§c未找到该指令"), COMMAND_NOT_HAS_PERMISSION("§c你没有这个权限"), @@ -62,7 +63,6 @@ public enum CoreMessage { COMMAND_LORE_INSERT_INDEX_OUT_OF_RANGE("§c你的手持物品没有这么多行 lore 文本"), COMMAND_LORE_INSERT_SUCCESS("§a已成功设置 lore 文本"); - @Getter @NotNull private DisplayMessage message; diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/CoreBukkitUtils.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/CoreBukkitUtils.java index 00d5141..e676814 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/CoreBukkitUtils.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/CoreBukkitUtils.java @@ -7,6 +7,7 @@ import de.tr7zw.changeme.nbtapi.NBTContainer; import de.tr7zw.changeme.nbtapi.NBTItem; import me.clip.placeholderapi.PlaceholderAPI; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.title.Title; import org.bukkit.Bukkit; @@ -212,18 +213,18 @@ public final class CoreBukkitUtils { DisplayMessage displayMessage = new DisplayMessage(); String message = config.getString("message"); if (message != null) { - displayMessage.setMessage(message); + displayMessage.setMessage(MiniMessage.miniMessage().deserialize(message)); } String actionbar = config.getString("actionbar"); if (actionbar != null) { - displayMessage.setActionbar(actionbar); + displayMessage.setActionbar(MiniMessage.miniMessage().deserialize(actionbar)); } String title = config.getString("title"); String subtitle = config.getString("subtitle"); if (title != null || subtitle != null) { displayMessage.setTitle( - title, - subtitle, + MiniMessage.miniMessage().escapeTags(title == null ? "" : title), + MiniMessage.miniMessage().escapeTags(subtitle == null ? "" : subtitle), config.getInt("fade-in", 10), config.getInt("stay", 70), config.getInt("fade-out", 20) 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 cd142ae..6d93c25 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 @@ -8,6 +8,7 @@ import net.md_5.bungee.api.plugin.Plugin; import java.util.logging.Logger; +@SuppressWarnings("CallToPrintStackTrace") public class HamsterCorePlugin extends Plugin { @Getter private static HamsterCorePlugin instance; @@ -20,8 +21,13 @@ public class HamsterCorePlugin extends Plugin { instance = this; Logger logger = getLogger(); logger.info("仓鼠核心正在初始化"); - CoreBungeeAPI.init(); - logger.info("已初始化 CoreAPI"); + try { + CoreBungeeAPI.init(); + logger.info("已初始化 CoreAPI"); + } catch (Exception e) { + logger.warning("初始化 CoreAPI 出错"); + e.printStackTrace(); + } long time = System.currentTimeMillis() - start; logger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms"); } @@ -53,5 +59,4 @@ public class HamsterCorePlugin extends Plugin { long time = System.currentTimeMillis() - start; logger.info("仓鼠核心已关闭,总计耗时 " + time + " ms"); } - } 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 6b5798c..fbf4794 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 @@ -28,16 +28,29 @@ public final class CoreBungeeAPI extends CoreAPI { private final HikariDataSource datasource; private CoreBungeeAPI() { + gson = new GsonBuilder() + .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) + .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) + .create(); + humanGson = new GsonBuilder() + .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) + .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) + .serializeNulls() + .setPrettyPrinting() + .create(); + HamsterCorePlugin plugin = HamsterCorePlugin.getInstance(); Configuration config = CoreBungeeCordUtils.getPluginConfig(plugin); + HamsterCorePlugin.getInstance().getLogger().info("正在创建 redis 客户端"); redisClient = RedisClient.create(config.getString("redis-url")); + HamsterCorePlugin.getInstance().getLogger().info("redis 客户端创建完成"); Configuration datasourceConfig = config.getSection("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")); @@ -54,17 +67,7 @@ public final class CoreBungeeAPI extends CoreAPI { hikariConfig.setValidationTimeout(datasourceConfig.getLong("validation-timeout", 5000)); hikariConfig.setPoolName("HamsterCore-Pool"); datasource = new HikariDataSource(hikariConfig); - - gson = new GsonBuilder() - .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) - .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) - .create(); - humanGson = new GsonBuilder() - .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) - .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) - .serializeNulls() - .setPrettyPrinting() - .create(); + HamsterCorePlugin.getInstance().getLogger().info("数据库连接池创建完成"); } public static CoreBungeeAPI getInstance() { 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 422b996..191e319 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 @@ -73,5 +73,4 @@ public abstract class CoreAPI { */ @NotNull public abstract Gson getHumanGson(); - } diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/data/DisplayMessage.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/data/DisplayMessage.java index 42fb89a..b6392b2 100644 --- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/data/DisplayMessage.java +++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/data/DisplayMessage.java @@ -2,7 +2,7 @@ package cn.hamster3.mc.plugin.core.common.data; import cn.hamster3.mc.plugin.core.common.util.CoreUtils; import com.google.gson.JsonObject; -import lombok.Data; +import lombok.Getter; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.key.Key; import net.kyori.adventure.sound.Sound; @@ -15,7 +15,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @SuppressWarnings({"unused", "UnusedReturnValue", "PatternValidation"}) -@Data +@Getter public class DisplayMessage { private Component message; private Component actionbar; @@ -85,12 +85,24 @@ public class DisplayMessage { return this; } + @NotNull + public DisplayMessage setMessage(@Nullable Component message) { + this.message = message; + return this; + } + @NotNull public DisplayMessage setActionbar(@NotNull String actionbar) { this.actionbar = Component.text(actionbar); return this; } + @NotNull + public DisplayMessage setActionbar(@NotNull Component actionbar) { + this.actionbar = actionbar; + return this; + } + @NotNull public DisplayMessage setTitle(@Nullable String title, @Nullable String subtitle, int fadeIn, int stay, int fadeOut) { this.title = Title.title( @@ -105,6 +117,26 @@ public class DisplayMessage { return this; } + @NotNull + public DisplayMessage setTitle(@Nullable Component title, @Nullable Component subtitle, int fadeIn, int stay, int fadeOut) { + this.title = Title.title( + title == null ? Component.empty() : title, + subtitle == null ? Component.empty() : subtitle, + Title.Times.times( + Ticks.duration(fadeIn), + Ticks.duration(stay), + Ticks.duration(fadeOut) + ) + ); + return this; + } + + @NotNull + public DisplayMessage setTitle(@Nullable Title title) { + this.title = title; + return this; + } + @NotNull public DisplayMessage setSound(@NotNull String sound, float volume, float pitch) { this.sound = Sound.sound(Key.key(sound), Sound.Source.MASTER, volume, pitch); @@ -123,6 +155,12 @@ public class DisplayMessage { return this; } + @NotNull + public DisplayMessage setSound(@Nullable Sound sound) { + this.sound = sound; + return this; + } + @NotNull public DisplayMessage replace(@NotNull TextReplacementConfig... replacements) { DisplayMessage copy = copy(); diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/Pair.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/Pair.java index 2b56edd..14e838a 100644 --- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/Pair.java +++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/Pair.java @@ -1,8 +1,11 @@ package cn.hamster3.mc.plugin.core.common.util; +import lombok.Getter; + import java.io.Serializable; import java.util.Objects; +@Getter @Deprecated @SuppressWarnings("unused") public class Pair implements Serializable { @@ -14,14 +17,6 @@ public class Pair implements Serializable { this.value = value; } - public K getKey() { - return key; - } - - public V getValue() { - return value; - } - @Override public boolean equals(Object o) { if (this == o) return true;