Applied-Energistics-2-tiler.../integration/modules/helpers/BSCrateStorageAdaptor.java
2013-12-27 16:59:59 -06:00

185 lines
3.9 KiB
Java

package appeng.integration.modules.helpers;
import java.util.Iterator;
import net.mcft.copy.betterstorage.api.ICrateStorage;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.ForgeDirection;
import appeng.api.config.FuzzyMode;
import appeng.util.InventoryAdaptor;
import appeng.util.Platform;
import appeng.util.inv.IInventoryDestination;
import appeng.util.inv.ItemSlot;
import appeng.util.iterators.StackToSlotIterator;
public class BSCrateStorageAdaptor extends InventoryAdaptor
{
ICrateStorage cs;
ForgeDirection side;
public BSCrateStorageAdaptor(Object te, ForgeDirection d) {
cs = (ICrateStorage) te;
side = d;
}
@Override
public ItemStack removeItems(int how_many, ItemStack Filter, IInventoryDestination dest)
{
ItemStack target = null;
for (ItemStack is : cs.getContents( side ))
{
if ( is != null )
{
if ( is.stackSize > 0 && (Filter == null || Platform.isSameItem( Filter, is )) )
{
if ( dest == null || dest.canInsert( is ) )
{
target = is;
break;
}
}
}
}
if ( target != null )
{
ItemStack f = Platform.cloneItemStack( target );
f.stackSize = how_many;
return cs.extractItems( side, f );
}
return null;
}
@Override
public ItemStack simulateRemove(int how_many, ItemStack Filter, IInventoryDestination dest)
{
ItemStack target = null;
for (ItemStack is : cs.getContents( side ))
{
if ( is != null )
{
if ( is.stackSize > 0 && (Filter == null || Platform.isSameItem( Filter, is )) )
{
if ( dest == null || dest.canInsert( is ) )
{
target = is;
break;
}
}
}
}
if ( target != null )
{
int cnt = cs.getItemCount( side, target );
if ( cnt == 0 )
return null;
if ( cnt > how_many )
cnt = how_many;
ItemStack c = target.copy();
c.stackSize = cnt;
return c;
}
return null;
}
@Override
public ItemStack removeSimilarItems(int amount, ItemStack filter, FuzzyMode fuzzyMode, IInventoryDestination dest)
{
ItemStack target = null;
for (ItemStack is : cs.getContents( side ))
{
if ( is != null )
{
if ( is.stackSize > 0 && (filter == null || Platform.isSameItemFuzzy( filter, is, fuzzyMode )) )
{
if ( dest == null || dest.canInsert( is ) )
{
target = is;
break;
}
}
}
}
if ( target != null )
{
ItemStack f = Platform.cloneItemStack( target );
f.stackSize = amount;
return cs.extractItems( side, f );
}
return null;
}
@Override
public ItemStack simulateSimilarRemove(int how_many, ItemStack filter, FuzzyMode fuzzyMode, IInventoryDestination dest)
{
ItemStack target = null;
for (ItemStack is : cs.getContents( side ))
{
if ( is != null )
{
if ( is.stackSize > 0 && (filter == null || Platform.isSameItemFuzzy( filter, is, fuzzyMode )) )
{
if ( dest == null || dest.canInsert( is ) )
{
target = is;
break;
}
}
}
}
if ( target != null )
{
int cnt = cs.getItemCount( side, target );
if ( cnt == 0 )
return null;
if ( cnt > how_many )
cnt = how_many;
ItemStack c = target.copy();
c.stackSize = cnt;
return c;
}
return null;
}
@Override
public ItemStack addItems(ItemStack A)
{
return cs.insertItems( side, A );
}
@Override
public ItemStack simulateAdd(ItemStack A)
{
int items = cs.spaceForItem( side, A );
ItemStack B = Platform.cloneItemStack( A );
if ( A.stackSize <= items )
return null;
B.stackSize -= items;
return B;
}
@Override
public boolean containsItems()
{
return cs.getContents( side ).size() > 0;
}
@Override
public Iterator<ItemSlot> iterator()
{
return new StackToSlotIterator( cs.getContents( side ).iterator() );
}
}