diff --git a/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java b/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java index 201e1582e..52236c957 100644 --- a/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java +++ b/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java @@ -142,14 +142,6 @@ class ItemHandlerAdapter implements IMEInventory, IBaseMonitor remainingCurrentSlot ) { // Something broke. It should never return more than we requested... @@ -159,17 +151,12 @@ class ItemHandlerAdapter implements IMEInventory, IBaseMonitor extracted.getMaxStackSize()) { - extracted.setCount(remainingCurrentSlot); - } - + // We're just gonna use the first stack we get our hands on as the template for the rest. + // In case some stupid itemhandler (aka forge) returns an internal state we have to do a second + // expensive copy again. if( gathered.isEmpty() ) { - gathered = extracted; + gathered = extracted.copy(); } else { @@ -178,7 +165,7 @@ class ItemHandlerAdapter implements IMEInventory, IBaseMonitor 0 ); + while( !extracted.isEmpty() && remainingCurrentSlot > 0 ); remainingSize -= stackSizeCurrentSlot - remainingCurrentSlot; diff --git a/src/main/java/appeng/util/InventoryAdaptor.java b/src/main/java/appeng/util/InventoryAdaptor.java index 21295f575..bdbe42951 100644 --- a/src/main/java/appeng/util/InventoryAdaptor.java +++ b/src/main/java/appeng/util/InventoryAdaptor.java @@ -20,13 +20,10 @@ package appeng.util; import appeng.util.inv.*; -import com.jaquadro.minecraft.storagedrawers.api.capabilities.IItemRepository; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.CapabilityInject; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; @@ -40,23 +37,12 @@ import appeng.api.config.FuzzyMode; */ public abstract class InventoryAdaptor implements Iterable { - @CapabilityInject( IItemRepository.class) - public static Capability ITEM_REPOSITORY_CAPABILITY = null; - public static InventoryAdaptor getAdaptor( final TileEntity te, final EnumFacing d ) { if( te != null ) { - if( ITEM_REPOSITORY_CAPABILITY != null && te.hasCapability( ITEM_REPOSITORY_CAPABILITY, d ) ) + if( te.hasCapability( CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, d ) ) { - IItemRepository itemRepository = te.getCapability( ITEM_REPOSITORY_CAPABILITY, d ); - if (itemRepository != null){ - return new AdaptorItemRepository( itemRepository ); - } - } - else if( 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 ) diff --git a/src/main/java/appeng/util/inv/AdaptorItemRepository.java b/src/main/java/appeng/util/inv/AdaptorItemRepository.java deleted file mode 100644 index d54e3771d..000000000 --- a/src/main/java/appeng/util/inv/AdaptorItemRepository.java +++ /dev/null @@ -1,208 +0,0 @@ -package appeng.util.inv; - -import appeng.api.config.FuzzyMode; -import appeng.util.InventoryAdaptor; - -import appeng.util.Platform; -import com.jaquadro.minecraft.storagedrawers.api.capabilities.IItemRepository; -import net.minecraft.item.ItemStack; - -import java.util.Iterator; - - -public class AdaptorItemRepository extends InventoryAdaptor -{ - protected final IItemRepository itemRepository; - - public AdaptorItemRepository( IItemRepository itemRepository ) - { - this.itemRepository = itemRepository; - } - - @Override - public ItemStack removeItems( int amount, ItemStack filter, IInventoryDestination destination ) - { - ItemStack rv = ItemStack.EMPTY; - ItemStack extracted = ItemStack.EMPTY; - - if( !filter.isEmpty() ) - { - extracted = this.itemRepository.extractItem( filter, amount, true ); - } - else - { - for( IItemRepository.ItemRecord record : this.itemRepository.getAllItems() ) - { - extracted = this.itemRepository.extractItem( record.itemPrototype, amount, true ); - if( !extracted.isEmpty() ) - { - break; - } - } - } - - if( destination != null ) - { - - if( extracted.isEmpty() || !destination.canInsert( extracted ) ) - { - return rv; - } - - } - - extracted = this.itemRepository.extractItem( filter, amount, false ); - - return extracted; - } - - @Override - public ItemStack simulateRemove( int amount, ItemStack filter, IInventoryDestination destination ) - { - ItemStack rv = ItemStack.EMPTY; - ItemStack extracted = ItemStack.EMPTY; - - if( !filter.isEmpty() ) - { - extracted = this.itemRepository.extractItem( filter, amount, true ); - } - else - { - for( IItemRepository.ItemRecord record : this.itemRepository.getAllItems() ) - { - extracted = this.itemRepository.extractItem( record.itemPrototype, amount, true ); - if( !extracted.isEmpty() ) - { - break; - } - } - } - - if( destination != null ) - { - - if( extracted.isEmpty() || !destination.canInsert( extracted ) ) - { - return rv; - } - - } - - return extracted; - } - - @Override - public ItemStack removeSimilarItems( int amount, ItemStack filter, FuzzyMode fuzzyMode, IInventoryDestination destination ) - { - ItemStack rv = ItemStack.EMPTY; - ItemStack extracted = ItemStack.EMPTY; - - for( IItemRepository.ItemRecord record : this.itemRepository.getAllItems() ) - { - if( Platform.itemComparisons().isFuzzyEqualItem( record.itemPrototype, filter, fuzzyMode ) ) - { - extracted = this.itemRepository.extractItem( record.itemPrototype, amount, true ); - } - - if( !extracted.isEmpty() ) - { - break; - } - } - - if( destination != null ) - { - - if( extracted.isEmpty() || !destination.canInsert( extracted ) ) - { - return rv; - } - - } - - extracted = this.itemRepository.extractItem( extracted, amount, false ); - - return extracted; - } - - @Override - public ItemStack simulateSimilarRemove( int amount, ItemStack filter, FuzzyMode fuzzyMode, IInventoryDestination destination ) - { - ItemStack rv = ItemStack.EMPTY; - ItemStack extracted = ItemStack.EMPTY; - - for( IItemRepository.ItemRecord record : this.itemRepository.getAllItems() ) - { - if( Platform.itemComparisons().isFuzzyEqualItem( record.itemPrototype, filter, fuzzyMode ) ) - { - extracted = this.itemRepository.extractItem( record.itemPrototype, amount, true ); - } - - if( !extracted.isEmpty() ) - { - break; - } - } - - if( destination != null ) - { - - if( extracted.isEmpty() || !destination.canInsert( extracted ) ) - { - return rv; - } - - } - - return extracted; - } - - @Override - public ItemStack addItems( ItemStack toBeAdded ) - { - return this.addItems( toBeAdded, false ); - } - - protected ItemStack addItems( final ItemStack itemsToAdd, final boolean simulate ) - { - if( itemsToAdd.isEmpty() ) - { - return ItemStack.EMPTY; - } - - ItemStack left = itemsToAdd.copy(); - - left = this.itemRepository.insertItem( left, simulate ); - - if( left.isEmpty() ) - { - return ItemStack.EMPTY; - } - - return left; - } - - @Override - public ItemStack simulateAdd( ItemStack toBeSimulated ) - { - return this.addItems( toBeSimulated, true ); - } - - @Override - public boolean containsItems() - { - return !this.itemRepository.getAllItems().isEmpty(); - } - - @Override - public boolean hasSlots() - { - return true; - } - - @Override - public Iterator iterator() - { - return null; - } -}