package tc.oc.pgm.crafting; import java.util.Iterator; import java.util.Set; import org.bukkit.inventory.Recipe; import tc.oc.pgm.match.Match; import tc.oc.pgm.match.MatchModule; import tc.oc.pgm.utils.MaterialPattern; public class CraftingMatchModule extends MatchModule { private final Set<Recipe> customRecipes; private final Set<MaterialPattern> disabledRecipes; public CraftingMatchModule(Match match, Set<Recipe> customRecipes, Set<MaterialPattern> disabledRecipes) { super(match); this.customRecipes = customRecipes; this.disabledRecipes = disabledRecipes; } @Override public void enable() { super.enable(); for(Iterator<Recipe> iter = getMatch().getServer().recipeIterator(); iter.hasNext();) { Recipe recipe = iter.next(); for(MaterialPattern result : disabledRecipes) { if(result.matches(recipe.getResult())) { iter.remove(); break; } } } for(Recipe recipe : customRecipes) { getMatch().getServer().addRecipe(recipe); } } @Override public void disable() { // Recipe changes affect all worlds on the server, so we make changes at match start/end // to avoid interfering with adjacent matches. If we wait until unload() to reset them, // the next match would already be loaded. getMatch().getServer().resetRecipes(); super.disable(); } }