From f582aec94e4d0f91d18f858cd2bd5c642fe3e762 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 13 Sep 2016 01:54:43 +0200 Subject: [PATCH] Added "autocrafting mode" in Detector, fixes #329 To check if an item is being crafted. If no item is specified, it'll emit a signal if anything is crafting. --- CHANGELOG.md | 1 + .../sidebutton/SideButtonDetectorMode.java | 2 ++ .../refinedstorage/tile/TileDetector.java | 31 ++++++++++++++++--- .../assets/refinedstorage/lang/en_US.lang | 1 + 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 72749d05a..47f17aa82 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### 1.0.1 - Fixed advanced tooltips showing in Grid when not configured to do so (raoulvdberge) +- Added "autocrafting mode" in Detector, to check if an item is being crafted. If no item is specified, it'll emit a signal if anything is crafting (raoulvdberge) ### 1.0 **NOTE:** Due to the new crafting system, all Crafting Patterns made before 1.0 have to be re-made. diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java index af47bcb84..0bc5e0eee 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java @@ -27,6 +27,8 @@ public class SideButtonDetectorMode extends SideButton { } else if (mode == TileDetector.MODE_ABOVE) { mode = TileDetector.MODE_UNDER; } else if (mode == TileDetector.MODE_UNDER) { + mode = TileDetector.MODE_AUTOCRAFTING; + } else if (mode == TileDetector.MODE_AUTOCRAFTING) { mode = TileDetector.MODE_EQUAL; } diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index b7b903b5c..4cad82b03 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -11,7 +11,9 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; +import refinedstorage.api.autocrafting.task.ICraftingTask; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.gui.GuiDetector; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerFluid; @@ -34,7 +36,7 @@ public class TileDetector extends TileNode implements IComparable, IType { }, new ITileDataConsumer() { @Override public void setValue(TileDetector tile, Integer value) { - if (value == MODE_UNDER || value == MODE_EQUAL || value == MODE_ABOVE) { + if (value == MODE_UNDER || value == MODE_EQUAL || value == MODE_ABOVE || value == MODE_AUTOCRAFTING) { tile.mode = value; tile.markDirty(); @@ -69,6 +71,7 @@ public class TileDetector extends TileNode implements IComparable, IType { public static final int MODE_UNDER = 0; public static final int MODE_EQUAL = 1; public static final int MODE_ABOVE = 2; + public static final int MODE_AUTOCRAFTING = 3; private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; @@ -106,11 +109,31 @@ public class TileDetector extends TileNode implements IComparable, IType { ItemStack slot = itemFilters.getStackInSlot(0); if (slot != null) { - ItemStack stack = network.getItemStorage().get(slot, compare); + if (mode == MODE_AUTOCRAFTING) { + boolean found = false; - powered = isPowered(stack == null ? null : stack.stackSize); + for (ICraftingTask task : network.getCraftingTasks()) { + for (ItemStack output : task.getPattern().getOutputs()) { + if (CompareUtils.compareStackNoQuantity(slot, output)) { + found = true; + + break; + } + } + + if (found) { + break; + } + } + + powered = found; + } else { + ItemStack stack = network.getItemStorage().get(slot, compare); + + powered = isPowered(stack == null ? null : stack.stackSize); + } } else { - powered = false; + powered = mode == MODE_AUTOCRAFTING && !network.getCraftingTasks().isEmpty(); } } else if (type == IType.FLUIDS) { FluidStack slot = fluidFilters.getFluids()[0]; diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index ab46de702..3bf9f90c2 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -102,6 +102,7 @@ sidebutton.refinedstorage:detector.mode=Mode sidebutton.refinedstorage:detector.mode.0=Emit signal when under the amount sidebutton.refinedstorage:detector.mode.1=Emit signal when on the amount sidebutton.refinedstorage:detector.mode.2=Emit signal when above the amount +sidebutton.refinedstorage:detector.mode.3=Emit signal when is autocrafting block.refinedstorage:controller.0.name=Controller block.refinedstorage:controller.1.name=Creative Controller