diff --git a/build.gradle.kts b/build.gradle.kts index 8b59819..0eb33a0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "cn.hamster3.mc.plugin" -version = "1.2.2" +version = "1.2.3" 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 efdfe29..3681a41 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,7 +11,7 @@ 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.CoreBukkitUtils; +import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion; import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import lombok.Getter; import net.kyori.adventure.platform.bukkit.BukkitAudiences; @@ -58,8 +58,9 @@ public class HamsterCorePlugin extends JavaPlugin { public void onLoad() { long start = System.currentTimeMillis(); Logger logger = getLogger(); - logger.info("Minecraft 版本: " + CoreBukkitUtils.getMCVersion()); - logger.info("NMS 版本: " + CoreBukkitUtils.getNMSVersion()); + logger.info("仓鼠核心正在初始化"); + logger.info("Minecraft 版本: " + MinecraftVersion.getMCVersion()); + logger.info("nms 版本: " + MinecraftVersion.getNMSVersion()); instance = this; saveDefaultConfig(); reloadConfig(); 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 2c4f133..8702fd1 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 @@ -1,16 +1,18 @@ package cn.hamster3.mc.plugin.core.bukkit.api; import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; -import cn.hamster3.mc.plugin.core.bukkit.serializer.ItemStackAdapter; -import cn.hamster3.mc.plugin.core.bukkit.serializer.PotionEffectAdapter; +import cn.hamster3.mc.plugin.core.bukkit.impl.ItemStackAdapter; +import cn.hamster3.mc.plugin.core.bukkit.impl.PotionEffectAdapter; +import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion; import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; -import cn.hamster3.mc.plugin.core.common.serializer.ComponentTypeAdapter; -import cn.hamster3.mc.plugin.core.common.serializer.MessageTypeAdapter; +import cn.hamster3.mc.plugin.core.common.impl.ComponentTypeAdapter; +import cn.hamster3.mc.plugin.core.common.impl.MessageTypeAdapter; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; +import de.tr7zw.changeme.nbtapi.utils.nmsmappings.ClassWrapper; import io.lettuce.core.RedisClient; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.Component; @@ -36,12 +38,14 @@ public final class CoreBukkitAPI extends CoreAPI { .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) .registerTypeAdapter(ItemStack.class, ItemStackAdapter.INSTANCE) + .registerTypeAdapter(MinecraftVersion.getCraftBukkitClassSilent("inventory.CraftItemStack"), 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(ClassWrapper.CRAFT_ITEMSTACK.getClazz(), ItemStackAdapter.INSTANCE) .registerTypeAdapter(PotionEffect.class, PotionEffectAdapter.INSTANCE) .serializeNulls() .setPrettyPrinting() 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 12da23a..e8a9ad9 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 @@ -2,7 +2,7 @@ package cn.hamster3.mc.plugin.core.bukkit.command.core.sub; import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand; -import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils; +import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.command.Command; @@ -51,10 +51,10 @@ public class YamlCommand extends ChildCommand { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { YamlConfiguration config = new YamlConfiguration(); - config.set("mc-version", CoreBukkitUtils.getMCVersion()); - config.set("nms-version", CoreBukkitUtils.getNMSVersion()); - config.set("server-version", Bukkit.getBukkitVersion()); - config.set("bukkit-version", Bukkit.getVersion()); + config.set("mc-version", MinecraftVersion.getMCVersion()); + config.set("nms-version", MinecraftVersion.getNMSVersion()); + config.set("bukkit-version", Bukkit.getBukkitVersion()); + config.set("server-version", Bukkit.getVersion()); if (sender instanceof Player) { Player player = (Player) sender; diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreInfoCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreInfoCommand.java index bd0999f..7563584 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreInfoCommand.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreInfoCommand.java @@ -4,6 +4,7 @@ import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand; import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage; import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils; +import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.command.Command; @@ -66,7 +67,7 @@ public class LoreInfoCommand extends ChildCommand { sender.sendMessage("§a物品 lore: 无"); return true; } - if (Integer.parseInt(CoreBukkitUtils.getMCVersion().split("\\.")[1]) >= 13) { + if (MinecraftVersion.getVersion2() >= 13) { if (meta.hasCustomModelData()) { sender.sendMessage("§a物品自定义模型 ID: " + meta.getCustomModelData()); } else { diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/serializer/ItemStackAdapter.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/impl/ItemStackAdapter.java similarity index 94% rename from core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/serializer/ItemStackAdapter.java rename to core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/impl/ItemStackAdapter.java index 65c8525..99e7ad5 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/serializer/ItemStackAdapter.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/impl/ItemStackAdapter.java @@ -1,4 +1,4 @@ -package cn.hamster3.mc.plugin.core.bukkit.serializer; +package cn.hamster3.mc.plugin.core.bukkit.impl; import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils; import com.google.gson.*; diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/serializer/PotionEffectAdapter.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/impl/PotionEffectAdapter.java similarity index 94% rename from core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/serializer/PotionEffectAdapter.java rename to core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/impl/PotionEffectAdapter.java index da96579..8aca322 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/serializer/PotionEffectAdapter.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/impl/PotionEffectAdapter.java @@ -1,4 +1,4 @@ -package cn.hamster3.mc.plugin.core.bukkit.serializer; +package cn.hamster3.mc.plugin.core.bukkit.impl; import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils; import com.google.gson.*; 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 418eb18..25d428d 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 @@ -42,28 +42,6 @@ public final class CoreBukkitUtils { private CoreBukkitUtils() { } - @NotNull - public static String getMCVersion() { - return Bukkit.getBukkitVersion().split("-")[0]; - } - - @NotNull - public static String getNMSVersion() { - return Bukkit.getServer().getClass().getName().split("\\.")[3]; - } - - @NotNull - public static Package getNMSPackage() { - String nmsVersion = getNMSVersion(); - return Package.getPackage("net.minecraft.server." + nmsVersion); - } - - @NotNull - public static Class> getNMSClass(@NotNull String className) throws ClassNotFoundException { - String nmsVersion = getNMSVersion(); - return Class.forName("net.minecraft.server." + nmsVersion + "." + className); - } - /** * 获取玩家的头颅 * 在1.11以上的服务端中获取头颅材质是在服务器上运行的 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 new file mode 100644 index 0000000..bc2bcda --- /dev/null +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/MinecraftVersion.java @@ -0,0 +1,94 @@ +package cn.hamster3.mc.plugin.core.bukkit.util; + +import lombok.Getter; +import org.bukkit.Bukkit; +import org.jetbrains.annotations.NotNull; + +@SuppressWarnings("unused") +public class MinecraftVersion { + @Getter + public static final int Version1; + @Getter + public static final int Version2; + @Getter + 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; + } + + /** + * 与当前服务端运行的 mc 版本号对比 + *
+ * 1: 当前版本高于输入版本号 + *
+ * 2: 当前版本等于输入版本号 + *
+ * 2: 当前版本低于输入版本号 + * + * @param version 比较的版本号 + * @return - + */ + 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); + if (compare != 0) { + return compare; + } + compare = Integer.compare(Version2, version2); + if (compare != 0) { + return compare; + } + return Integer.compare(Version3, version3); + } + + @NotNull + public static String getMCVersion() { + return Bukkit.getBukkitVersion().split("-")[0]; + } + + @NotNull + public static String getNMSVersion() { + return Bukkit.getServer().getClass().getName().split("\\.")[3]; + } + + @NotNull + public static Class> getNMSClass(@NotNull String className) throws ClassNotFoundException { + String nmsVersion = getNMSVersion(); + return Class.forName("net.minecraft.server." + nmsVersion + "." + className); + } + + + @NotNull + public static Class> getNMSClassSilent(@NotNull String className) { + String nmsVersion = getNMSVersion(); + try { + return Class.forName("net.minecraft.server." + nmsVersion + "." + className); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + @NotNull + public static Class> getCraftBukkitClass(@NotNull String className) throws ClassNotFoundException { + 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); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } +} 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 de25942..07b45b2 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 @@ -4,8 +4,8 @@ import cn.hamster3.mc.plugin.core.bungee.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bungee.util.CoreBungeeCordUtils; import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; -import cn.hamster3.mc.plugin.core.common.serializer.ComponentTypeAdapter; -import cn.hamster3.mc.plugin.core.common.serializer.MessageTypeAdapter; +import cn.hamster3.mc.plugin.core.common.impl.ComponentTypeAdapter; +import cn.hamster3.mc.plugin.core.common.impl.MessageTypeAdapter; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.zaxxer.hikari.HikariConfig; diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/serializer/ComponentTypeAdapter.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/impl/ComponentTypeAdapter.java similarity index 93% rename from core-common/src/main/java/cn/hamster3/mc/plugin/core/common/serializer/ComponentTypeAdapter.java rename to core-common/src/main/java/cn/hamster3/mc/plugin/core/common/impl/ComponentTypeAdapter.java index ffa2a11..1db03a7 100644 --- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/serializer/ComponentTypeAdapter.java +++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/impl/ComponentTypeAdapter.java @@ -1,4 +1,4 @@ -package cn.hamster3.mc.plugin.core.common.serializer; +package cn.hamster3.mc.plugin.core.common.impl; import com.google.gson.*; import net.kyori.adventure.text.Component; diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/serializer/MessageTypeAdapter.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/impl/MessageTypeAdapter.java similarity index 93% rename from core-common/src/main/java/cn/hamster3/mc/plugin/core/common/serializer/MessageTypeAdapter.java rename to core-common/src/main/java/cn/hamster3/mc/plugin/core/common/impl/MessageTypeAdapter.java index f4e4444..ce0b9c5 100644 --- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/serializer/MessageTypeAdapter.java +++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/impl/MessageTypeAdapter.java @@ -1,4 +1,4 @@ -package cn.hamster3.mc.plugin.core.common.serializer; +package cn.hamster3.mc.plugin.core.common.impl; import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; import com.google.gson.*;