Fixes #2593: Subtract the extracted not already gathered amount.

This commit is contained in:
yueh
2016-11-07 13:33:11 +01:00
parent e67969f52f
commit 89609a83ea
@@ -99,8 +99,8 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
public IAEItemStack extractItems( IAEItemStack request, Actionable mode, BaseActionSource src ) public IAEItemStack extractItems( IAEItemStack request, Actionable mode, BaseActionSource src )
{ {
ItemStack req = request.getItemStack(); ItemStack requestedItemStack = request.getItemStack();
int remainingSize = req.stackSize; int remainingSize = requestedItemStack.stackSize;
// Use this to gather the requested items // Use this to gather the requested items
ItemStack gathered = null; ItemStack gathered = null;
@@ -109,17 +109,17 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
for( int i = 0; i < itemHandler.getSlots(); i++ ) for( int i = 0; i < itemHandler.getSlots(); i++ )
{ {
ItemStack sub = itemHandler.getStackInSlot( i ); ItemStack stackInInventorySlot = itemHandler.getStackInSlot( i );
if( !Platform.itemComparisons().isSameItem( sub, req ) ) if( !Platform.itemComparisons().isSameItem( stackInInventorySlot, requestedItemStack ) )
{ {
continue; continue;
} }
ItemStack extracted; ItemStack extracted;
// We have to loop here because according to the docs, the handler shouldn't return a stack with size > maxSize, even if we // We have to loop here because according to the docs, the handler shouldn't return a stack with size >
// request more. So even if it returns a valid stack, it might have more stuff. // maxSize, even if we request more. So even if it returns a valid stack, it might have more stuff.
do do
{ {
extracted = itemHandler.extractItem( i, remainingSize, simulate ); extracted = itemHandler.extractItem( i, remainingSize, simulate );
@@ -127,8 +127,9 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
{ {
if( extracted.stackSize > remainingSize ) if( extracted.stackSize > remainingSize )
{ {
// Something broke. It should never return more than we requested... We're going to silently eat the remainder // Something broke. It should never return more than we requested...
AELog.warn( "Mod that provided item handler {} is broken. Returned {} items, even though we requested {}.", // We're going to silently eat the remainder
AELog.warn( "Mod that provided item handler %1 is broken. Returned %2 items, even though we requested %3.",
itemHandler.getClass().getSimpleName(), extracted.stackSize, remainingSize ); itemHandler.getClass().getSimpleName(), extracted.stackSize, remainingSize );
extracted.stackSize = remainingSize; extracted.stackSize = remainingSize;
} }
@@ -142,7 +143,7 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
{ {
gathered.stackSize += extracted.stackSize; gathered.stackSize += extracted.stackSize;
} }
remainingSize -= gathered.stackSize; remainingSize -= extracted.stackSize;
} }
} }
while( extracted != null && remainingSize > 0 ); while( extracted != null && remainingSize > 0 );