diff --git a/src/main/java/pers/xanadu/enderdragon/EnderDragon.java b/src/main/java/pers/xanadu/enderdragon/EnderDragon.java index 000f988..6835535 100644 --- a/src/main/java/pers/xanadu/enderdragon/EnderDragon.java +++ b/src/main/java/pers/xanadu/enderdragon/EnderDragon.java @@ -106,6 +106,7 @@ public final class EnderDragon extends JavaPlugin { finish = true; } public static void reloadAll(){ + ItemManager.getLegacy().set(false); WorldManager.reload(); GlowManager.reload(); EnderDragon.getInstance().loadFiles(); @@ -128,6 +129,12 @@ public final class EnderDragon extends JavaPlugin { this.cancel(); DragonManager.reload(); GuiManager.loadGui(); + if (ItemManager.getLegacy().get()){ + Lang.error("I'm sorry that data_type 'nbt' and 'advanced' probably will be disabled in 1.20.5+"); + Lang.error("It is recommended to migrate item configuration to bukkit format for compatibility."); + Lang.error("You can use /ed migrate to generate new config."); + } + runnable.runTaskTimer(plugin,0,1); } }.runTaskTimer(plugin, 1, 5); diff --git a/src/main/java/pers/xanadu/enderdragon/config/FileUpdater.java b/src/main/java/pers/xanadu/enderdragon/config/FileUpdater.java index 55007bc..ca85c37 100644 --- a/src/main/java/pers/xanadu/enderdragon/config/FileUpdater.java +++ b/src/main/java/pers/xanadu/enderdragon/config/FileUpdater.java @@ -1,5 +1,6 @@ package pers.xanadu.enderdragon.config; +import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; @@ -130,45 +131,113 @@ public class FileUpdater { // Lang.warn("Attention: Please confirm the accuracy before using new config!"); } public static void migrate(){ - File folder = new File(plugin.getDataFolder(),"reward"); - if (folder.exists()){ - File[] files = folder.listFiles(f -> f.getName().endsWith(".yml")); - if (files == null || files.length == 0) { - Lang.warn("No files need to be migrated!"); - return; - } - for (File file : files){ - FileConfiguration config = YamlConfiguration.loadConfiguration(file); - Config.copyFile(file,"new/reward/"+file.getName(),true); - File gen_file = new File(plugin.getDataFolder(),"new/reward/"+file.getName()); - YamlConfiguration new_cfg = YamlConfiguration.loadConfiguration(gen_file); - if(Config.advanced_setting_backslash_split_reward) new_cfg.options().pathSeparator('\\'); - List gen = new ArrayList<>(); - List list = config.getStringList("list"); - for(String str : list){ - YamlConfiguration yml = new YamlConfiguration(); - if(Config.advanced_setting_backslash_split_reward) yml.options().pathSeparator('\\'); - try{ - yml.loadFromString(str); - Reward reward = ItemManager.readAsReward(yml); - if (reward == null) continue; - gen.add(saveReward(reward)); - }catch (InvalidConfigurationException e){ - Lang.error(Lang.plugin_item_read_error + str); - } - } - new_cfg.set("list",gen); - try{ - new_cfg.save(gen_file); - }catch (IOException e){ - e.printStackTrace(); - } - } - Lang.info("New reward config files are generated in plugins/EnderDragon/migrate."); - } + boolean b1 = handleRewards(); + boolean b2 = handleGuiItems(); + if (b1 || b2) Lang.info("New reward configuration files are generated in plugins/EnderDragon/migrate."); else Lang.warn("No files need to be migrated!"); } - public static String saveReward(Reward reward){ + private static boolean handleGuiItems(){ + File folder = new File(plugin.getDataFolder(),"gui"); + if (!folder.exists()) return false; + File[] files = folder.listFiles(f -> f.getName().endsWith(".yml")); + if (files == null || files.length == 0) { + return false; + } + for (File file : files){ + Config.copyFile(file,"new/gui/"+file.getName(),true); + File gen_file = new File(plugin.getDataFolder(),"new/gui/"+file.getName()); + YamlConfiguration cfg = YamlConfiguration.loadConfiguration(gen_file); + cfg.getKeys(false).forEach(key->{ + ConfigurationSection gui = cfg.getConfigurationSection(key); + if (gui == null) return; + ConfigurationSection Items = gui.getConfigurationSection("Items"); + if (Items == null) return; + Items.getKeys(false).forEach(ch -> { + ConfigurationSection slot = Items.getConfigurationSection(ch); + if (slot == null) return; + if (!slot.contains("data")) return; + ItemStack itemStack = readItemStack(slot,"data"); + ItemManager.save2section_simple(itemStack,slot,"data"); + if (!slot.contains("data_disable")) return; + itemStack = readItemStack(slot,"data_disable"); + ItemManager.save2section_simple(itemStack,slot,"data_disable"); + }); + Items.getKeys(false).forEach(ch -> { + ConfigurationSection slot = Items.getConfigurationSection(ch); + if (slot == null) return; + if (slot.contains("data_type")){ + slot.set("data_type","simple"); + } + else if (slot.contains("data") || slot.contains("data_disable")) { + slot.set("data_type","simple"); + } + }); + }); + try{ + cfg.save(gen_file); + }catch (IOException e){ + e.printStackTrace(); + } + } + return true; + } + private static ItemStack readItemStack(ConfigurationSection section,final String path){ + ItemStack itemStack; + final String type = section.getString("data_type",""); + switch (type){ + case "nbt": + itemStack = ItemManager.readFromNBT(section,path); + ItemManager.getLegacy().compareAndSet(false,true); + break; + case "advanced": + itemStack = ItemManager.readFromAdvData(section,path); + ItemManager.getLegacy().compareAndSet(false,true); + break; + case "simple": + itemStack = ItemManager.readFromSimple(section,path); + break; + default: + itemStack = ItemManager.readFromBukkit(section,path); + } + return itemStack; + } + private static boolean handleRewards(){ + File folder = new File(plugin.getDataFolder(),"reward"); + if (!folder.exists()) return false; + File[] files = folder.listFiles(f -> f.getName().endsWith(".yml")); + if (files == null || files.length == 0) { + return false; + } + for (File file : files){ + FileConfiguration config = YamlConfiguration.loadConfiguration(file); + Config.copyFile(file,"new/reward/"+file.getName(),true); + File gen_file = new File(plugin.getDataFolder(),"new/reward/"+file.getName()); + YamlConfiguration new_cfg = YamlConfiguration.loadConfiguration(gen_file); + if(Config.advanced_setting_backslash_split_reward) new_cfg.options().pathSeparator('\\'); + List gen = new ArrayList<>(); + List list = config.getStringList("list"); + for(String str : list){ + YamlConfiguration yml = new YamlConfiguration(); + if(Config.advanced_setting_backslash_split_reward) yml.options().pathSeparator('\\'); + try{ + yml.loadFromString(str); + Reward reward = ItemManager.readAsReward(yml); + if (reward == null) continue; + gen.add(saveReward(reward)); + }catch (InvalidConfigurationException e){ + Lang.error(Lang.plugin_item_read_error + str); + } + } + new_cfg.set("list",gen); + try{ + new_cfg.save(gen_file); + }catch (IOException e){ + e.printStackTrace(); + } + } + return true; + } + private static String saveReward(Reward reward){ Chance chance = reward.getChance(); ItemStack item = reward.getItem(); double value = chance.getValue(); diff --git a/src/main/java/pers/xanadu/enderdragon/gui/GUI.java b/src/main/java/pers/xanadu/enderdragon/gui/GUI.java index e9ff465..53ba05b 100644 --- a/src/main/java/pers/xanadu/enderdragon/gui/GUI.java +++ b/src/main/java/pers/xanadu/enderdragon/gui/GUI.java @@ -50,7 +50,7 @@ public class GUI { this.page = a; for(int i=0;i(); - Config.dragon_setting_file.add("default:5"); - Config.dragon_setting_file.add("special:5"); - } - for(String str : Config.dragon_setting_file){ - String[] s = str.split(":"); - if(s.length != 2){ - Lang.error("\"dragon_setting_file\" in config.yml error! Key: " + str); - continue; - } - String path = "setting/" + s[0] + ".yml"; - int edge = -1; - try { - edge = Integer.parseInt(s[1]); - } catch (NumberFormatException ignored){} - if(edge < 0) { - Lang.error("\"dragon_setting_file\" in config.yml error! Key: " + str); - continue; - } - File file = new File(plugin.getDataFolder(),path); - if(!file.exists()) { - try{ - plugin.saveResource("setting/"+file.getName(),false); - file = new File(plugin.getDataFolder(),path); - }catch (Exception ignored){ - Lang.error("Not Found setting/" + s[0] + ".yml ,skipped it."); - continue; - } - } - FileConfiguration fc = YamlConfiguration.loadConfiguration(file); - if(!Version.setting_dragon.equals(fc.getString("version"))){ - Lang.warn(Lang.plugin_wrong_file_version.replace("{file_name}", file.getName())); - } - readSettingFile(fc,edge); - } - dragons.sort((o1, o2) -> o2.priority - o1.priority); - RewardManager.reload(); + dragons.clear(); + mp.clear(); + dragon_names.clear(); + sum = 0; + if(Config.dragon_setting_file == null){ + Lang.error("\"dragon_setting_file\" in config.yml is empty!"); + Lang.warn("Plugin will use the default config..."); + Config.dragon_setting_file = new ArrayList<>(); + Config.dragon_setting_file.add("default:5"); + Config.dragon_setting_file.add("special:5"); + } + for(String str : Config.dragon_setting_file){ + String[] s = str.split(":"); + if(s.length != 2){ + Lang.error("\"dragon_setting_file\" in config.yml error! Key: " + str); + continue; } - }.runTaskAsynchronously(plugin); - + String path = "setting/" + s[0] + ".yml"; + int edge = -1; + try { + edge = Integer.parseInt(s[1]); + } catch (NumberFormatException ignored){} + if(edge < 0) { + Lang.error("\"dragon_setting_file\" in config.yml error! Key: " + str); + continue; + } + File file = new File(plugin.getDataFolder(),path); + if(!file.exists()) { + try{ + plugin.saveResource("setting/"+file.getName(),false); + file = new File(plugin.getDataFolder(),path); + }catch (Exception ignored){ + Lang.error("Not Found setting/" + s[0] + ".yml ,skipped it."); + continue; + } + } + FileConfiguration fc = YamlConfiguration.loadConfiguration(file); + if(!Version.setting_dragon.equals(fc.getString("version"))){ + Lang.warn(Lang.plugin_wrong_file_version.replace("{file_name}", file.getName())); + } + readSettingFile(fc,edge); + } + dragons.sort((o1, o2) -> o2.priority - o1.priority); + RewardManager.reload(); } public static MyDragon judge(){ if(Config.special_dragon_jude_mode.equalsIgnoreCase("weight")){ diff --git a/src/main/java/pers/xanadu/enderdragon/manager/GuiManager.java b/src/main/java/pers/xanadu/enderdragon/manager/GuiManager.java index 1c8f50e..fa0b1e2 100644 --- a/src/main/java/pers/xanadu/enderdragon/manager/GuiManager.java +++ b/src/main/java/pers/xanadu/enderdragon/manager/GuiManager.java @@ -17,27 +17,22 @@ import static pers.xanadu.enderdragon.EnderDragon.plugin; public class GuiManager { private static HashMap f = new HashMap<>(); public static void loadGui(){ - new BukkitRunnable(){ - @Override - public void run(){ - File folder = new File(plugin.getDataFolder(),"gui"); - if(!folder.exists()) return; - File[] files = folder.listFiles(); - if(files == null) return; - for(File file : files){ - if(!file.getName().endsWith(".yml")) continue; - Lang.info(Lang.plugin_read_file + file.getName()); - FileConfiguration fileConfiguration = YamlConfiguration.loadConfiguration(file); - Iterator it = fileConfiguration.getKeys(false).iterator(); - while (it.hasNext()){ - String name = (String) it.next(); - ConfigurationSection section = fileConfiguration.getConfigurationSection(name); - GUIWrapper guiWrapper = new GUIWrapper(section); - f.put(name, guiWrapper); - } - } + File folder = new File(plugin.getDataFolder(),"gui"); + if(!folder.exists()) return; + File[] files = folder.listFiles(); + if(files == null) return; + for(File file : files){ + if(!file.getName().endsWith(".yml")) continue; + Lang.info(Lang.plugin_read_file + file.getName()); + FileConfiguration fileConfiguration = YamlConfiguration.loadConfiguration(file); + Iterator it = fileConfiguration.getKeys(false).iterator(); + while (it.hasNext()){ + String name = (String) it.next(); + ConfigurationSection section = fileConfiguration.getConfigurationSection(name); + GUIWrapper guiWrapper = new GUIWrapper(section); + f.put(name, guiWrapper); } - }.runTaskAsynchronously(plugin); + } } public static void disable(){ f.clear(); diff --git a/src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java b/src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java index 02f1f1c..e49325f 100644 --- a/src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java +++ b/src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java @@ -20,10 +20,11 @@ import pers.xanadu.enderdragon.reward.Chance; import pers.xanadu.enderdragon.util.Version; import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; public class ItemManager { @Getter - private static boolean legacy = false; + private static final AtomicBoolean legacy = new AtomicBoolean(false); public static String write(Reward reward){ Chance chance = reward.getChance(); return write(reward.getItem(),chance.getValue(),chance.getStr(),reward.getName()); @@ -51,104 +52,12 @@ public class ItemManager { } case "_advanced" : { section.set("data_type","advanced"); - ConfigurationSection section_data = section.createSection("data"); - //type - String type = item.getType().name(); - section_data.set("type",type); - if("AIR".equals(type)) break; - //amount - int amount = item.getAmount(); - section_data.set("amount",amount); - //damage - int damage = item.getDurability(); - if(damage != 0) section_data.set("damage",damage); - ItemMeta meta = item.getItemMeta(); - if(meta == null) break; - //DisplayName - String display_name = meta.getDisplayName(); - if(!"".equals(display_name)) section_data.set("display_name",display_name); - //LocalizedName - if(meta.hasLocalizedName()){ - section_data.set("localized_name",meta.getLocalizedName()); - } - //lore - List lores = meta.getLore(); - if(lores != null) section_data.set("lore",lores); - //Enchantments - if(meta.hasEnchants()){ - ConfigurationSection enchants = section_data.createSection("enchants"); - Map mp = meta.getEnchants(); - mp.forEach((enchantment,level) -> enchants.set(enchantment.getName(),level)); - } - if(Version.mcMainVersion>=14 || "v1_13_R2".equals(Version.getVersion())){ - //AttributeModifiers - if(meta.hasAttributeModifiers()){ - ConfigurationSection attributes = section_data.createSection("AttributeModifiers"); - meta.getAttributeModifiers().forEach((attribute,modifier)->{ - attributes.set(attribute.name(),modifier); - }); - } - } - if(Version.mcMainVersion>=14){ - //CustomModelData - if(meta.hasCustomModelData()) { - section_data.set("CustomModelData",meta.getCustomModelData());//int - } - //PersistentDataContainer - PersistentDataContainer dataContainer = meta.getPersistentDataContainer(); - if(!dataContainer.isEmpty()){ - ConfigurationSection dataContainer_section = section_data.createSection("PersistentDataContainer"); - String cpd = EnderDragon.getInstance().getNMSManager().PDCtoString(dataContainer); - dataContainer_section.set("data_type","nbt"); - dataContainer_section.set("data",cpd); - } - } - //RepairCost - if(meta instanceof Repairable){ - Repairable repairable = (Repairable) meta; - section_data.set("RepairCost",repairable.getRepairCost()); - } - //ItemFlags - Set flags = meta.getItemFlags(); - if(!flags.isEmpty()){ - List list = new ArrayList<>(); - flags.forEach(flag ->{ - list.add(flag.name()); - }); - section_data.set("ItemFlags",list); - } - //Unbreakable - section_data.set("unbreakable",meta.isUnbreakable()); - //internal - Object cpd = EnderDragon.getInstance().getNMSManager().getCPD(item); - Map mp = EnderDragon.getInstance().getNMSManager().cpdToMap(cpd); - if(mp.containsKey("tag")){ - cpd = mp.get("tag"); - mp = EnderDragon.getInstance().getNMSManager().cpdToMap(cpd); - mp.remove("Damage"); - if(mp.containsKey("display")){ - Object display = mp.get("display"); - Map display_mp = EnderDragon.getInstance().getNMSManager().cpdToMap(display); - display_mp.remove("Name"); - display_mp.remove("LocName"); - display_mp.remove("Lore"); - Object new_display = EnderDragon.getInstance().getNMSManager().getNBTTagCompound(display_mp); - mp.put("display",new_display); - } - //mp.remove("display");//Name, LocName, Lore, color - mp.remove("Enchantments"); - mp.remove("AttributeModifiers"); - mp.remove("CustomModelData"); - mp.remove("PublicBukkitValues");//PersistentDataContainer - mp.remove("RepairCost"); - mp.remove("HideFlags");//ItemFlags - mp.remove("Unbreakable"); - //CanDestroy, CanPlaceOn - Object new_cpd = EnderDragon.getInstance().getNMSManager().getNBTTagCompound(mp); - ConfigurationSection internal = section_data.createSection("internal"); - internal.set("data_type","nbt"); - internal.set("data",new_cpd.toString()); - } + save2section_adv(item,section); + break; + } + case "simple": { + section.set("data_type","simple"); + save2section_simple(item,section); break; } case "nbt": @@ -175,11 +84,11 @@ public class ItemManager { //data_type may be null ItemStack item; if("nbt".equals(data_type)) { - legacy = true; + legacy.compareAndSet(false,true); item = readFromNBT(section0,"data"); } else if("advanced".equals(data_type)) { - legacy = true; + legacy.compareAndSet(false,true); item = readFromAdvData(section0, "data"); } else { @@ -321,12 +230,244 @@ public class ItemManager { if (nbt == null) return new ItemStack(Material.AIR); return section.getItemStack(path); } + public static ItemStack readFromSimple(ConfigurationSection section, String path){ + if (section == null) return new ItemStack(Material.AIR); + section = section.getConfigurationSection(path); + if(section == null) return new ItemStack(Material.AIR); + //material + String type = section.getString("material"); + if (type==null || "AIR".equals(type)) return new ItemStack(Material.AIR); + Material material = Material.getMaterial(type); + if (material == null) return new ItemStack(Material.AIR); + //amount + int amount = section.getInt("amount",1); + ItemStack itemStack = new ItemStack(material,amount); + ItemMeta meta = itemStack.getItemMeta(); + assert meta != null; + //display_name + String display_name = section.getString("display_name"); + if (display_name != null) meta.setDisplayName(display_name); + //loc_name + if(section.contains("loc_name")){ + String LocalizedName = section.getString("loc_name"); + if(LocalizedName != null) meta.setLocalizedName(LocalizedName); + } + //lore + if(section.contains("lore")){ + List lore = section.getStringList("lore"); + if(!lore.isEmpty()) meta.setLore(lore); + } + //enchants + if(section.contains("enchants")){ + ConfigurationSection enchants = section.getConfigurationSection("enchants"); + if(enchants != null){ + enchants.getKeys(false).forEach(key->{ + Enchantment enchantment = Enchantment.getByName(key); + int level = enchants.getInt(key); + if(enchantment != null && level>0){ + meta.addEnchant(enchantment,level,true); + } + }); + } + } + //CustomModelData + if(Version.mcMainVersion>=14 && section.contains("CustomModelData")){ + int CustomModelData = section.getInt("CustomModelData"); + meta.setCustomModelData(CustomModelData); + } + //RepairCost + if(section.contains("RepairCost")){ + int cost = section.getInt("RepairCost"); + if(meta instanceof Repairable){ + ((Repairable)meta).setRepairCost(cost); + } + } + //Unbreakable + if(section.contains("unbreakable")) + meta.setUnbreakable(section.getBoolean("unbreakable")); + //ItemFlags + if(section.contains("ItemFlags")){ + List names = section.getStringList("ItemFlags"); + names.forEach(name->meta.addItemFlags(ItemFlag.valueOf(name))); + } + itemStack.setItemMeta(meta); + //damage + if (section.contains("damage")){ + int damage = section.getInt("damage"); + // 在itemStack.setItemMeta(meta)之后,直接设置到itemStack上 + itemStack.setDurability((short) damage); + } + return itemStack; + } public static ItemStack readFromString(String str){ YamlConfiguration yml = new YamlConfiguration(); if(Config.advanced_setting_backslash_split_reward) yml.options().pathSeparator('\\'); yml.set("test",str); return yml.getItemStack("test"); } + public static void save2section_simple(ItemStack itemStack, ConfigurationSection section){ + save2section_simple(itemStack,section,"data"); + } + public static void save2section_simple(ItemStack itemStack, ConfigurationSection section,String path){ + ConfigurationSection res = section.createSection(path); + //material + String material = itemStack.getType().name(); + res.set("material",material); + if ("AIR".equals(material)) return; + //amount + int amount = itemStack.getAmount(); + res.set("amount",amount); + //damage + int damage = itemStack.getDurability(); + if (damage != 0) res.set("damage",damage); + ItemMeta meta = itemStack.getItemMeta(); + if (meta == null) return; + //display_name + if (meta.hasDisplayName()){ + String display_name = meta.getDisplayName(); + res.set("display_name",display_name); + } + //loc_name + if (meta.hasLocalizedName()){ + String loc_name = meta.getLocalizedName(); + res.set("loc_name",loc_name); + } + //lore + if (meta.hasLore()){ + List lore = meta.getLore(); + res.set("lore",lore); + } + //enchants + if (meta.hasEnchants()){ + ConfigurationSection enchants = res.createSection("enchants"); + Map mp = meta.getEnchants(); + mp.forEach((enchantment, level) -> enchants.set(enchantment.getName(),level)); + } + //CustomModelData + if(Version.mcMainVersion>=14 && meta.hasCustomModelData()){ + res.set("CustomModelData",meta.getCustomModelData());//int + } + //RepairCost + if(meta instanceof Repairable){ + Repairable repairable = (Repairable) meta; + int RepairCost = repairable.getRepairCost(); + if (RepairCost != 0) res.set("RepairCost",RepairCost); + } + //Unbreakable + if (meta.isUnbreakable()) { + res.set("unbreakable",true); + } + //ItemFlags + Set flags = meta.getItemFlags(); + if(!flags.isEmpty()){ + List list = new ArrayList<>(); + flags.forEach(flag ->{ + list.add(flag.name()); + }); + res.set("ItemFlags",list); + } + //cannot handle nbt currently + } + public static void save2section_adv(ItemStack item, ConfigurationSection section){ + ConfigurationSection section_data = section.createSection("data"); + //type + String type = item.getType().name(); + section_data.set("type",type); + if("AIR".equals(type)) return; + //amount + int amount = item.getAmount(); + section_data.set("amount",amount); + //damage + int damage = item.getDurability(); + if(damage != 0) section_data.set("damage",damage); + ItemMeta meta = item.getItemMeta(); + if(meta == null) return; + //DisplayName + String display_name = meta.getDisplayName(); + if(!"".equals(display_name)) section_data.set("display_name",display_name); + //LocalizedName + if(meta.hasLocalizedName()){ + section_data.set("localized_name",meta.getLocalizedName()); + } + //lore + List lores = meta.getLore(); + if(lores != null) section_data.set("lore",lores); + //Enchantments + if(meta.hasEnchants()){ + ConfigurationSection enchants = section_data.createSection("enchants"); + Map mp = meta.getEnchants(); + mp.forEach((enchantment,level) -> enchants.set(enchantment.getName(),level)); + } + if(Version.mcMainVersion>=14 || "v1_13_R2".equals(Version.getVersion())){ + //AttributeModifiers + if(meta.hasAttributeModifiers()){ + ConfigurationSection attributes = section_data.createSection("AttributeModifiers"); + meta.getAttributeModifiers().forEach((attribute,modifier)->{ + attributes.set(attribute.name(),modifier); + }); + } + } + if(Version.mcMainVersion>=14){ + //CustomModelData + if(meta.hasCustomModelData()) { + section_data.set("CustomModelData",meta.getCustomModelData());//int + } + //PersistentDataContainer + PersistentDataContainer dataContainer = meta.getPersistentDataContainer(); + if(!dataContainer.isEmpty()){ + ConfigurationSection dataContainer_section = section_data.createSection("PersistentDataContainer"); + String cpd = EnderDragon.getInstance().getNMSManager().PDCtoString(dataContainer); + dataContainer_section.set("data_type","nbt"); + dataContainer_section.set("data",cpd); + } + } + //RepairCost + if(meta instanceof Repairable){ + Repairable repairable = (Repairable) meta; + section_data.set("RepairCost",repairable.getRepairCost()); + } + //ItemFlags + Set flags = meta.getItemFlags(); + if(!flags.isEmpty()){ + List list = new ArrayList<>(); + flags.forEach(flag ->{ + list.add(flag.name()); + }); + section_data.set("ItemFlags",list); + } + //Unbreakable + section_data.set("unbreakable",meta.isUnbreakable()); + //internal + Object cpd = EnderDragon.getInstance().getNMSManager().getCPD(item); + Map mp = EnderDragon.getInstance().getNMSManager().cpdToMap(cpd); + if(mp.containsKey("tag")){ + cpd = mp.get("tag"); + mp = EnderDragon.getInstance().getNMSManager().cpdToMap(cpd); + mp.remove("Damage"); + if(mp.containsKey("display")){ + Object display = mp.get("display"); + Map display_mp = EnderDragon.getInstance().getNMSManager().cpdToMap(display); + display_mp.remove("Name"); + display_mp.remove("LocName"); + display_mp.remove("Lore"); + Object new_display = EnderDragon.getInstance().getNMSManager().getNBTTagCompound(display_mp); + mp.put("display",new_display); + } + //mp.remove("display");//Name, LocName, Lore, color + mp.remove("Enchantments"); + mp.remove("AttributeModifiers"); + mp.remove("CustomModelData"); + mp.remove("PublicBukkitValues");//PersistentDataContainer + mp.remove("RepairCost"); + mp.remove("HideFlags");//ItemFlags + mp.remove("Unbreakable"); + //CanDestroy, CanPlaceOn + Object new_cpd = EnderDragon.getInstance().getNMSManager().getNBTTagCompound(mp); + ConfigurationSection internal = section_data.createSection("internal"); + internal.set("data_type","nbt"); + internal.set("data",new_cpd.toString()); + } + } public static void addLoreFront(ItemStack item, String lore){ ItemMeta meta = item.getItemMeta(); if(meta != null) { @@ -341,7 +482,7 @@ public class ItemManager { item.setItemMeta(meta); } } - public static void addLoreBack(ItemStack item, String lore){ + public static void addLoreTail(ItemStack item, String lore){ ItemMeta meta = item.getItemMeta(); if(meta != null) { List lores = meta.getLore(); @@ -360,81 +501,6 @@ public class ItemManager { if(item.getType() == Material.AIR) return true; return false; } - private static void saveUnhandledTags(ConfigurationSection section, Map mp){ - mp.forEach((k,v)->{ - //Bukkit.broadcastMessage(k+": "+v.getClass().toString()); - if(v instanceof Map){ - saveUnhandledTags(section.createSection(k), (Map) v); - } - else section.set(k,v.toString()); - }); - } -/** - private static void saveUnhandledTags(ConfigurationSection section, Map mp){ - mp.forEach((k,v)->{ - Object obj = v; - //Bukkit.broadcastMessage(obj.getClass().toString()); - try{ - obj = EnderDragon.getInstance().getNMSItemManager().parseNBT(v); - }catch (Throwable ignored){ - - } - if(obj instanceof Map){ - saveUnhandledTags(section.createSection(k), (Map) obj); - } - else section.set(k,obj); - }); - }**/ - private static Map getUnhandledTags(ConfigurationSection section){ - Map res = new HashMap<>(); - section.getKeys(false).forEach(key->{ - Object obj = section.get(key); - if(obj instanceof ConfigurationSection){ - ConfigurationSection subSection = section.getConfigurationSection(key); - if(subSection != null){ - obj = getUnhandledTags(subSection); -// Object mp = getUnhandledTags(subSection); -// Bukkit.getLogger().info(mp.getClass().toString()); -// try{ -// obj = EnderDragon.getInstance().getNMSItemManager().getNBTBase(mp); -// }catch (Throwable throwable){ -// -// } - } - } - else obj = EnderDragon.getInstance().getNMSManager().getCPD((String) obj); - //else obj = EnderDragon.getInstance().getNMSItemManager().readAsNBTBase((String) obj); - res.put(key,obj); - }); - return res; - } - -// private static Object dfs(ConfigurationSection section){ -// section.getKeys(false).forEach(key->{ -// Object obj = section.get(key); -// if(obj instanceof ConfigurationSection){ -// ConfigurationSection subSection = section.getConfigurationSection(key); -// if(subSection != null) obj = dfs(subSection); -// } -// else obj = EnderDragon.getInstance().getNMSItemManager().readAsNBTBase((String) obj); -// -// }); -// return -// } - -// //internal -// Map mp = EnderDragon.getInstance().getNMSManager().getUnhandledTags(meta); -// if(mp != null){ -// ConfigurationSection internal = section_data.createSection("internal"); -// mp.forEach((k,v)->{ -// Object obj = EnderDragon.getInstance().getNMSItemManager().parseNBT(v); -// -// if(obj instanceof Map) obj = obj.toString(); -// else if(obj instanceof List) obj = obj.toString(); -// -// internal.set(k,obj); -// }); -// } diff --git a/src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java b/src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java index 8e961c0..0d8d317 100644 --- a/src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java +++ b/src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java @@ -43,11 +43,6 @@ public class RewardManager { } } } - if (ItemManager.isLegacy()){ - Lang.error("I'm sorry that data_type 'nbt' and 'advanced' probably will be disabled in 1.20.5+"); - Lang.error("It is recommended to migrate item configuration to bukkit format for compatibility."); - Lang.error("You can use /ed migrate to generate new config."); - } } public static void addItem(String key,Reward reward){ addItem(key,reward.getItem(),reward.getChance()); diff --git a/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java b/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java index 5bc3abe..27f1744 100644 --- a/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java +++ b/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java @@ -34,7 +34,6 @@ public class NMSUtil { private Class WorldClass; private Class CraftWorldClass; private Class WorldProviderClass; - //private Class WorldProviderTheEndClass; private Class CraftItemStackClass; private Class CraftMetaItemClass; private Class NMSItemStackClass; diff --git a/src/main/java/pers/xanadu/enderdragon/util/Version.java b/src/main/java/pers/xanadu/enderdragon/util/Version.java index 2254b05..99b7493 100644 --- a/src/main/java/pers/xanadu/enderdragon/util/Version.java +++ b/src/main/java/pers/xanadu/enderdragon/util/Version.java @@ -9,11 +9,11 @@ import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager; import static org.bukkit.Bukkit.getServer; public class Version { - public static final String setting_dragon = "2.5.0"; + public static final String setting_dragon = "2.4.0"; public static final String lang = "2.2.0"; public static final String config = "2.3.0"; public static final String data = "2.2.0"; - public static final String reward = "2.5.0"; + public static final String reward = "2.1.0"; public static int mcMainVersion; public static int mcPatchVersion; private static String version = "no version found"; diff --git a/src/main/resources/setting/default-zhcn.yml b/src/main/resources/setting/default-zhcn.yml index 1f7c9c6..358acfa 100644 --- a/src/main/resources/setting/default-zhcn.yml +++ b/src/main/resources/setting/default-zhcn.yml @@ -1,5 +1,5 @@ #文件版本,请勿修改 -version: 2.5.0 +version: 2.4.0 #用于插件内部识别,每一种末影龙的unique_name都需要设为不同值! unique_name: 'default' diff --git a/src/main/resources/setting/default.yml b/src/main/resources/setting/default.yml index 462c0f5..05847e5 100644 --- a/src/main/resources/setting/default.yml +++ b/src/main/resources/setting/default.yml @@ -1,4 +1,4 @@ -version: 2.5.0 +version: 2.4.0 #This is used for plugin internal identification. #Please make sure the value is unique among all the types of dragons diff --git a/src/main/resources/setting/special-zhcn.yml b/src/main/resources/setting/special-zhcn.yml index d6a74d9..78e1cbc 100644 --- a/src/main/resources/setting/special-zhcn.yml +++ b/src/main/resources/setting/special-zhcn.yml @@ -1,5 +1,5 @@ #文件版本,请勿修改 -version: 2.5.0 +version: 2.4.0 #用于插件内部识别,每一种末影龙的unique_name都需要设为不同值! unique_name: 'special001' diff --git a/src/main/resources/setting/special.yml b/src/main/resources/setting/special.yml index fdf4017..65640f5 100644 --- a/src/main/resources/setting/special.yml +++ b/src/main/resources/setting/special.yml @@ -1,7 +1,7 @@ ## Special thanks to Phaxius for the translation # File version, do not edit -version: 2.5.0 +version: 2.4.0 # Unique ID used by plugin to identify each type of dragon # unique_name needs to be different in each dragon settings file