From 719ea5090b6243700ac9505f35e5135cbb5b98c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 25 Oct 2020 00:48:53 -0300 Subject: [PATCH] move gtce blocking code out of generic item adaptor fixes crash with ae2 fluid crafting --- .../java/appeng/helpers/DualityInterface.java | 60 +++++++++++++------ .../gregtech/GTCEInventoryAdaptor.java | 26 ++++++++ .../modules/gregtech/GTCEItemHandler.java | 38 ++++++++++++ .../java/appeng/util/InventoryAdaptor.java | 3 +- .../appeng/util/inv/AdaptorItemHandler.java | 15 ----- .../java/appeng/util/inv/AdaptorList.java | 5 -- src/main/java/appeng/util/inv/IMEAdaptor.java | 5 -- 7 files changed, 107 insertions(+), 45 deletions(-) create mode 100644 src/main/java/appeng/integration/modules/gregtech/GTCEInventoryAdaptor.java create mode 100644 src/main/java/appeng/integration/modules/gregtech/GTCEItemHandler.java diff --git a/src/main/java/appeng/helpers/DualityInterface.java b/src/main/java/appeng/helpers/DualityInterface.java index 9f52909f9..69601ad28 100644 --- a/src/main/java/appeng/helpers/DualityInterface.java +++ b/src/main/java/appeng/helpers/DualityInterface.java @@ -29,6 +29,8 @@ import java.util.Optional; import javax.annotation.Nullable; +import appeng.integration.modules.gregtech.GTCEInventoryAdaptor; +import appeng.util.*; import com.google.common.collect.ImmutableSet; import net.minecraft.block.Block; @@ -46,7 +48,6 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.fml.common.Loader; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.RangedWrapper; @@ -102,10 +103,6 @@ import appeng.parts.automation.StackUpgradeInventory; import appeng.parts.automation.UpgradeInventory; import appeng.tile.inventory.AppEngInternalAEInventory; import appeng.tile.inventory.AppEngInternalInventory; -import appeng.util.ConfigManager; -import appeng.util.IConfigManagerHost; -import appeng.util.InventoryAdaptor; -import appeng.util.Platform; import appeng.util.inv.AdaptorItemHandler; import appeng.util.inv.IAEAppEngInventory; import appeng.util.inv.IInventoryDestination; @@ -146,6 +143,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn private IMEInventory destination; private int isWorking = -1; private final Accessor accessor = new Accessor(); + private GTCEInventoryAdaptor GTad; public DualityInterface( final AENetworkProxy networkProxy, final IInterfaceHost ih ) { @@ -910,12 +908,16 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn } private static boolean invIsBlocked(InventoryAdaptor inv) { - if (AEConfig.instance().isFeatureEnabled(AEFeature.INSANE_BLOCKING_MODE)) { - if (Loader.isModLoaded("gregtech")) return !inv.canRemoveAllExceptCircuits(); - else return !inv.simulateRemove( 1, ItemStack.EMPTY, null ).isEmpty(); + if (AEConfig.instance().isFeatureEnabled(AEFeature.INSANE_BLOCKING_MODE)) + { + return !inv.simulateRemove( 1, ItemStack.EMPTY, null ).isEmpty(); } - else - return inv.containsItems(); + else return inv.containsItems(); + } + + private static boolean invIsBlockedGTCE(GTCEInventoryAdaptor inv) + { + return (!inv.canRemoveAllExceptCircuits()); } @Override @@ -962,13 +964,24 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn } final InventoryAdaptor ad = InventoryAdaptor.getAdaptor( te, s.getOpposite() ); - if( ad != null ) + if( ad != null ) { if( this.isBlocking() ) { - if( invIsBlocked(ad) ) + if (te.getBlockType().getRegistryName().getResourceDomain().equals("gregtech")) { - continue; + GTad = GTCEInventoryAdaptor.getAdaptor( te, s.getOpposite() ); + if (invIsBlockedGTCE(GTad)) + { + continue; + } + } + else + { + if (invIsBlocked(ad)) + { + continue; + } } } @@ -1017,17 +1030,28 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn final InventoryAdaptor ad = InventoryAdaptor.getAdaptor( te, s.getOpposite() ); if( ad != null ) { - if( !invIsBlocked(ad) ) + if (te.getBlockType().getRegistryName().getResourceDomain().equals("gregtech")) { - allAreBusy = false; - break; + GTad = GTCEInventoryAdaptor.getAdaptor( te, s.getOpposite() ); + if ( !invIsBlockedGTCE(GTad) ) + { + allAreBusy = false; + break; + } + } + else + { + if( !invIsBlocked(ad) ) + { + allAreBusy = false; + break; + } + } } } - busy = allAreBusy; } - return busy; } diff --git a/src/main/java/appeng/integration/modules/gregtech/GTCEInventoryAdaptor.java b/src/main/java/appeng/integration/modules/gregtech/GTCEInventoryAdaptor.java new file mode 100644 index 000000000..9be68e2fb --- /dev/null +++ b/src/main/java/appeng/integration/modules/gregtech/GTCEInventoryAdaptor.java @@ -0,0 +1,26 @@ +package appeng.integration.modules.gregtech; + +import appeng.util.inv.ItemSlot; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; + +public abstract class GTCEInventoryAdaptor implements Iterable +{ + public static GTCEInventoryAdaptor getAdaptor(final TileEntity te, final EnumFacing d) + { + if (te != null && te.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, d)) + { + // Attempt getting an IItemHandler for the given side via caps + IItemHandler itemHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, d); + if (itemHandler != null) + { + return new GTCEItemHandler(itemHandler); + } + } + return null; + } + + public abstract boolean canRemoveAllExceptCircuits(); +} diff --git a/src/main/java/appeng/integration/modules/gregtech/GTCEItemHandler.java b/src/main/java/appeng/integration/modules/gregtech/GTCEItemHandler.java new file mode 100644 index 000000000..05112071e --- /dev/null +++ b/src/main/java/appeng/integration/modules/gregtech/GTCEItemHandler.java @@ -0,0 +1,38 @@ +package appeng.integration.modules.gregtech; + +import appeng.util.inv.ItemSlot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandler; + +import java.util.Iterator; + +public class GTCEItemHandler extends GTCEInventoryAdaptor { + + final static ItemStack integratedCircuit = new ItemStack((Item.getByNameOrId("gregtech:meta_item_1")), 1, 32766); // Gregtech Community Edition Integrated Circuit + protected final IItemHandler itemHandler; + + + public GTCEItemHandler( IItemHandler itemHandler ) + { + this.itemHandler = itemHandler; + } + + @Override + public boolean canRemoveAllExceptCircuits() + { + int slots = this.itemHandler.getSlots(); + for( int slot = 0; slot < slots; slot++ ) + { + ItemStack is = this.itemHandler.getStackInSlot( slot ); + if ( is.isEmpty() || is.isItemEqual(integratedCircuit)) continue; + return false; + } + return true; + } + + @Override + public Iterator iterator() { + return null; + } +} diff --git a/src/main/java/appeng/util/InventoryAdaptor.java b/src/main/java/appeng/util/InventoryAdaptor.java index fe0878dcb..bed48e3ef 100644 --- a/src/main/java/appeng/util/InventoryAdaptor.java +++ b/src/main/java/appeng/util/InventoryAdaptor.java @@ -69,8 +69,6 @@ public abstract class InventoryAdaptor implements Iterable public abstract ItemStack simulateRemove( int amount, ItemStack filter, IInventoryDestination destination ); - public abstract boolean canRemoveAllExceptCircuits(); - // return what was extracted. public abstract ItemStack removeSimilarItems( int amount, ItemStack filter, FuzzyMode fuzzyMode, IInventoryDestination destination ); @@ -84,4 +82,5 @@ public abstract class InventoryAdaptor implements Iterable public abstract boolean containsItems(); public abstract boolean hasSlots(); + } diff --git a/src/main/java/appeng/util/inv/AdaptorItemHandler.java b/src/main/java/appeng/util/inv/AdaptorItemHandler.java index d2a2718a1..87d794b81 100644 --- a/src/main/java/appeng/util/inv/AdaptorItemHandler.java +++ b/src/main/java/appeng/util/inv/AdaptorItemHandler.java @@ -21,7 +21,6 @@ package appeng.util.inv; import java.util.Iterator; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; @@ -32,7 +31,6 @@ import appeng.util.Platform; public class AdaptorItemHandler extends InventoryAdaptor { - final static ItemStack integratedCircuit = new ItemStack((Item.getByNameOrId("gregtech:meta_item_1")),1,32766); // Gregtech Community Edition Integrated Circuit protected final IItemHandler itemHandler; public AdaptorItemHandler( IItemHandler itemHandler ) @@ -267,17 +265,4 @@ public class AdaptorItemHandler extends InventoryAdaptor return new ItemHandlerIterator( this.itemHandler ); } - @Override - public boolean canRemoveAllExceptCircuits() - { - int slots = this.itemHandler.getSlots(); - for( int slot = 0; slot < slots; slot++ ) - { - ItemStack is = this.itemHandler.getStackInSlot( slot ); - if ( is.isEmpty() || is.isItemEqual(integratedCircuit)) continue; - return false; - } - return true; - } - } diff --git a/src/main/java/appeng/util/inv/AdaptorList.java b/src/main/java/appeng/util/inv/AdaptorList.java index 47cbddbe4..cf6639eeb 100644 --- a/src/main/java/appeng/util/inv/AdaptorList.java +++ b/src/main/java/appeng/util/inv/AdaptorList.java @@ -226,9 +226,4 @@ public class AdaptorList extends InventoryAdaptor return new StackToSlotIterator( this.i.iterator() ); } - @Override - public boolean canRemoveAllExceptCircuits() { - return false; - } - } diff --git a/src/main/java/appeng/util/inv/IMEAdaptor.java b/src/main/java/appeng/util/inv/IMEAdaptor.java index f4185ed6a..15b1b7ea9 100644 --- a/src/main/java/appeng/util/inv/IMEAdaptor.java +++ b/src/main/java/appeng/util/inv/IMEAdaptor.java @@ -204,9 +204,4 @@ public class IMEAdaptor extends InventoryAdaptor this.maxSlots = maxSlots; } - @Override - public boolean canRemoveAllExceptCircuits() { - return false; - } - }