diff --git a/src/main/java/appeng/container/implementations/ContainerCraftConfirm.java b/src/main/java/appeng/container/implementations/ContainerCraftConfirm.java index ec0dd4f15..4593fdde8 100644 --- a/src/main/java/appeng/container/implementations/ContainerCraftConfirm.java +++ b/src/main/java/appeng/container/implementations/ContainerCraftConfirm.java @@ -150,6 +150,7 @@ public class ContainerCraftConfirm extends AEBaseContainer if( ccr.getCpu() == c ) { found = true; + break; } } diff --git a/src/main/java/appeng/crafting/CraftingJob.java b/src/main/java/appeng/crafting/CraftingJob.java index b4a4d6cf6..4c2b0d854 100644 --- a/src/main/java/appeng/crafting/CraftingJob.java +++ b/src/main/java/appeng/crafting/CraftingJob.java @@ -61,7 +61,8 @@ public class CraftingJob implements Runnable, ICraftingJob private final HashMap opsAndMultiplier = new HashMap<>(); private final Object monitor = new Object(); - private final Stopwatch watch = Stopwatch.createUnstarted(); + private final Stopwatch tickSpreadingWatch = Stopwatch.createUnstarted(); + private final Stopwatch craftingTreeWatch = Stopwatch.createUnstarted(); private CraftingTreeNode tree; private final IAEItemStack output; private boolean simulate = false; @@ -150,7 +151,7 @@ public class CraftingJob implements Runnable, ICraftingJob TickHandler.INSTANCE.registerCraftingSimulation( this.world, this ); this.handlePausing(); - final Stopwatch timer = Stopwatch.createStarted(); + craftingTreeWatch.start(); final MECraftingInventory craftingInventory = new MECraftingInventory( this.original, true, false, true ); craftingInventory.ignore( this.output ); @@ -165,9 +166,8 @@ public class CraftingJob implements Runnable, ICraftingJob AELog.crafting( s + " * " + ti.times + " = " + ( ti.perOp * ti.times ) ); } - this.logCraftingJob( "real", timer ); - // if ( mode == Actionable.MODULATE ) - // craftingInventory.moveItemsToStorage( storage ); + craftingTreeWatch.stop(); + this.logCraftingJob( "real", craftingTreeWatch ); } catch( final CraftBranchFailure e ) { @@ -177,7 +177,7 @@ public class CraftingJob implements Runnable, ICraftingJob { if( actionSrc.player().isPresent() ) { - final Stopwatch timer = Stopwatch.createStarted(); + craftingTreeWatch.reset().start(); final MECraftingInventory craftingInventory = new MECraftingInventory( this.original, true, false, true ); craftingInventory.ignore( this.output ); @@ -193,7 +193,13 @@ public class CraftingJob implements Runnable, ICraftingJob AELog.crafting( s + " * " + ti.times + " = " + ( ti.perOp * ti.times ) ); } - this.logCraftingJob( "simulate", timer ); + craftingTreeWatch.stop(); + this.logCraftingJob( "simulate", craftingTreeWatch ); + } + else + { + craftingTreeWatch.stop(); + this.logCraftingJob( "real", craftingTreeWatch ); } } catch( final CraftBranchFailure e1 ) @@ -240,10 +246,11 @@ public class CraftingJob implements Runnable, ICraftingJob this.incTime = 0; synchronized ( this.monitor ) { - if( this.watch.elapsed( TimeUnit.MICROSECONDS ) > this.time ) + if( this.tickSpreadingWatch.elapsed( TimeUnit.MICROSECONDS ) > this.time ) { this.running = false; - this.watch.stop(); + this.craftingTreeWatch.stop(); + this.tickSpreadingWatch.stop(); this.monitor.notify(); } @@ -337,8 +344,8 @@ public class CraftingJob implements Runnable, ICraftingJob } if( !this.actionSrc.player().isPresent() ) { - this.watch.reset(); - this.watch.start(); + this.tickSpreadingWatch.reset(); + this.tickSpreadingWatch.start(); this.monitor.notify(); } this.running = true; diff --git a/src/main/java/appeng/crafting/CraftingTreeNode.java b/src/main/java/appeng/crafting/CraftingTreeNode.java index f8857923e..adbdf36f8 100644 --- a/src/main/java/appeng/crafting/CraftingTreeNode.java +++ b/src/main/java/appeng/crafting/CraftingTreeNode.java @@ -153,31 +153,8 @@ public class CraftingTreeNode final List thingsUsed = new ArrayList<>(); this.what.setStackSize( l ); - IAEItemStack available = inv.extractItems( this.what, Actionable.MODULATE, src ); - if( available != null ) - { - if( !this.exhausted ) - { - final IAEItemStack is = this.job.checkUse( available ); - - if( is != null ) - { - thingsUsed.add( is.copy() ); - this.used.add( is ); - } - } - - this.bytes += available.getStackSize(); - l -= available.getStackSize(); - - if( l == 0 ) - { - return available; - } - } - - else if( this.getSlot() >= 0 && this.parent != null && this.parent.details.isCraftable() ) + if( this.getSlot() >= 0 && this.parent != null && this.parent.details.isCraftable() ) { final Collection itemList; final IItemList inventoryList = inv.getItemList(); @@ -211,7 +188,7 @@ public class CraftingTreeNode fuzz = fuzz.copy(); fuzz.setStackSize( l ); - available = inv.extractItems( fuzz, Actionable.MODULATE, src ); + final IAEItemStack available = inv.extractItems( fuzz, Actionable.MODULATE, src ); if( available != null ) { @@ -237,6 +214,32 @@ public class CraftingTreeNode } } } + else + { + final IAEItemStack available = inv.extractItems( this.what, Actionable.MODULATE, src ); + + if( available != null ) + { + if( !this.exhausted ) + { + final IAEItemStack is = this.job.checkUse( available ); + + if( is != null ) + { + thingsUsed.add( is.copy() ); + this.used.add( is ); + } + } + + this.bytes += available.getStackSize(); + l -= available.getStackSize(); + + if( l == 0 ) + { + return available; + } + } + } if( this.canEmit ) { @@ -263,7 +266,7 @@ public class CraftingTreeNode madeWhat.setStackSize( l ); - available = inv.extractItems( madeWhat, Actionable.MODULATE, src ); + final IAEItemStack available = inv.extractItems( madeWhat, Actionable.MODULATE, src ); if( available != null ) { @@ -293,7 +296,7 @@ public class CraftingTreeNode pro.request( subInv, 1, src ); this.what.setStackSize( l ); - available = subInv.extractItems( this.what, Actionable.MODULATE, src ); + final IAEItemStack available = subInv.extractItems( this.what, Actionable.MODULATE, src ); if( available != null ) {