Skip to content

Commit

Permalink
add server reset_ and remove_ recipes mechs
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Sep 20, 2019
1 parent ee965d1 commit f7075a2
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 9 deletions.
10 changes: 6 additions & 4 deletions plugin/src/main/java/com/denizenscript/denizen/Denizen.java
Expand Up @@ -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();

Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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.");
Expand Down
Expand Up @@ -5,13 +5,17 @@
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;
import org.bukkit.potion.PotionEffectType;

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) {
Expand Down
Expand Up @@ -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<String, ItemScriptContainer> item_scripts = new ConcurrentHashMap<>(8, 0.9f, 1);
public static final Map<String, ItemScriptContainer> item_scripts = new HashMap<>();
public static final Map<String, ItemScriptContainer> item_scripts_by_hash_id = new HashMap<>();
public static final Map<String, ItemScriptContainer> recipeIdToItemScript = new HashMap<>();

Expand Down Expand Up @@ -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")) {
Expand Down Expand Up @@ -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;
}
Expand Down
Expand Up @@ -1691,6 +1691,7 @@ public static ListTag getHandlerPluginList(Class eventClass) {
}

public static void adjustServer(Mechanism mechanism) {

// <--[mechanism]
// @object server
// @name delete_file
Expand Down Expand Up @@ -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
// <server.list_recipe_ids[(<type>)]>
// -->
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
// <server.list_recipe_ids[(<type>)]>
// -->
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
Expand Down
Expand Up @@ -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;
Expand All @@ -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();
Expand Down
Expand Up @@ -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;
Expand All @@ -26,6 +28,13 @@

public class ItemHelperImpl extends ItemHelper {

@Override
public void removeRecipe(NamespacedKey key) {
MinecraftKey nmsKey = CraftNamespacedKey.toMinecraft(key);
Object2ObjectLinkedOpenHashMap<MinecraftKey, IRecipe> recipeMap = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().recipes;
recipeMap.remove(nmsKey);
}

@Override
public void clearDenizenRecipes() {
Object2ObjectLinkedOpenHashMap<MinecraftKey, IRecipe> recipeMap = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().recipes;
Expand Down
Expand Up @@ -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;
Expand All @@ -26,6 +28,14 @@

public class ItemHelperImpl extends ItemHelper {

@Override
public void removeRecipe(NamespacedKey key) {
MinecraftKey nmsKey = CraftNamespacedKey.toMinecraft(key);
for (Object2ObjectLinkedOpenHashMap<MinecraftKey, IRecipe<?>> recipeMap : ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().recipes.values()) {
recipeMap.remove(nmsKey);
}
}

@Override
public void clearDenizenRecipes() {
for (Object2ObjectLinkedOpenHashMap<MinecraftKey, IRecipe<?>> recipeMap : ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().recipes.values()) {
Expand Down

0 comments on commit f7075a2

Please sign in to comment.