diff --git a/src/api/java/appeng/api/networking/crafting/ICraftingGrid.java b/src/api/java/appeng/api/networking/crafting/ICraftingGrid.java index a14fa528c..a0e32a434 100644 --- a/src/api/java/appeng/api/networking/crafting/ICraftingGrid.java +++ b/src/api/java/appeng/api/networking/crafting/ICraftingGrid.java @@ -99,9 +99,18 @@ public interface ICraftingGrid extends IGridCache /** * is this item being crafted? * - * @param aeStackInSlot item being crafted + * @param what item being crafted * * @return true if it is being crafting */ - boolean isRequesting( IAEItemStack aeStackInSlot ); + boolean isRequesting( IAEItemStack what ); + + /** + * The total amount being requested across all crafting cpus of a grid. + * + * @param what item being requested, ignores stacksize + * + * @return The total amount being requested. + */ + long requesting( IAEItemStack what ); } diff --git a/src/main/java/appeng/me/cache/CraftingGridCache.java b/src/main/java/appeng/me/cache/CraftingGridCache.java index 72d954499..7bd105ade 100644 --- a/src/main/java/appeng/me/cache/CraftingGridCache.java +++ b/src/main/java/appeng/me/cache/CraftingGridCache.java @@ -576,15 +576,21 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper @Override public boolean isRequesting( final IAEItemStack what ) { + return this.requesting( what ) > 0; + } + + @Override + public long requesting( IAEItemStack what ) + { + long requested = 0; + for( final CraftingCPUCluster cluster : this.craftingCPUClusters ) { - if( cluster.isMaking( what ) ) - { - return true; - } + final IAEItemStack stack = cluster.making( what ); + requested += stack != null ? stack.getStackSize() : 0; } - return false; + return requested; } public List getMediums( final ICraftingPatternDetails key ) diff --git a/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java index 6ebd260e3..b9c2d5288 100644 --- a/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java +++ b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java @@ -28,7 +28,6 @@ import java.util.Map; import java.util.Map.Entry; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; @@ -300,7 +299,7 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU this.updateElapsedTime( what ); this.markDirty(); - this.postCraftingStatusChange( is ); + this.postCraftingStatusChange( what.copy().setStackSize( -what.getStackSize() ) ); if( this.finalOutput.equals( what ) ) { @@ -332,6 +331,7 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU what.decStackSize( is.getStackSize() ); is.setStackSize( 0 ); + this.postCraftingStatusChange( insert.copy().setStackSize( -insert.getStackSize() ) ); if( this.finalOutput.equals( insert ) ) { @@ -556,7 +556,9 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU this.myLastLink = null; this.tasks.clear(); - final ImmutableSet items = ImmutableSet.copyOf( this.waitingFor ); + // final ImmutableSet items = ImmutableSet.copyOf( this.waitingFor ); + final List items = new ArrayList<>( this.waitingFor.size() ); + this.waitingFor.forEach( stack -> items.add( stack.copy().setStackSize( -stack.getStackSize() ) ) ); this.waitingFor.resetStatus(); @@ -1304,10 +1306,9 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU return this.getCore().getWorld(); } - public boolean isMaking( final IAEItemStack what ) + public IAEItemStack making( final IAEItemStack what ) { - final IAEItemStack wat = this.waitingFor.findPrecise( what ); - return wat != null && wat.getStackSize() > 0; + return this.waitingFor.findPrecise( what ); } public void breakCluster()