From 4d6193cd0f91ecf13c667d021948088a9312f4aa Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Fri, 4 Jul 2014 21:04:30 -0500 Subject: [PATCH] Export Bus can now craft without being on craft only mode. --- parts/automation/PartExportBus.java | 103 +++++++++++++++------------- 1 file changed, 57 insertions(+), 46 deletions(-) diff --git a/parts/automation/PartExportBus.java b/parts/automation/PartExportBus.java index 35e0844f0..d88f633af 100644 --- a/parts/automation/PartExportBus.java +++ b/parts/automation/PartExportBus.java @@ -15,6 +15,7 @@ import appeng.api.config.PowerMultiplier; import appeng.api.config.RedstoneMode; import appeng.api.config.Settings; import appeng.api.config.Upgrades; +import appeng.api.config.YesNo; import appeng.api.networking.IGridNode; import appeng.api.networking.crafting.ICraftingGrid; import appeng.api.networking.crafting.ICraftingJob; @@ -58,6 +59,7 @@ public class PartExportBus extends PartSharedItemBus implements IGridTickable, I super( PartExportBus.class, is ); settings.registerSetting( Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE ); settings.registerSetting( Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL ); + settings.registerSetting( Settings.CRAFT_ONLY, YesNo.NO ); mySrc = new MachineSource( this ); } @@ -212,54 +214,12 @@ public class PartExportBus extends PartSharedItemBus implements IGridTickable, I IAEItemStack ais = config.getAEStackInSlot( x ); if ( ais == null || itemToSend <= 0 || craftOnly() ) { - if ( isCraftingEnabled() && ais != null && d.simulateAdd( ais.getItemStack() ) == null ) - { - ICraftingGrid cg = proxy.getCrafting(); - - if ( getLink( x ) != null ) - { - continue; - } - else if ( calculatingJob != null ) - { - ICraftingJob job = null; - try - { - if ( calculatingJob.isDone() ) - job = calculatingJob.get(); - else if ( calculatingJob.isCancelled() ) - calculatingJob = null; - - if ( job != null ) - { - calculatingJob = null; - setLink( x, cg.submitJob( job, this, null, mySrc ) ); - didSomething = true; - } - } - catch (InterruptedException e) - { - // :P - } - catch (ExecutionException e) - { - // :P - } - } - else - { - if ( getLink( x ) == null ) - { - IAEItemStack aisC = ais.copy(); - aisC.setStackSize( itemToSend ); - calculatingJob = cg.beginCraftingJob( getTile().getWorldObj(), proxy.getGrid(), mySrc, aisC, null ); - } - } - } - + handleCrafting( x, ais, d ); continue; } + long before = itemToSend; + if ( getInstalledUpgrades( Upgrades.FUZZY ) > 0 ) { for (IAEItemStack o : ImmutableList.copyOf( inv.getStorageList().findFuzzy( ais, fzMode ) )) @@ -271,6 +231,9 @@ public class PartExportBus extends PartSharedItemBus implements IGridTickable, I } else pushItemIntoTarget( d, energy, inv, ais ); + + if ( itemToSend == before ) + handleCrafting( x, ais, d ); } } @@ -283,9 +246,57 @@ public class PartExportBus extends PartSharedItemBus implements IGridTickable, I return didSomething ? TickRateModulation.FASTER : TickRateModulation.SLOWER; } + private void handleCrafting(int x, IAEItemStack ais, InventoryAdaptor d) throws GridAccessException + { + if ( isCraftingEnabled() && ais != null && d.simulateAdd( ais.getItemStack() ) == null ) + { + ICraftingGrid cg = proxy.getCrafting(); + + if ( getLink( x ) != null ) + { + return; + } + else if ( calculatingJob != null ) + { + ICraftingJob job = null; + try + { + if ( calculatingJob.isDone() ) + job = calculatingJob.get(); + else if ( calculatingJob.isCancelled() ) + calculatingJob = null; + + if ( job != null ) + { + calculatingJob = null; + setLink( x, cg.submitJob( job, this, null, mySrc ) ); + didSomething = true; + } + } + catch (InterruptedException e) + { + // :P + } + catch (ExecutionException e) + { + // :P + } + } + else + { + if ( getLink( x ) == null ) + { + IAEItemStack aisC = ais.copy(); + aisC.setStackSize( itemToSend ); + calculatingJob = cg.beginCraftingJob( getTile().getWorldObj(), proxy.getGrid(), mySrc, aisC, null ); + } + } + } + } + private boolean craftOnly() { - return true; + return getConfigManager().getSetting( Settings.CRAFT_ONLY ) == YesNo.YES; } private boolean isCraftingEnabled()