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: