From f7075a2f6dcb73b9cd40ffe872a44d528339ebc4 Mon Sep 17 00:00:00 2001 From: Alex 'mcmonkey' Goodwin Date: Fri, 20 Sep 2019 12:21:06 -0700 Subject: [PATCH] add server reset_ and remove_ recipes mechs --- .../com/denizenscript/denizen/Denizen.java | 10 +++--- .../denizen/nms/interfaces/ItemHelper.java | 4 +++ .../containers/core/ItemScriptHelper.java | 13 +++++--- .../denizen/tags/core/ServerTagBase.java | 31 +++++++++++++++++++ .../nms/v1_12/helpers/ItemHelperImpl.java | 6 ++++ .../nms/v1_13/helpers/ItemHelperImpl.java | 9 ++++++ .../nms/v1_14/helpers/ItemHelperImpl.java | 10 ++++++ 7 files changed, 74 insertions(+), 9 deletions(-) diff --git a/plugin/src/main/java/com/denizenscript/denizen/Denizen.java b/plugin/src/main/java/com/denizenscript/denizen/Denizen.java index 07a6806dfd..225333d51f 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/Denizen.java +++ b/plugin/src/main/java/com/denizenscript/denizen/Denizen.java @@ -125,7 +125,9 @@ public NotableManager notableManager() { return notableManager; } - private BukkitWorldScriptHelper ws_helper; + public BukkitWorldScriptHelper worldScriptHelper; + + public ItemScriptHelper itemScriptHelper; public final static long startTime = System.currentTimeMillis(); @@ -313,8 +315,8 @@ public void onEnable() { } try { - ws_helper = new BukkitWorldScriptHelper(); - ItemScriptHelper is_helper = new ItemScriptHelper(); + worldScriptHelper = new BukkitWorldScriptHelper(); + itemScriptHelper = new ItemScriptHelper(); InventoryScriptHelper in_helper = new InventoryScriptHelper(); EntityScriptHelper es_helper = new EntityScriptHelper(); CommandScriptHelper cs_helper = new CommandScriptHelper(); @@ -432,7 +434,7 @@ public void run() { Debug.log(ChatColor.LIGHT_PURPLE + "+-------------------------+"); // Fire the 'on Server Start' world event - ws_helper.serverStartEvent(); + worldScriptHelper.serverStartEvent(); if (Settings.allowStupidx()) { Debug.echoError("Don't screw with bad config values."); diff --git a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/ItemHelper.java b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/ItemHelper.java index f5e7e5cb55..eae1b3feaf 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/ItemHelper.java +++ b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/ItemHelper.java @@ -5,6 +5,7 @@ import com.denizenscript.denizen.nms.util.jnbt.Tag; import org.bukkit.Color; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; @@ -12,6 +13,9 @@ public abstract class ItemHelper { + + public abstract void removeRecipe(NamespacedKey key); + public abstract void clearDenizenRecipes(); public void registerStonecuttingRecipe(String keyName, String group, ItemStack result, ItemStack ingredient) { diff --git a/plugin/src/main/java/com/denizenscript/denizen/scripts/containers/core/ItemScriptHelper.java b/plugin/src/main/java/com/denizenscript/denizen/scripts/containers/core/ItemScriptHelper.java index 53cfd609d0..148ba13d2a 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/scripts/containers/core/ItemScriptHelper.java +++ b/plugin/src/main/java/com/denizenscript/denizen/scripts/containers/core/ItemScriptHelper.java @@ -33,11 +33,10 @@ import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; public class ItemScriptHelper implements Listener { - public static final Map item_scripts = new ConcurrentHashMap<>(8, 0.9f, 1); + public static final Map item_scripts = new HashMap<>(); public static final Map item_scripts_by_hash_id = new HashMap<>(); public static final Map recipeIdToItemScript = new HashMap<>(); @@ -182,9 +181,7 @@ public void registerStonecuttingRecipe(ItemScriptContainer container, String inp NMSHandler.getItemHelper().registerStonecuttingRecipe(internalId, group, result, input); } - @EventHandler - public void scriptReload(ScriptReloadEvent event) { - + public void rebuildRecipes() { currentFurnaceRecipes.clear(); for (ItemScriptContainer container : item_scripts.values()) { if (container.contains("recipes")) { @@ -231,6 +228,12 @@ else if (type.equals("furnace") || type.equals("blast") || type.equals("smoker") } } + + @EventHandler + public void scriptReload(ScriptReloadEvent event) { + rebuildRecipes(); + } + public static boolean isItemscript(ItemStack item) { return getItemScriptContainer(item) != null; } diff --git a/plugin/src/main/java/com/denizenscript/denizen/tags/core/ServerTagBase.java b/plugin/src/main/java/com/denizenscript/denizen/tags/core/ServerTagBase.java index dd6fd38d9f..99c4bbfdd7 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/tags/core/ServerTagBase.java +++ b/plugin/src/main/java/com/denizenscript/denizen/tags/core/ServerTagBase.java @@ -1691,6 +1691,7 @@ public static ListTag getHandlerPluginList(Class eventClass) { } public static void adjustServer(Mechanism mechanism) { + // <--[mechanism] // @object server // @name delete_file @@ -1752,6 +1753,36 @@ public static void adjustServer(Mechanism mechanism) { } } + // <--[mechanism] + // @object server + // @name reset_recipes + // @input None + // @description + // Resets the server's recipe list to the default vanilla recipe list + item script recipes. + // @tags + // )]> + // --> + if (mechanism.matches("reset_recipes")) { + Bukkit.resetRecipes(); + DenizenAPI.getCurrentInstance().itemScriptHelper.rebuildRecipes(); + } + + // <--[mechanism] + // @object server + // @name remove_recipes + // @input ListTag + // @description + // Removes a recipe or list of recipes from the server, in Namespace:Key format. + // @tags + // )]> + // --> + if (mechanism.matches("remove_recipes")) { + ListTag list = mechanism.valueAsType(ListTag.class); + for (String str : list) { + NMSHandler.getItemHelper().removeRecipe(Utilities.parseNamespacedKey(str)); + } + } + // <--[mechanism] // @object server // @name cleanmem diff --git a/v1_12/src/main/java/com/denizenscript/denizen/nms/v1_12/helpers/ItemHelperImpl.java b/v1_12/src/main/java/com/denizenscript/denizen/nms/v1_12/helpers/ItemHelperImpl.java index 3158503804..7cf21be22e 100644 --- a/v1_12/src/main/java/com/denizenscript/denizen/nms/v1_12/helpers/ItemHelperImpl.java +++ b/v1_12/src/main/java/com/denizenscript/denizen/nms/v1_12/helpers/ItemHelperImpl.java @@ -12,6 +12,7 @@ import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; @@ -21,6 +22,11 @@ public class ItemHelperImpl extends ItemHelper { + @Override + public void removeRecipe(NamespacedKey key) { + throw new UnsupportedOperationException(); + } + @Override public void clearDenizenRecipes() { throw new UnsupportedOperationException(); diff --git a/v1_13/src/main/java/com/denizenscript/denizen/nms/v1_13/helpers/ItemHelperImpl.java b/v1_13/src/main/java/com/denizenscript/denizen/nms/v1_13/helpers/ItemHelperImpl.java index 56bad6e6d4..5bd1761ee6 100644 --- a/v1_13/src/main/java/com/denizenscript/denizen/nms/v1_13/helpers/ItemHelperImpl.java +++ b/v1_13/src/main/java/com/denizenscript/denizen/nms/v1_13/helpers/ItemHelperImpl.java @@ -13,9 +13,11 @@ import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.craftbukkit.libs.it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import org.bukkit.craftbukkit.v1_13_R2.CraftServer; import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_13_R2.util.CraftNamespacedKey; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -26,6 +28,13 @@ public class ItemHelperImpl extends ItemHelper { + @Override + public void removeRecipe(NamespacedKey key) { + MinecraftKey nmsKey = CraftNamespacedKey.toMinecraft(key); + Object2ObjectLinkedOpenHashMap recipeMap = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().recipes; + recipeMap.remove(nmsKey); + } + @Override public void clearDenizenRecipes() { Object2ObjectLinkedOpenHashMap recipeMap = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().recipes; diff --git a/v1_14/src/main/java/com/denizenscript/denizen/nms/v1_14/helpers/ItemHelperImpl.java b/v1_14/src/main/java/com/denizenscript/denizen/nms/v1_14/helpers/ItemHelperImpl.java index 4efea9c427..2d740d62e5 100644 --- a/v1_14/src/main/java/com/denizenscript/denizen/nms/v1_14/helpers/ItemHelperImpl.java +++ b/v1_14/src/main/java/com/denizenscript/denizen/nms/v1_14/helpers/ItemHelperImpl.java @@ -13,10 +13,12 @@ import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.craftbukkit.libs.it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import org.bukkit.craftbukkit.v1_14_R1.CraftServer; import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_14_R1.util.CraftNamespacedKey; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; @@ -26,6 +28,14 @@ public class ItemHelperImpl extends ItemHelper { + @Override + public void removeRecipe(NamespacedKey key) { + MinecraftKey nmsKey = CraftNamespacedKey.toMinecraft(key); + for (Object2ObjectLinkedOpenHashMap> recipeMap : ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().recipes.values()) { + recipeMap.remove(nmsKey); + } + } + @Override public void clearDenizenRecipes() { for (Object2ObjectLinkedOpenHashMap> recipeMap : ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().recipes.values()) {