From eb4ecaada9144584b39e44d9d2cf76044601c9ff Mon Sep 17 00:00:00 2001
From: Ghost_chu <2908803755@qq.com>
Date: Sun, 20 Feb 2022 19:36:39 +0800
Subject: [PATCH] =?UTF-8?q?Fixed=20#10,=20=E8=87=AA=E5=AE=9A=E4=B9=89?=
=?UTF-8?q?=E7=89=A9=E5=93=81=E5=8F=8D=E5=BA=8F=E5=88=97=E5=8C=96=E5=B7=A5?=
=?UTF-8?q?=E5=85=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 5 ++
.../java/cc/carm/plugin/userprefix/Main.java | 5 ++
.../configuration/file/FileConfig.java | 6 +--
.../userprefix/model/ConfiguredPrefix.java | 8 +++-
.../userprefix/util/ConfigurationUtil.java | 38 +++++++++++++++
.../userprefix/wrapper/ItemStackWrapper.java | 46 +++++++++++++++++++
src/main/resources/plugin.yml | 1 -
7 files changed, 103 insertions(+), 6 deletions(-)
create mode 100644 src/main/java/cc/carm/plugin/userprefix/util/ConfigurationUtil.java
create mode 100644 src/main/java/cc/carm/plugin/userprefix/wrapper/ItemStackWrapper.java
diff --git a/pom.xml b/pom.xml
index f9b6f6e..ca5719b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,6 +80,11 @@
https://repo1.maven.org/maven2/
+
+ sonatype-repo
+ https://oss.sonatype.org/content/repositories/snapshots/
+
+
github
GitHub Packages
diff --git a/src/main/java/cc/carm/plugin/userprefix/Main.java b/src/main/java/cc/carm/plugin/userprefix/Main.java
index 786edbf..5c5ea61 100644
--- a/src/main/java/cc/carm/plugin/userprefix/Main.java
+++ b/src/main/java/cc/carm/plugin/userprefix/Main.java
@@ -14,6 +14,7 @@ import cc.carm.plugin.userprefix.manager.ServiceManager;
import cc.carm.plugin.userprefix.manager.UserManager;
import cc.carm.plugin.userprefix.util.ColorParser;
import cc.carm.plugin.userprefix.util.MessageUtil;
+import cc.carm.plugin.userprefix.wrapper.ItemStackWrapper;
import net.luckperms.api.event.user.UserDataRecalculateEvent;
import org.bstats.bukkit.Metrics;
import org.bstats.charts.SimplePie;
@@ -22,6 +23,7 @@ import org.bukkit.Bukkit;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.PluginCommand;
import org.bukkit.command.TabCompleter;
+import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
@@ -39,6 +41,9 @@ public class Main extends JavaPlugin {
log(getName() + " " + getDescription().getVersion() + " &7开始加载...");
long startTime = System.currentTimeMillis();
+ log("注入序列化处理工具...");
+ ConfigurationSerialization.registerClass(ItemStackWrapper.class);
+
log("加载配置文件...");
ConfigManager.initConfig();
PrefixManager.init();
diff --git a/src/main/java/cc/carm/plugin/userprefix/configuration/file/FileConfig.java b/src/main/java/cc/carm/plugin/userprefix/configuration/file/FileConfig.java
index e62bdbc..4e243f4 100644
--- a/src/main/java/cc/carm/plugin/userprefix/configuration/file/FileConfig.java
+++ b/src/main/java/cc/carm/plugin/userprefix/configuration/file/FileConfig.java
@@ -1,8 +1,8 @@
package cc.carm.plugin.userprefix.configuration.file;
+import cc.carm.plugin.userprefix.util.ConfigurationUtil;
import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
@@ -35,7 +35,7 @@ public class FileConfig {
}
plugin.saveResource(fileName, true);
}
- this.config = YamlConfiguration.loadConfiguration(this.file);
+ this.config = ConfigurationUtil.bang(this.file);
}
public File getFile() {
@@ -56,7 +56,7 @@ public class FileConfig {
public void reload() {
if (getFile().exists()) {
- this.config = YamlConfiguration.loadConfiguration(getFile());
+ this.config = ConfigurationUtil.bang(getFile());
} else {
initFile();
}
diff --git a/src/main/java/cc/carm/plugin/userprefix/model/ConfiguredPrefix.java b/src/main/java/cc/carm/plugin/userprefix/model/ConfiguredPrefix.java
index dcad86c..dc70683 100644
--- a/src/main/java/cc/carm/plugin/userprefix/model/ConfiguredPrefix.java
+++ b/src/main/java/cc/carm/plugin/userprefix/model/ConfiguredPrefix.java
@@ -1,11 +1,11 @@
package cc.carm.plugin.userprefix.model;
import cc.carm.plugin.userprefix.util.ColorParser;
+import cc.carm.plugin.userprefix.util.ConfigurationUtil;
import cc.carm.plugin.userprefix.util.ItemStackFactory;
import cc.carm.plugin.userprefix.util.MessageUtil;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@@ -38,7 +38,11 @@ public class ConfiguredPrefix {
public ConfiguredPrefix(@NotNull File dataFile) {
this.dataFile = dataFile;
- this.configuration = YamlConfiguration.loadConfiguration(dataFile);
+ try {
+ this.configuration = ConfigurationUtil.bang(dataFile);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
if (getConfiguration() != null) {
this.identifier = getConfiguration().getString("identifier", "ERROR");
this.name = getConfiguration().getString("name", "ERROR");
diff --git a/src/main/java/cc/carm/plugin/userprefix/util/ConfigurationUtil.java b/src/main/java/cc/carm/plugin/userprefix/util/ConfigurationUtil.java
new file mode 100644
index 0000000..ccdc5a3
--- /dev/null
+++ b/src/main/java/cc/carm/plugin/userprefix/util/ConfigurationUtil.java
@@ -0,0 +1,38 @@
+package cc.carm.plugin.userprefix.util;
+
+import cc.carm.plugin.userprefix.wrapper.ItemStackWrapper;
+import com.google.common.io.Files;
+import org.bukkit.configuration.InvalidConfigurationException;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.inventory.ItemStack;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.StringJoiner;
+
+public class ConfigurationUtil {
+ public static FileConfiguration bang(File file) {
+ YamlConfiguration conf = new YamlConfiguration();
+ StringJoiner builder = new StringJoiner("\n");
+ try {
+ //noinspection UnstableApiUsage
+ Files.readLines(file, StandardCharsets.UTF_8).forEach(builder::add);
+ } catch (IOException e) {
+ e.printStackTrace();
+ return conf;
+ }
+ String tmpConf = builder.toString().replace("==: "+ ItemStack.class.getName(), "==: "+ ItemStackWrapper.class.getName());
+ try {
+ conf.loadFromString(tmpConf);
+ } catch (InvalidConfigurationException e) {
+ e.printStackTrace();
+ }
+ return conf;
+ }
+
+ public static String dong(YamlConfiguration conf) {
+ return conf.saveToString().replace("==: "+ ItemStackWrapper.class.getName(),"==: "+ ItemStack.class.getName());
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cc/carm/plugin/userprefix/wrapper/ItemStackWrapper.java b/src/main/java/cc/carm/plugin/userprefix/wrapper/ItemStackWrapper.java
new file mode 100644
index 0000000..5d5f2fe
--- /dev/null
+++ b/src/main/java/cc/carm/plugin/userprefix/wrapper/ItemStackWrapper.java
@@ -0,0 +1,46 @@
+package cc.carm.plugin.userprefix.wrapper;
+
+import cc.carm.plugin.userprefix.Main;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.configuration.serialization.ConfigurationSerializable;
+import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Map;
+
+public class ItemStackWrapper implements ConfigurationSerializable {
+ private static boolean unsafeAvailable;
+
+ static {
+ try {
+ Class.forName("org.bukkit.UnsafeValues");
+ unsafeAvailable = true;
+ } catch (ClassNotFoundException e) {
+ unsafeAvailable = false;
+ }
+ }
+
+ @NotNull
+ @Override
+ public Map serialize() {
+ throw new UnsupportedOperationException("Use ConfigurationUtil#dong to save configuration");
+ }
+
+ @NotNull
+ public static ItemStack deserialize(@NotNull Map args) {
+ // static define will cause problem, lazy load it
+ if (unsafeAvailable) {
+ if (!args.containsKey("v")) {
+ Material material = Material.matchMaterial(args.get("type").toString());
+ if (material == null) {
+ throw new IllegalArgumentException("物品 "+args.get("type")+" 不存在");
+ }
+ Main.getInstance().getLogger().info("Patched ItemStack with number" + Bukkit.getServer().getUnsafe().getDataVersion() + "!");
+ args.put("v", Bukkit.getServer().getUnsafe().getDataVersion());
+ }
+ }
+ args.forEach((key, value) -> Main.log(key + ": " + value));
+ return ItemStack.deserialize(args);
+ }
+}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 42c2caf..7293325 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -7,7 +7,6 @@ authors:
- SakuraGame
website: ${project.url}
description: ${project.description}
-
api-version: 1.13
depend: