fix IItemRepository insert and extraction
This commit is contained in:
@@ -38,7 +38,7 @@ import javax.annotation.Nonnull;
|
|||||||
* Used by the Storage Bus
|
* Used by the Storage Bus
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class ItemRepositoryAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAEItemStack>, ITickingMonitor, IItemRepository
|
class ItemRepositoryAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAEItemStack>, ITickingMonitor
|
||||||
{
|
{
|
||||||
private final Map<IMEMonitorHandlerReceiver<IAEItemStack>, Object> listeners = new HashMap<>();
|
private final Map<IMEMonitorHandlerReceiver<IAEItemStack>, Object> listeners = new HashMap<>();
|
||||||
private IActionSource mySource;
|
private IActionSource mySource;
|
||||||
@@ -192,30 +192,6 @@ class ItemRepositoryAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<
|
|||||||
this.mySource = mySource;
|
this.mySource = mySource;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
@Override
|
|
||||||
public NonNullList<ItemRecord> getAllItems()
|
|
||||||
{
|
|
||||||
//not a provider
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
@Override
|
|
||||||
public ItemStack insertItem( @Nonnull ItemStack stack, boolean simulate, Predicate<ItemStack> predicate )
|
|
||||||
{
|
|
||||||
//not a provider
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
@Override
|
|
||||||
public ItemStack extractItem( @Nonnull ItemStack stack, int amount, boolean simulate, Predicate<ItemStack> predicate )
|
|
||||||
{
|
|
||||||
//not a provider
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class InventoryCache
|
private static class InventoryCache
|
||||||
{
|
{
|
||||||
private IAEItemStack[] cachedAeStacks = new IAEItemStack[0];
|
private IAEItemStack[] cachedAeStacks = new IAEItemStack[0];
|
||||||
|
|||||||
@@ -23,8 +23,23 @@ public class AdaptorItemRepository extends InventoryAdaptor
|
|||||||
public ItemStack removeItems( int amount, ItemStack filter, IInventoryDestination destination )
|
public ItemStack removeItems( int amount, ItemStack filter, IInventoryDestination destination )
|
||||||
{
|
{
|
||||||
ItemStack rv = ItemStack.EMPTY;
|
ItemStack rv = ItemStack.EMPTY;
|
||||||
|
ItemStack extracted = ItemStack.EMPTY;
|
||||||
|
|
||||||
ItemStack extracted = this.itemRepository.extractItem( filter, amount, true );
|
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( destination != null )
|
||||||
{
|
{
|
||||||
@@ -37,6 +52,7 @@ public class AdaptorItemRepository extends InventoryAdaptor
|
|||||||
}
|
}
|
||||||
|
|
||||||
extracted = this.itemRepository.extractItem( filter, amount, false );
|
extracted = this.itemRepository.extractItem( filter, amount, false );
|
||||||
|
|
||||||
return extracted;
|
return extracted;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,15 +60,32 @@ public class AdaptorItemRepository extends InventoryAdaptor
|
|||||||
public ItemStack simulateRemove( int amount, ItemStack filter, IInventoryDestination destination )
|
public ItemStack simulateRemove( int amount, ItemStack filter, IInventoryDestination destination )
|
||||||
{
|
{
|
||||||
ItemStack rv = ItemStack.EMPTY;
|
ItemStack rv = ItemStack.EMPTY;
|
||||||
|
ItemStack extracted = ItemStack.EMPTY;
|
||||||
|
|
||||||
ItemStack extracted = this.itemRepository.extractItem( filter, amount, true );
|
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( destination != null )
|
||||||
{
|
{
|
||||||
|
|
||||||
if( extracted.isEmpty() || !destination.canInsert( extracted ) )
|
if( extracted.isEmpty() || !destination.canInsert( extracted ) )
|
||||||
{
|
{
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return extracted;
|
return extracted;
|
||||||
@@ -61,46 +94,67 @@ public class AdaptorItemRepository extends InventoryAdaptor
|
|||||||
@Override
|
@Override
|
||||||
public ItemStack removeSimilarItems( int amount, ItemStack filter, FuzzyMode fuzzyMode, IInventoryDestination destination )
|
public ItemStack removeSimilarItems( int amount, ItemStack filter, FuzzyMode fuzzyMode, IInventoryDestination destination )
|
||||||
{
|
{
|
||||||
|
ItemStack rv = ItemStack.EMPTY;
|
||||||
ItemStack extracted = ItemStack.EMPTY;
|
ItemStack extracted = ItemStack.EMPTY;
|
||||||
|
|
||||||
ItemStack simulated = this.itemRepository.extractItem( filter, amount, true );
|
for( IItemRepository.ItemRecord record : this.itemRepository.getAllItems() )
|
||||||
|
{
|
||||||
|
if( Platform.itemComparisons().isFuzzyEqualItem( record.itemPrototype, filter, fuzzyMode ) )
|
||||||
|
{
|
||||||
|
extracted = this.itemRepository.extractItem( record.itemPrototype, amount, true );
|
||||||
|
}
|
||||||
|
|
||||||
if (simulated.isEmpty() && !filter.isEmpty()) {
|
if( !extracted.isEmpty() )
|
||||||
simulated = this.itemRepository.extractItem( filter, amount, true, s -> Platform.itemComparisons().isFuzzyEqualItem( s, filter, fuzzyMode ) );
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( destination != null )
|
if( destination != null )
|
||||||
{
|
{
|
||||||
if( simulated.isEmpty() || !destination.canInsert( simulated ) )
|
|
||||||
|
if( extracted.isEmpty() || !destination.canInsert( extracted ) )
|
||||||
{
|
{
|
||||||
return extracted;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extracted = this.itemRepository.extractItem( simulated, amount, false );
|
extracted = this.itemRepository.extractItem( extracted, amount, false );
|
||||||
|
|
||||||
return extracted;
|
return extracted;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack simulateSimilarRemove( int amount, ItemStack filter, FuzzyMode fuzzyMode, IInventoryDestination destination )
|
public ItemStack simulateSimilarRemove( int amount, ItemStack filter, FuzzyMode fuzzyMode, IInventoryDestination destination )
|
||||||
{
|
{
|
||||||
|
ItemStack rv = ItemStack.EMPTY;
|
||||||
ItemStack extracted = ItemStack.EMPTY;
|
ItemStack extracted = ItemStack.EMPTY;
|
||||||
|
|
||||||
ItemStack simulated = this.itemRepository.extractItem( filter, amount, true );
|
for( IItemRepository.ItemRecord record : this.itemRepository.getAllItems() )
|
||||||
|
{
|
||||||
|
if( Platform.itemComparisons().isFuzzyEqualItem( record.itemPrototype, filter, fuzzyMode ) )
|
||||||
|
{
|
||||||
|
extracted = this.itemRepository.extractItem( record.itemPrototype, amount, true );
|
||||||
|
}
|
||||||
|
|
||||||
if (simulated.isEmpty() && !filter.isEmpty()) {
|
if( !extracted.isEmpty() )
|
||||||
simulated = this.itemRepository.extractItem( filter, amount, true, s -> Platform.itemComparisons().isFuzzyEqualItem( s, filter, fuzzyMode ) );
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( destination != null )
|
if( destination != null )
|
||||||
{
|
{
|
||||||
if( simulated.isEmpty() || !destination.canInsert( simulated ) )
|
|
||||||
|
if( extracted.isEmpty() || !destination.canInsert( extracted ) )
|
||||||
{
|
{
|
||||||
return extracted;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return simulated;
|
return extracted;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user