diff --git a/build.gradle.kts b/build.gradle.kts index e45e701a..37ea0f73 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -33,7 +33,7 @@ dependencies { compileOnly("com.github.LoneDev6:API-ItemsAdder:3.5.0b") compileOnly("com.github.oraxen:oraxen:1.160.0") compileOnly("io.lumine:Mythic-Dist:5.3.5") - implementation("com.crypticlib:CrypticLib:0.1.6") + implementation("com.crypticlib:CrypticLib:0.1.7") } group = "com.github.yufiriamazenta" diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/Craftorithm.java b/src/main/java/com/github/yufiriamazenta/craftorithm/Craftorithm.java index 859622c3..84cd8eb0 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/Craftorithm.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/Craftorithm.java @@ -57,7 +57,7 @@ public void disable() { private void loadBStat() { Metrics metrics = new Metrics(this, 17821); - metrics.addCustomChart(new Metrics.SingleLineChart("recipes", () -> RecipeManager.getRecipeFileMap().keySet().size())); + metrics.addCustomChart(new Metrics.SingleLineChart("recipes", () -> RecipeManager.getRecipeConfigWrapperMap().keySet().size())); } private void regListeners() { @@ -76,6 +76,10 @@ public static Craftorithm getInstance() { return INSTANCE; } + public static CraftorithmAPI getAPI() { + return CraftorithmAPI.INSTANCE; + } + @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { if (event.getPlayer().isOp()) { diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/PluginCommand.java b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/PluginCommand.java index dc7d217c..adc8cfec 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/PluginCommand.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/PluginCommand.java @@ -60,6 +60,7 @@ private void regDefaultSubCommands() { regSubCommand(ReloadCommand.INSTANCE); regSubCommand(VersionCommand.INSTANCE); regSubCommand(RemoveRecipeCommand.INSTANCE); + regSubCommand(DisableRecipeCommand.INSTANCE); regSubCommand(ItemCommand.INSTANCE); regSubCommand(RunArcencielCmd.INSTANCE); regSubCommand(ShowRecipeCommand.INSTANCE); diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/DisableRecipeCommand.java b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/DisableRecipeCommand.java new file mode 100644 index 00000000..41119e4c --- /dev/null +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/DisableRecipeCommand.java @@ -0,0 +1,28 @@ +package com.github.yufiriamazenta.craftorithm.cmd.subcmd; + +import crypticlib.command.ISubCmdExecutor; +import org.bukkit.command.CommandSender; + +import java.util.List; +import java.util.Map; + +public final class DisableRecipeCommand extends AbstractSubCommand { + + public static final DisableRecipeCommand INSTANCE = new DisableRecipeCommand(); + + private DisableRecipeCommand() { + super("disable", "craftorithm.command.disable"); + } + + @Override + public boolean onCommand(CommandSender sender, List args) { + //TODO + return super.onCommand(sender, args); + } + + @Override + public List onTabComplete(CommandSender sender, List args) { + //TODO + return super.onTabComplete(sender, args); + } +} diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RemoveRecipeCommand.java b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RemoveRecipeCommand.java index 4ea53b0a..52577e7d 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RemoveRecipeCommand.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/cmd/subcmd/RemoveRecipeCommand.java @@ -9,6 +9,9 @@ import java.util.ArrayList; import java.util.List; +/** + * 重构为只能删除本身插件的配方,取消其他插件配方移动到disable命令 + */ public final class RemoveRecipeCommand extends AbstractSubCommand { public static final ISubCmdExecutor INSTANCE = new RemoveRecipeCommand(); @@ -35,7 +38,7 @@ public boolean onCommand(CommandSender sender, List args) { public List onTabComplete(CommandSender sender, List args) { if (args.size() <= 1) { List tabList = new ArrayList<>(); - for (NamespacedKey key : RecipeManager.getServerRecipeMap().keySet()) { + for (NamespacedKey key : RecipeManager.getServerRecipeList().keySet()) { String str = key.toString(); if (str.startsWith(args.get(0))) tabList.add(key.toString()); diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/menu/impl/recipe/RecipeCreatorMenuHolder.java b/src/main/java/com/github/yufiriamazenta/craftorithm/menu/impl/recipe/RecipeCreatorMenuHolder.java index 8a56996b..7cc06099 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/menu/impl/recipe/RecipeCreatorMenuHolder.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/menu/impl/recipe/RecipeCreatorMenuHolder.java @@ -1,7 +1,6 @@ package com.github.yufiriamazenta.craftorithm.menu.impl.recipe; import com.github.yufiriamazenta.craftorithm.Craftorithm; -import com.github.yufiriamazenta.craftorithm.cmd.subcmd.RemoveRecipeCommand; import com.github.yufiriamazenta.craftorithm.item.ItemManager; import com.github.yufiriamazenta.craftorithm.menu.bukkit.BukkitMenuHandler; import com.github.yufiriamazenta.craftorithm.menu.bukkit.ItemDisplayIcon; @@ -116,7 +115,7 @@ private void setStoneCuttingMenuIcons() { Recipe[] recipes = RecipeFactory.newMultipleRecipe(recipeConfig.config(), recipeName); for (Recipe recipe : recipes) { NamespacedKey key = RecipeManager.getRecipeKey(recipe); - RecipeManager.regRecipe(key, recipe, recipeConfig.config()); + RecipeManager.regRecipes(key, recipe, recipeConfig.config()); } event.getWhoClicked().closeInventory(); sendSuccessMsgAndReloadMap(event.getWhoClicked()); @@ -199,7 +198,7 @@ private void setSmithingMenuIcons() { recipeConfig.saveConfig(); recipeConfig.reloadConfig(); Recipe recipe = RecipeFactory.newRecipe(recipeConfig.config(), recipeName); - RecipeManager.regRecipe(NamespacedKey.fromString(recipeName, Craftorithm.getInstance()), recipe, recipeConfig.config()); + RecipeManager.regRecipes(NamespacedKey.fromString(recipeName, Craftorithm.getInstance()), recipe, recipeConfig.config()); event.getWhoClicked().closeInventory(); sendSuccessMsgAndReloadMap(event.getWhoClicked()); }); @@ -284,7 +283,7 @@ private void setCookingMenuIcons() { Recipe[] multipleRecipes = RecipeFactory.newMultipleRecipe(recipeConfig.config(), recipeName); for (Recipe recipe : multipleRecipes) { NamespacedKey key = RecipeManager.getRecipeKey(recipe); - RecipeManager.regRecipe(key, recipe, recipeConfig.config()); + RecipeManager.regRecipes(key, recipe, recipeConfig.config()); } } else { recipeConfig.config().set("source.block", "furnace"); @@ -292,7 +291,7 @@ private void setCookingMenuIcons() { recipeConfig.saveConfig(); recipeConfig.reloadConfig(); Recipe recipe = RecipeFactory.newRecipe(recipeConfig.config(), recipeName); - RecipeManager.regRecipe(NamespacedKey.fromString(recipeName, Craftorithm.getInstance()), recipe, recipeConfig.config()); + RecipeManager.regRecipes(NamespacedKey.fromString(recipeName, Craftorithm.getInstance()), recipe, recipeConfig.config()); } event.getWhoClicked().closeInventory(); sendSuccessMsgAndReloadMap(event.getWhoClicked()); @@ -405,7 +404,7 @@ private void setCraftMenuIcons() { recipeConfig.saveConfig(); recipeConfig.reloadConfig(); Recipe recipe = RecipeFactory.newRecipe(recipeConfig.config(), recipeName); - RecipeManager.regRecipe(NamespacedKey.fromString(recipeName, Craftorithm.getInstance()), recipe, recipeConfig.config()); + RecipeManager.regRecipes(NamespacedKey.fromString(recipeName, Craftorithm.getInstance()), recipe, recipeConfig.config()); event.getWhoClicked().closeInventory(); sendSuccessMsgAndReloadMap(event.getWhoClicked()); }); diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/recipe/RecipeFactory.java b/src/main/java/com/github/yufiriamazenta/craftorithm/recipe/RecipeFactory.java index 0680826c..bf77dc47 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/recipe/RecipeFactory.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/recipe/RecipeFactory.java @@ -202,7 +202,7 @@ public static Recipe stoneCuttingRecipe(YamlConfiguration config, String key) { ItemStack result1 = ItemManager.matchItem(resultList.get(i)); String fullKey = key + "." + i; NamespacedKey namespacedKey = new NamespacedKey(Craftorithm.getInstance(), fullKey); - RecipeManager.regRecipe(namespacedKey, StoneCuttingRecipeBuilder.builder().key(namespacedKey).result(result1).source(choice).build(), config); + RecipeManager.regRecipes(namespacedKey, StoneCuttingRecipeBuilder.builder().key(namespacedKey).result(result1).source(choice).build(), config); } } else { result = getResultItem(config); diff --git a/src/main/java/com/github/yufiriamazenta/craftorithm/recipe/RecipeManager.java b/src/main/java/com/github/yufiriamazenta/craftorithm/recipe/RecipeManager.java index 409aec39..cd0c1b1d 100644 --- a/src/main/java/com/github/yufiriamazenta/craftorithm/recipe/RecipeManager.java +++ b/src/main/java/com/github/yufiriamazenta/craftorithm/recipe/RecipeManager.java @@ -19,37 +19,29 @@ import java.io.File; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicReference; public class RecipeManager { - private static final YamlConfigWrapper removedRecipeConfig = new YamlConfigWrapper(Craftorithm.getInstance(), "removed_recipes.yml"); - private static final File recipeFileFolder = new File(Craftorithm.getInstance().getDataFolder().getPath(), "recipes"); - private static final Map recipeFileMap; - private static final Map recipeKeyConfigMap; + private static final YamlConfigWrapper removedRecipeConfig; + private static final File recipeFileFolder; + private static final Map recipeConfigWrapperMap; + private static final Map> craftorithmRecipeGroupMap; private static final Map recipeUnlockMap; private static final Map recipeSortIdMap; private static final Map anvilRecipeMap; - private static final Map recipeTypeMap; - private static final Map recipeKeyMap; - private static final Map serverRecipeMap; + private static final List serverRecipeList; static { - recipeFileMap = new ConcurrentHashMap<>(); - recipeKeyConfigMap = new ConcurrentHashMap<>(); - serverRecipeMap = new ConcurrentHashMap<>(); + removedRecipeConfig = new YamlConfigWrapper(Craftorithm.getInstance(), "removed_recipes.yml"); + recipeFileFolder = new File(Craftorithm.getInstance().getDataFolder().getPath(), "recipes"); + craftorithmRecipeGroupMap = new ConcurrentHashMap<>(); + recipeConfigWrapperMap = new ConcurrentHashMap<>(); + serverRecipeList = new CopyOnWriteArrayList<>(); recipeUnlockMap = new ConcurrentHashMap<>(); recipeSortIdMap = new ConcurrentHashMap<>(); anvilRecipeMap = new ConcurrentHashMap<>(); - recipeTypeMap = new ConcurrentHashMap<>(); - recipeKeyMap = new ConcurrentHashMap<>(); - } - - public static void loadRecipes() { - loadCraftorithmRecipes(); - loadRecipeFromOtherPlugins(); - loadRemovedRecipes(); - reloadServerRecipeMap(); } public static void loadRecipeManager() { @@ -57,7 +49,7 @@ public static void loadRecipeManager() { } public static void loadRecipeFiles() { - recipeFileMap.clear(); + recipeConfigWrapperMap.clear(); if (!recipeFileFolder.exists()) { boolean mkdirResult = recipeFileFolder.mkdir(); if (!mkdirResult) @@ -72,26 +64,32 @@ public static void loadRecipeFiles() { key = key.replace("\\", "/"); int lastDotIndex = key.lastIndexOf("."); key = key.substring(0, lastDotIndex); - recipeFileMap.put(key, new YamlConfigWrapper(file)); + recipeConfigWrapperMap.put(key, new YamlConfigWrapper(file)); } } + public static void loadRecipes() { + loadCraftorithmRecipes(); + loadOtherPluginsRecipes(); + loadRemovedRecipes(); + reloadServerRecipeMap(); + } + public static void loadCraftorithmRecipes() { resetRecipes(); - for (String fileName : recipeFileMap.keySet()) { + for (String fileName : recipeConfigWrapperMap.keySet()) { try { - YamlConfiguration config = recipeFileMap.get(fileName).config(); + YamlConfigWrapper configWrapper = recipeConfigWrapperMap.get(fileName); + YamlConfiguration config = configWrapper.config(); boolean multiple = config.getBoolean("multiple", false); if (multiple) { Recipe[] multipleRecipes = RecipeFactory.newMultipleRecipe(config, fileName); - for (Recipe recipe : multipleRecipes) { - NamespacedKey key = getRecipeKey(recipe); - regRecipe(key, recipe, config); - } + regRecipes(fileName, Arrays.asList(multipleRecipes), config); } else { Recipe recipe = RecipeFactory.newRecipe(config, fileName); - regRecipe(getRecipeKey(recipe), recipe, config); + regRecipes(fileName, Collections.singletonList(recipe), config); } + recipeConfigWrapperMap.put(fileName, configWrapper); } catch (Exception e) { LangUtil.info("load.recipe_load_exception", ContainerUtil.newHashMap("", fileName)); e.printStackTrace(); @@ -99,13 +97,42 @@ public static void loadCraftorithmRecipes() { } } - private static void loadRecipeFromOtherPlugins() { + public static void regRecipes(String recipeName, List recipes, YamlConfiguration config) { + List recipeKeyList = new ArrayList<>(); + for (Recipe recipe : recipes) { + NamespacedKey recipeKey = getRecipeKey(recipe); + recipeKeyList.add(getRecipeKey(recipe)); + if (recipe instanceof CustomRecipe) { + switch (((CustomRecipe) recipe).getRecipeType()) { + case ANVIL: + regAnvilRecipe((AnvilRecipe) recipe); + break; + case POTION: + regPotionMixRecipe((PotionMixRecipe) recipe); + } + } else { + Bukkit.addRecipe(recipe); + boolean defUnlockCondition = Craftorithm.getInstance().getConfig().getBoolean("all_recipe_unlocked", false); + if (config.contains("unlock")) { + recipeUnlockMap.put(recipeKey, config.getBoolean("unlock", defUnlockCondition)); + } else { + recipeUnlockMap.put(recipeKey, defUnlockCondition); + } + } + } + craftorithmRecipeGroupMap.put(recipeName, recipeKeyList); + + //TODO 是否要进行排序暂定 +// recipeSortIdMap.put(key, config.getInt("sort_id", 0)); + } + + private static void loadOtherPluginsRecipes() { Map> pluginRecipeMap = CraftorithmAPI.INSTANCE.getPluginRegRecipeMap(); for (String plugin : pluginRecipeMap.keySet()) { if (plugin.equals(NamespacedKey.MINECRAFT) || plugin.equals(Craftorithm.getInstance().getName())) continue; for (Recipe recipe : pluginRecipeMap.get(plugin)) { - Craftorithm.getInstance().getServer().addRecipe(recipe); + Bukkit.addRecipe(recipe); } } } @@ -113,7 +140,7 @@ private static void loadRecipeFromOtherPlugins() { private static void loadRemovedRecipes() { List removedRecipes = removedRecipeConfig.config().getStringList("recipes"); if (Craftorithm.getInstance().getConfig().getBoolean("remove_all_vanilla_recipe", false)) { - for (NamespacedKey key : serverRecipeMap.keySet()) { + for (NamespacedKey key : serverRecipeList) { if (key.getNamespace().equals("minecraft")) { if (removedRecipes.contains(key.toString())) continue; @@ -121,171 +148,121 @@ private static void loadRemovedRecipes() { } } } - removeRecipes(removedRecipes, false); + List removedRecipeKeys = new ArrayList<>(); + for (String recipeKey : removedRecipes) { + removedRecipeKeys.add(NamespacedKey.fromString(recipeKey)); + } + disableOtherPluginsRecipe(removedRecipeKeys); } public static void resetRecipes() { + //删除其他插件的配方 CraftorithmAPI.INSTANCE.getPluginRegRecipeMap().forEach((plugin, recipes) -> { if (plugin.equals(NamespacedKey.MINECRAFT)) return; - List recipeKeyList = new ArrayList<>(); + List recipeKeyList = new ArrayList<>(); for (Recipe recipe : recipes) { - recipeKeyList.add(getRecipeKey(recipe).toString()); + recipeKeyList.add(getRecipeKey(recipe)); } - removeRecipes(recipeKeyList, false); + disableOtherPluginsRecipe(recipeKeyList); }); - List recipeKeyList = new ArrayList<>(); - for (NamespacedKey key : getPluginRecipeKeys()) { - recipeKeyList.add(key.toString()); - } - removeRecipes(recipeKeyList, false); - recipeTypeMap.clear(); - recipeKeyMap.clear(); - recipeUnlockMap.clear(); - anvilRecipeMap.clear(); - recipeKeyConfigMap.clear(); - } - - - public static void regRecipe(NamespacedKey key, Recipe recipe, YamlConfiguration config) { - if (recipe instanceof CustomRecipe) { - switch (((CustomRecipe) recipe).getRecipeType()) { - case ANVIL: - regAnvilRecipe((AnvilRecipe) recipe); - break; - case POTION: - regPotionMixRecipe((PotionMixRecipe) recipe); - } - } else { - Bukkit.addRecipe(recipe); - boolean defUnlockCondition = Craftorithm.getInstance().getConfig().getBoolean("all_recipe_unlocked", false); - if (config.contains("unlock")) { - recipeUnlockMap.put(key, config.getBoolean("unlock", defUnlockCondition)); - } else { - recipeUnlockMap.put(key, defUnlockCondition); - } - } - recipeKeyConfigMap.put(key, config); - putRecipeTypeMap(recipe); - recipeSortIdMap.put(key, config.getInt("sort_id", 0)); - recipeKeyMap.put(key, recipe); + //删除Craftorithm的配方 + craftorithmRecipeGroupMap.forEach((key, recipes) -> { + removeCraftorithmRecipe(key); + }); + anvilRecipeMap.clear(); + craftorithmRecipeGroupMap.clear(); + recipeConfigWrapperMap.clear(); + recipeUnlockMap.clear(); + recipeSortIdMap.clear(); + reloadServerRecipeMap(); } - private static void putRecipeTypeMap(Recipe recipe) { + public static RecipeType getRecipeType(Recipe recipe) { + if (recipe == null) + return RecipeType.UNKNOWN; if (recipe instanceof ShapedRecipe) - recipeTypeMap.put(recipe, RecipeType.SHAPED); + return RecipeType.SHAPED; else if (recipe instanceof ShapelessRecipe) - recipeTypeMap.put(recipe, RecipeType.SHAPELESS); + return RecipeType.SHAPELESS; else if (recipe instanceof CookingRecipe) - recipeTypeMap.put(recipe, RecipeType.COOKING); + return RecipeType.COOKING; else if (recipe instanceof SmithingRecipe) - recipeTypeMap.put(recipe, RecipeType.SMITHING); + return RecipeType.SMITHING; else if (recipe instanceof StonecuttingRecipe) - recipeTypeMap.put(recipe, RecipeType.STONE_CUTTING); + return RecipeType.STONE_CUTTING; else if (recipe instanceof AnvilRecipe) - recipeTypeMap.put(recipe, RecipeType.ANVIL); + return RecipeType.ANVIL; else - recipeTypeMap.put(recipe, RecipeType.UNKNOWN); - } - - - - public static boolean removeRecipe(String keyStr, boolean save2File) { - NamespacedKey key = NamespacedKey.fromString(keyStr); - if (key == null) - return false; + return RecipeType.UNKNOWN; + } + + /** + * 删除配方的基础方法 + * @param recipeKeys 要删除配方的key + * @return 删除的配方数量 + */ + private static int removeRecipes(List recipeKeys) { + if (recipeKeys == null || recipeKeys.isEmpty()) + return 0; + int removedRecipeNum = 0; if (CrypticLib.minecraftVersion() >= 11500) { - if (Bukkit.removeRecipe(key) && save2File) - addKeyToRemovedConfig(key.toString()); - reloadServerRecipeMap(); - } else { - Iterator recipeIterator = Bukkit.recipeIterator(); - while (recipeIterator.hasNext()) { - Recipe recipe1 = recipeIterator.next(); - NamespacedKey key1 = RecipeManager.getRecipeKey(recipe1); - if (key.equals(key1)) { - recipeIterator.remove(); - reloadServerRecipeMap(); - if (save2File) { - addKeyToRemovedConfig(key.toString()); - } - return true; - } - } - } - return false; - } - - - public static void removeRecipes(List keyStrList, boolean save2File) { - List keyList = new ArrayList<>(); - for (String str : keyStrList) { - NamespacedKey key = NamespacedKey.fromString(str); - if (key != null) - keyList.add(key); - } - if (keyList.isEmpty()) - return; - if (CrypticLib.minecraftVersion() >= 11500) { - for (NamespacedKey key : keyList) { - Bukkit.removeRecipe(key); - if (save2File) { - addKeyToRemovedConfig(key.toString()); - } + for (NamespacedKey recipeKey : recipeKeys) { + if (Bukkit.removeRecipe(recipeKey)) + removedRecipeNum ++; } } else { Iterator recipeIterator = Bukkit.recipeIterator(); while (recipeIterator.hasNext()) { - Recipe recipe1 = recipeIterator.next(); - NamespacedKey key1 = RecipeManager.getRecipeKey(recipe1); - if (key1 == null) - continue; - if (keyList.contains(key1)) { + Recipe iteratorRecipe = recipeIterator.next(); + NamespacedKey iteratorRecipeKey = RecipeManager.getRecipeKey(iteratorRecipe); + if (recipeKeys.contains(iteratorRecipeKey)) { recipeIterator.remove(); - if (save2File) { - addKeyToRemovedConfig(key1.toString()); - } - keyList.remove(key1); - if (keyList.isEmpty()) - break; + removedRecipeNum ++; + //TODO 维护表 } + reloadServerRecipeMap(); } } - reloadServerRecipeMap(); + return removedRecipeNum; } - public static boolean removeCraftorithmRecipe(NamespacedKey recipeKey) { - if (CrypticLib.minecraftVersion() >= 11500) { - YamlConfiguration config = getRecipeConfig(recipeKey); - //TODO - Bukkit.removeRecipe(recipeKey); - } else { - //TODO + public static boolean removeCraftorithmRecipe(String recipeName) { + int i = removeRecipes(craftorithmRecipeGroupMap.getOrDefault(recipeName, new ArrayList<>())); + YamlConfigWrapper recipeConfig = recipeConfigWrapperMap.get(recipeName); + if (recipeConfig != null) { + recipeConfig.configFile().delete(); } - return true; + recipeConfigWrapperMap.remove(recipeName); + craftorithmRecipeGroupMap.remove(recipeName); + + return i > 0; } - public static boolean removeOtherRecipe(NamespacedKey recipeKey) { - //TODO - return true; + public static boolean disableOtherPluginsRecipe(List recipeKeys) { + addKeyToRemovedConfig(recipeKeys); + return removeRecipes(recipeKeys) > 0; } - public static void addKeyToRemovedConfig(String key) { + public static void addKeyToRemovedConfig(List keys) { List removedList = removedRecipeConfig.config().getStringList("recipes"); - if (!removedList.contains(key)) - removedList.add(key); + for (NamespacedKey key : keys) { + String keyStr = key.toString(); + if (!removedList.contains(keyStr)) + removedList.add(keyStr); + } removedRecipeConfig.config().set("recipes", removedList); removedRecipeConfig.saveConfig(); } public static void reloadServerRecipeMap() { Iterator recipeIterator = Bukkit.recipeIterator(); - serverRecipeMap.clear(); + serverRecipeList.clear(); while (recipeIterator.hasNext()) { Recipe recipe = recipeIterator.next(); NamespacedKey key = RecipeManager.getRecipeKey(recipe); - serverRecipeMap.put(key, recipe); + serverRecipeList.put(key, recipe); } } @@ -304,7 +281,8 @@ public static NamespacedKey getRecipeKey(Recipe recipe) { return ((Keyed) recipe).getKey(); } - public static Recipe getCraftorithmRecipe(String key) { + public static List getCraftorithmRecipe(String key) { + List recipes = new ArrayList<>(); if (key.contains(":")) { return getCraftorithmRecipe(NamespacedKey.fromString(key)); } else { @@ -312,10 +290,6 @@ public static Recipe getCraftorithmRecipe(String key) { } } - public static Recipe getCraftorithmRecipe(NamespacedKey namespacedKey) { - return recipeKeyMap.get(namespacedKey); - } - public static RecipeType getCraftorithmRecipeType(Recipe recipe) { return recipeTypeMap.getOrDefault(recipe, RecipeType.UNKNOWN); } @@ -349,16 +323,16 @@ public static YamlConfigWrapper getRemovedRecipeConfig() { return removedRecipeConfig; } - public static Map getServerRecipeMap() { - return Collections.unmodifiableMap(serverRecipeMap); + public static Map getServerRecipeList() { + return Collections.unmodifiableMap(serverRecipeList); } public static Map getRecipeUnlockMap() { return recipeUnlockMap; } - public static Map getRecipeFileMap() { - return recipeFileMap; + public static Map getRecipeConfigWrapperMap() { + return recipeConfigWrapperMap; } public static Map getAnvilRecipeMap() {return anvilRecipeMap;}