diff --git a/src/main/java/net/Indyuce/mmoitems/command/MMOItemsCommand.java b/src/main/java/net/Indyuce/mmoitems/command/MMOItemsCommand.java index 95de3013..673a3c51 100644 --- a/src/main/java/net/Indyuce/mmoitems/command/MMOItemsCommand.java +++ b/src/main/java/net/Indyuce/mmoitems/command/MMOItemsCommand.java @@ -149,7 +149,7 @@ public class MMOItemsCommand implements CommandExecutor { } sender.sendMessage(""); - sender.sendMessage(ChatColor.YELLOW + "Use " + ChatColor.GOLD + "/mi update " + update.getId() + ChatColor.YELLOW + " to apply this config update."); + sender.sendMessage(ChatColor.YELLOW + "Use " + ChatColor.GOLD + "/mi update apply " + update.getId() + ChatColor.YELLOW + " to apply this config update."); } if (args[1].equalsIgnoreCase("list")) { @@ -176,7 +176,7 @@ public class MMOItemsCommand implements CommandExecutor { if (id != Integer.parseInt(args[3])) throw new NumberFormatException(); } catch (NumberFormatException exception) { - sender.sendMessage(ChatColor.RED + "Specified IDs do not match."); + sender.sendMessage(ChatColor.RED + "Update IDs do not match. Make sure you enter twice the same ID to confirm you want to apply this update."); return true; } @@ -188,7 +188,7 @@ public class MMOItemsCommand implements CommandExecutor { PluginUpdate update = MMOItems.plugin.getUpdates().get(id); sender.sendMessage(ChatColor.YELLOW + "Applying config update " + id + "..."); update.apply(sender); - sender.sendMessage(ChatColor.YELLOW + "Config update " + id + " was successfully applied."); + sender.sendMessage(ChatColor.YELLOW + "Config update " + id + " was successfully applied. Check the console for potential update error logs."); } } // ================================================================================================================================== diff --git a/src/main/java/net/Indyuce/mmoitems/manager/PluginUpdateManager.java b/src/main/java/net/Indyuce/mmoitems/manager/PluginUpdateManager.java index ecc5e018..d33eb534 100644 --- a/src/main/java/net/Indyuce/mmoitems/manager/PluginUpdateManager.java +++ b/src/main/java/net/Indyuce/mmoitems/manager/PluginUpdateManager.java @@ -1,11 +1,18 @@ package net.Indyuce.mmoitems.manager; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.logging.Level; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; import net.Indyuce.mmoitems.MMOItems; import net.Indyuce.mmoitems.api.ConfigFile; @@ -21,7 +28,7 @@ public class PluginUpdateManager { private Map updates = new HashMap<>(); public PluginUpdateManager() { - register(new PluginUpdate(1, new String[] { "Applies a fix for skull textures values in 4.7.1.", "Texture values data storage changed in 4.7.1 due to the UUID change." }, (sender) -> { + register(new PluginUpdate(1, new String[] { "Applies a fix for skull textures values in 4.7.1.", "Texture values data storage changed in 4.7.1 due to the UUID change." }, sender -> { for (Type type : MMOItems.plugin.getTypes().getAll()) { ConfigFile config = type.getConfigFile(); @@ -37,7 +44,61 @@ public class PluginUpdateManager { } })); - register(new PluginUpdate(2, new String[] { "Enables the item updater for every item.", "&cNot recommended unless you know what you are doing." }, (sender) -> { + register(new PluginUpdate(3, new String[] { "5.3.2: converts all your crafting station recipes to the newest config format.", "&cWarning, running this update will get rid of your # config file comments." }, sender -> { + + for (File file : new File(MMOItems.plugin.getDataFolder() + "\\crafting-stations").listFiles()) { + FileConfiguration config = YamlConfiguration.loadConfiguration(file); + + if (config.contains("recipes")) + for (String key : config.getConfigurationSection("recipes").getKeys(false)) + try { + + List ingredients = config.getStringList("recipes." + key + ".ingredients"); + List newest = new ArrayList(); + + for (String ingredient : ingredients) { + String[] split = ingredient.split("\\ "); + if (split[0].equals("mmoitem")) { + String format = "mmoitem{material=\"" + split[1] + "\",id=\"" + split[2] + "\""; + if (split.length > 3) + format += ",amount=" + split[3]; + if (split.length > 4) + format += ",display=\"" + split[4] + "\""; + newest.add(format + "}"); + } + + else if (split[0].equals("vanilla")) { + String format = "vanilla{type=\"" + split[1] + "\""; + if (split.length > 2 && !split[2].equals(".")) + format += ",display=\"" + split[2] + "\""; + if (split.length > 3) + format += "amount=" + split[3]; + if (split.length > 4) + format += "display=\"" + split[4] + "\""; + newest.add(format + "}"); + } + + else { + MMOItems.plugin.getLogger().log(Level.INFO, "Config Update 3: Could not match ingredient from '" + ingredient + "' from recipe '" + key + "', added it anyway."); + newest.add(ingredient); + } + } + + config.set("recipes." + key + ".ingredients", newest); + + } catch (Exception exception) { + MMOItems.plugin.getLogger().log(Level.INFO, "Config Update 3: Could not convert recipe with key '" + key + "': " + exception.getMessage()); + } + + try { + config.save(file); + } catch (IOException exception) { + MMOItems.plugin.getLogger().log(Level.INFO, "Config Update 3: Could not save config '" + file.getName() + "': " + exception.getMessage()); + } + } + })); + + register(new PluginUpdate(2, new String[] { "Enables the item updater for every item.", "&cNot recommended unless you know what you are doing." }, sender -> { for (Type type : MMOItems.plugin.getTypes().getAll()) for (String id : type.getConfigFile().getConfig().getKeys(false)) { String itemPath = type.getId() + "." + id;