option for a blocking mode that actually works

This commit is contained in:
talchas
2020-02-06 18:08:08 -08:00
parent dfe5b82bda
commit 5ac8db41e7
2 changed files with 12 additions and 2 deletions
@@ -164,6 +164,7 @@ public enum AEFeature
PATTERNS( "Patterns", Constants.CATEGORY_CRAFTING_FEATURES ),
CRAFTING_CPU( "CraftingCPU", Constants.CATEGORY_CRAFTING_FEATURES ),
CRAFTING_MANAGER_FALLBACK( "CraftingManagerFallback", Constants.CATEGORY_CRAFTING_FEATURES, "Use CraftingManager to find an alternative recipe, after a pattern rejected an ingredient. Should be enabled to avoid issues, but can have a minor performance impact." ),
INSANE_BLOCKING_MODE( "InsaneBlockingMode", Constants.CATEGORY_CRAFTING_FEATURES, "Use the default AE2 blocking mode that doesn't work on any machines" ),
BASIC_CARDS( "BasicCards", Constants.CATEGORY_UPGRADES ),
ADVANCED_CARDS( "AdvancedCards", Constants.CATEGORY_UPGRADES ),
@@ -88,6 +88,8 @@ import appeng.api.util.AEPartLocation;
import appeng.api.util.DimensionalCoord;
import appeng.api.util.IConfigManager;
import appeng.capabilities.Capabilities;
import appeng.core.AEConfig;
import appeng.core.features.AEFeature;
import appeng.core.settings.TickRates;
import appeng.me.GridAccessException;
import appeng.me.helpers.AENetworkProxy;
@@ -893,6 +895,13 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
};
}
private static boolean invIsBlocked(InventoryAdaptor inv) {
if (AEConfig.instance().isFeatureEnabled(AEFeature.INSANE_BLOCKING_MODE))
return !inv.simulateRemove( 1, ItemStack.EMPTY, null ).isEmpty();
else
return inv.containsItems();
}
@Override
public boolean pushPattern( final ICraftingPatternDetails patternDetails, final InventoryCrafting table )
{
@@ -941,7 +950,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
{
if( this.isBlocking() )
{
if( !ad.simulateRemove( 1, ItemStack.EMPTY, null ).isEmpty() )
if( invIsBlocked(ad) )
{
continue;
}
@@ -992,7 +1001,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
final InventoryAdaptor ad = InventoryAdaptor.getAdaptor( te, s.getOpposite() );
if( ad != null )
{
if( ad.simulateRemove( 1, ItemStack.EMPTY, null ).isEmpty() )
if( !invIsBlocked(ad) )
{
allAreBusy = false;
break;