119 lines
2.5 KiB
Java
119 lines
2.5 KiB
Java
|
|
package appeng.tile.inventory;
|
|
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
|
|
|
import appeng.api.storage.ICellInventory;
|
|
import appeng.api.storage.ICellInventoryHandler;
|
|
import appeng.util.inv.IAEAppEngInventory;
|
|
import appeng.util.inv.filter.IAEItemFilter;
|
|
|
|
|
|
public class AppEngCellInventory implements IItemHandlerModifiable
|
|
{
|
|
private final AppEngInternalInventory inv;
|
|
private final ICellInventoryHandler handlerForSlot[];
|
|
|
|
public AppEngCellInventory( final IAEAppEngInventory host, final int slots )
|
|
{
|
|
this.inv = new AppEngInternalInventory( host, slots, 1 );
|
|
this.handlerForSlot = new ICellInventoryHandler[slots];
|
|
}
|
|
|
|
public void setHandler( final int slot, final ICellInventoryHandler handler )
|
|
{
|
|
this.handlerForSlot[slot] = handler;
|
|
}
|
|
|
|
public void setFilter( IAEItemFilter filter )
|
|
{
|
|
this.inv.setFilter( filter );
|
|
}
|
|
|
|
@Override
|
|
public void setStackInSlot( int slot, ItemStack stack )
|
|
{
|
|
this.persist( slot );
|
|
this.inv.setStackInSlot( slot, stack );
|
|
this.cleanup( slot );
|
|
}
|
|
|
|
@Override
|
|
public int getSlots()
|
|
{
|
|
return this.inv.getSlots();
|
|
}
|
|
|
|
@Override
|
|
public ItemStack getStackInSlot( int slot )
|
|
{
|
|
this.persist( slot );
|
|
return this.inv.getStackInSlot( slot );
|
|
}
|
|
|
|
@Override
|
|
public ItemStack insertItem( int slot, ItemStack stack, boolean simulate )
|
|
{
|
|
this.persist( slot );
|
|
final ItemStack ret = this.inv.insertItem( slot, stack, simulate );
|
|
this.cleanup( slot );
|
|
return ret;
|
|
}
|
|
|
|
@Override
|
|
public ItemStack extractItem( int slot, int amount, boolean simulate )
|
|
{
|
|
this.persist( slot );
|
|
final ItemStack ret = this.inv.extractItem( slot, amount, simulate );
|
|
this.cleanup( slot );
|
|
return ret;
|
|
}
|
|
|
|
@Override
|
|
public int getSlotLimit( int slot )
|
|
{
|
|
return this.inv.getSlotLimit( slot );
|
|
}
|
|
|
|
@Override
|
|
public boolean isItemValid( int slot, ItemStack stack )
|
|
{
|
|
return this.inv.isItemValid( slot, stack );
|
|
}
|
|
|
|
public void persist()
|
|
{
|
|
for( int i = 0; i < this.getSlots(); ++i )
|
|
{
|
|
this.persist( i );
|
|
}
|
|
}
|
|
|
|
private void persist( int slot )
|
|
{
|
|
if( this.handlerForSlot[slot] != null )
|
|
{
|
|
final ICellInventory ci = this.handlerForSlot[slot].getCellInv();
|
|
if( ci != null )
|
|
{
|
|
ci.persist();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void cleanup( int slot )
|
|
{
|
|
if( this.handlerForSlot[slot] != null )
|
|
{
|
|
final ICellInventory ci = this.handlerForSlot[slot].getCellInv();
|
|
|
|
if( ci == null || ci.getItemStack() != this.inv.getStackInSlot( slot ) )
|
|
{
|
|
this.handlerForSlot[slot] = null;
|
|
}
|
|
}
|
|
}
|
|
}
|