From 0b4f5f13ca37a39a5d7cda1aee9114b02fc8fefd Mon Sep 17 00:00:00 2001 From: way2muchnoise Date: Tue, 15 Nov 2016 17:44:03 +0100 Subject: [PATCH] add ISoldererRegistry#removeRecipe, resolves #634 --- .../api/solderer/ISoldererRegistry.java | 9 ++++++ .../apiimpl/solderer/SoldererRegistry.java | 30 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/solderer/ISoldererRegistry.java b/src/main/java/com/raoulvdberge/refinedstorage/api/solderer/ISoldererRegistry.java index e152d66c3..64f1b5dad 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/solderer/ISoldererRegistry.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/solderer/ISoldererRegistry.java @@ -42,4 +42,13 @@ public interface ISoldererRegistry { */ @Nonnull ISoldererRecipe createSimpleRecipe(@Nonnull ItemStack result, int duration, ItemStack... rows); + + /** + * Remove existing recipes from the solderer + * + * @param result the result + * @param rows none or the three rows that give the result + * @return a list of removed {@link ISoldererRecipe}s + */ + List removeRecipe(@Nonnull ItemStack result, ItemStack... rows); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/solderer/SoldererRegistry.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/solderer/SoldererRegistry.java index 4c3f223ec..43a341c46 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/solderer/SoldererRegistry.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/solderer/SoldererRegistry.java @@ -9,6 +9,8 @@ import net.minecraftforge.items.IItemHandler; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; import java.util.List; public class SoldererRegistry implements ISoldererRegistry { @@ -78,4 +80,32 @@ public class SoldererRegistry implements ISoldererRegistry { } }; } + + @Override + public List removeRecipe(@Nonnull ItemStack result, ItemStack... rows) { + if (!(rows.length == 0 || rows.length == 3)) { + throw new IllegalArgumentException("Removing a recipe requires either no rows or 3 rows, got " + rows.length + " rows"); + } + Iterator itr = recipes.iterator(); + List removed = new LinkedList<>(); + while (itr.hasNext()) { + ISoldererRecipe recipe = itr.next(); + if (API.instance().getComparer().isEqualNoQuantity(result, recipe.getResult())) { + if (rows.length == 0 || compareRows(recipe, rows)) { + itr.remove(); + removed.add(recipe); + } + } + } + return removed; + } + + private boolean compareRows(ISoldererRecipe recipe, ItemStack[] rows) { + for (int i = 0; i < 3; ++i) { + if(!API.instance().getComparer().isEqualNoQuantity(recipe.getRow(i), rows[i])) { + return false; + } + } + return true; + } }