remove slotless capability implementation from inventory adaptor
affects interface,import and export busses
This commit is contained in:
@@ -142,14 +142,6 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
|
|||||||
extracted = this.itemHandler.extractItem( i, remainingCurrentSlot, simulate );
|
extracted = this.itemHandler.extractItem( i, remainingCurrentSlot, simulate );
|
||||||
if( !extracted.isEmpty() )
|
if( !extracted.isEmpty() )
|
||||||
{
|
{
|
||||||
// In order to guard against broken IItemHandler implementations, we'll try to guess if the returned
|
|
||||||
// stack (especially in simulate mode) is the same that was returned by getStackInSlot. This is
|
|
||||||
// obviously not a precise science, but it would catch the previous Forge bug:
|
|
||||||
// https://github.com/MinecraftForge/MinecraftForge/pull/6580
|
|
||||||
if (extracted == stackInInventorySlot) {
|
|
||||||
extracted = extracted.copy();
|
|
||||||
}
|
|
||||||
|
|
||||||
if( extracted.getCount() > remainingCurrentSlot )
|
if( extracted.getCount() > remainingCurrentSlot )
|
||||||
{
|
{
|
||||||
// Something broke. It should never return more than we requested...
|
// Something broke. It should never return more than we requested...
|
||||||
@@ -159,17 +151,12 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
|
|||||||
extracted.setCount( remainingCurrentSlot );
|
extracted.setCount( remainingCurrentSlot );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Heuristic for simulation: looping in case of simulations is pointless, since the state of the
|
// We're just gonna use the first stack we get our hands on as the template for the rest.
|
||||||
// underlying inventory does not change after a simulated extraction. To still support inventories
|
// In case some stupid itemhandler (aka forge) returns an internal state we have to do a second
|
||||||
// that report stacks that are larger than maxStackSize, we use this heuristic
|
// expensive copy again.
|
||||||
if (simulate && extracted.getCount() == extracted.getMaxStackSize()
|
|
||||||
&& remainingCurrentSlot > extracted.getMaxStackSize()) {
|
|
||||||
extracted.setCount(remainingCurrentSlot);
|
|
||||||
}
|
|
||||||
|
|
||||||
if( gathered.isEmpty() )
|
if( gathered.isEmpty() )
|
||||||
{
|
{
|
||||||
gathered = extracted;
|
gathered = extracted.copy();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -178,7 +165,7 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
|
|||||||
remainingCurrentSlot -= extracted.getCount();
|
remainingCurrentSlot -= extracted.getCount();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while( !simulate && !extracted.isEmpty() && remainingCurrentSlot > 0 );
|
while( !extracted.isEmpty() && remainingCurrentSlot > 0 );
|
||||||
|
|
||||||
remainingSize -= stackSizeCurrentSlot - remainingCurrentSlot;
|
remainingSize -= stackSizeCurrentSlot - remainingCurrentSlot;
|
||||||
|
|
||||||
|
|||||||
@@ -20,13 +20,10 @@ package appeng.util;
|
|||||||
|
|
||||||
|
|
||||||
import appeng.util.inv.*;
|
import appeng.util.inv.*;
|
||||||
import com.jaquadro.minecraft.storagedrawers.api.capabilities.IItemRepository;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
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.CapabilityItemHandler;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
|
||||||
@@ -40,23 +37,12 @@ import appeng.api.config.FuzzyMode;
|
|||||||
*/
|
*/
|
||||||
public abstract class InventoryAdaptor implements Iterable<ItemSlot>
|
public abstract class InventoryAdaptor implements Iterable<ItemSlot>
|
||||||
{
|
{
|
||||||
@CapabilityInject( IItemRepository.class)
|
|
||||||
public static Capability<IItemRepository> ITEM_REPOSITORY_CAPABILITY = null;
|
|
||||||
|
|
||||||
public static InventoryAdaptor getAdaptor( final TileEntity te, final EnumFacing d )
|
public static InventoryAdaptor getAdaptor( final TileEntity te, final EnumFacing d )
|
||||||
{
|
{
|
||||||
if( te != null )
|
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
|
// Attempt getting an IItemHandler for the given side via caps
|
||||||
IItemHandler itemHandler = te.getCapability( CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, d );
|
IItemHandler itemHandler = te.getCapability( CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, d );
|
||||||
if( itemHandler != null )
|
if( itemHandler != 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<ItemSlot> iterator()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user