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..70f2fd9
--- /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(FileConfiguration 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..6fcfd3a
--- /dev/null
+++ b/src/main/java/cc/carm/plugin/userprefix/wrapper/ItemStackWrapper.java
@@ -0,0 +1,43 @@
+package cc.carm.plugin.userprefix.wrapper;
+
+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")+" 不存在");
+ }
+ args.put("v", Bukkit.getServer().getUnsafe().getDataVersion());
+ }
+ }
+ 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: