perf: 优化代码

This commit is contained in:
2024-03-12 17:46:18 +08:00
parent 5987d64a00
commit 7a8bb22f74
12 changed files with 120 additions and 42 deletions

View File

@@ -5,7 +5,7 @@ plugins {
} }
group = "cn.hamster3.mc.plugin" group = "cn.hamster3.mc.plugin"
version = "1.2.2" version = "1.2.3"
subprojects { subprojects {
apply { apply {

View File

@@ -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.listener.DebugListener;
import cn.hamster3.mc.plugin.core.bukkit.page.handler.PageHandler; import cn.hamster3.mc.plugin.core.bukkit.page.handler.PageHandler;
import cn.hamster3.mc.plugin.core.bukkit.page.listener.PageListener; import cn.hamster3.mc.plugin.core.bukkit.page.listener.PageListener;
import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils; import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import lombok.Getter; import lombok.Getter;
import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.platform.bukkit.BukkitAudiences;
@@ -58,8 +58,9 @@ public class HamsterCorePlugin extends JavaPlugin {
public void onLoad() { public void onLoad() {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
Logger logger = getLogger(); Logger logger = getLogger();
logger.info("Minecraft 版本: " + CoreBukkitUtils.getMCVersion()); logger.info("仓鼠核心正在初始化");
logger.info("NMS 版本: " + CoreBukkitUtils.getNMSVersion()); logger.info("Minecraft 版本: " + MinecraftVersion.getMCVersion());
logger.info("nms 版本: " + MinecraftVersion.getNMSVersion());
instance = this; instance = this;
saveDefaultConfig(); saveDefaultConfig();
reloadConfig(); reloadConfig();

View File

@@ -1,16 +1,18 @@
package cn.hamster3.mc.plugin.core.bukkit.api; package cn.hamster3.mc.plugin.core.bukkit.api;
import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.bukkit.serializer.ItemStackAdapter; import cn.hamster3.mc.plugin.core.bukkit.impl.ItemStackAdapter;
import cn.hamster3.mc.plugin.core.bukkit.serializer.PotionEffectAdapter; 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.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; 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.impl.ComponentTypeAdapter;
import cn.hamster3.mc.plugin.core.common.serializer.MessageTypeAdapter; import cn.hamster3.mc.plugin.core.common.impl.MessageTypeAdapter;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
import de.tr7zw.changeme.nbtapi.utils.nmsmappings.ClassWrapper;
import io.lettuce.core.RedisClient; import io.lettuce.core.RedisClient;
import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
@@ -36,12 +38,14 @@ public final class CoreBukkitAPI extends CoreAPI {
.registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE)
.registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE)
.registerTypeAdapter(ItemStack.class, ItemStackAdapter.INSTANCE) .registerTypeAdapter(ItemStack.class, ItemStackAdapter.INSTANCE)
.registerTypeAdapter(MinecraftVersion.getCraftBukkitClassSilent("inventory.CraftItemStack"), ItemStackAdapter.INSTANCE)
.registerTypeAdapter(PotionEffect.class, PotionEffectAdapter.INSTANCE) .registerTypeAdapter(PotionEffect.class, PotionEffectAdapter.INSTANCE)
.create(); .create();
humanGson = new GsonBuilder() humanGson = new GsonBuilder()
.registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE) .registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE)
.registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE) .registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE)
.registerTypeAdapter(ItemStack.class, ItemStackAdapter.INSTANCE) .registerTypeAdapter(ItemStack.class, ItemStackAdapter.INSTANCE)
.registerTypeAdapter(ClassWrapper.CRAFT_ITEMSTACK.getClazz(), ItemStackAdapter.INSTANCE)
.registerTypeAdapter(PotionEffect.class, PotionEffectAdapter.INSTANCE) .registerTypeAdapter(PotionEffect.class, PotionEffectAdapter.INSTANCE)
.serializeNulls() .serializeNulls()
.setPrettyPrinting() .setPrettyPrinting()

View File

@@ -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.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand; 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.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@@ -51,10 +51,10 @@ public class YamlCommand extends ChildCommand {
@Override @Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
YamlConfiguration config = new YamlConfiguration(); YamlConfiguration config = new YamlConfiguration();
config.set("mc-version", CoreBukkitUtils.getMCVersion()); config.set("mc-version", MinecraftVersion.getMCVersion());
config.set("nms-version", CoreBukkitUtils.getNMSVersion()); config.set("nms-version", MinecraftVersion.getNMSVersion());
config.set("server-version", Bukkit.getBukkitVersion()); config.set("bukkit-version", Bukkit.getBukkitVersion());
config.set("bukkit-version", Bukkit.getVersion()); config.set("server-version", Bukkit.getVersion());
if (sender instanceof Player) { if (sender instanceof Player) {
Player player = (Player) sender; Player player = (Player) sender;

View File

@@ -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.command.ChildCommand;
import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage; 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.CoreBukkitUtils;
import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@@ -66,7 +67,7 @@ public class LoreInfoCommand extends ChildCommand {
sender.sendMessage("§a物品 lore: 无"); sender.sendMessage("§a物品 lore: 无");
return true; return true;
} }
if (Integer.parseInt(CoreBukkitUtils.getMCVersion().split("\\.")[1]) >= 13) { if (MinecraftVersion.getVersion2() >= 13) {
if (meta.hasCustomModelData()) { if (meta.hasCustomModelData()) {
sender.sendMessage("§a物品自定义模型 ID: " + meta.getCustomModelData()); sender.sendMessage("§a物品自定义模型 ID: " + meta.getCustomModelData());
} else { } else {

View File

@@ -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 cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils;
import com.google.gson.*; import com.google.gson.*;

View File

@@ -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 cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils;
import com.google.gson.*; import com.google.gson.*;

View File

@@ -42,28 +42,6 @@ public final class CoreBukkitUtils {
private 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以上的服务端中获取头颅材质是在服务器上运行的 * 在1.11以上的服务端中获取头颅材质是在服务器上运行的

View File

@@ -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 版本号对比
* <p>
* 1: 当前版本高于输入版本号
* <p>
* 2: 当前版本等于输入版本号
* <p>
* 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);
}
}
}

View File

@@ -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.bungee.util.CoreBungeeCordUtils;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; 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.impl.ComponentTypeAdapter;
import cn.hamster3.mc.plugin.core.common.serializer.MessageTypeAdapter; import cn.hamster3.mc.plugin.core.common.impl.MessageTypeAdapter;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariConfig;

View File

@@ -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 com.google.gson.*;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;

View File

@@ -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 cn.hamster3.mc.plugin.core.common.data.DisplayMessage;
import com.google.gson.*; import com.google.gson.*;