Use IItemHandler instead of IInventory internally (#2971)

* Use IItemHandler instead of IInventory internally
This commit is contained in:
fscan
2017-07-28 22:04:32 +02:00
committed by yueh
parent c077840988
commit 52d28fabe3
156 changed files with 2410 additions and 4604 deletions
@@ -25,10 +25,9 @@ import java.util.List;
import io.netty.buffer.ByteBuf;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.items.IItemHandler;
import appeng.api.AEApi;
import appeng.api.implementations.tiles.IChestOrDrive;
@@ -56,8 +55,9 @@ import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType;
import appeng.tile.grid.AENetworkInvTile;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.tile.inventory.InvOperation;
import appeng.util.Platform;
import appeng.util.inv.InvOperation;
import appeng.util.inv.filter.IAEItemFilter;
public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPriorityHost
@@ -67,8 +67,7 @@ public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPrior
private static final int BIT_BLINK_MASK = 0x24924924;
private static final int BIT_STATE_MASK = 0xDB6DB6DB;
private final int[] sides = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private final AppEngInternalInventory inv = new AppEngInternalInventory( this, 10 );
private final AppEngInternalInventory inv = new AppEngInternalInventory( this, 10, 1 );
private final ICellHandler[] handlersBySlot = new ICellHandler[10];
private final DriveWatcher<IAEItemStack>[] invBySlot = new DriveWatcher[10];
private final BaseActionSource mySrc;
@@ -97,6 +96,7 @@ public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPrior
{
this.mySrc = new MachineSource( this );
this.getProxy().setFlags( GridFlags.REQUIRE_CHANNEL );
this.inv.setFilter( new CellValidInventoryFilter() );
}
@TileEvent( TileEventType.NETWORK_WRITE )
@@ -257,19 +257,13 @@ public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPrior
}
@Override
public IInventory getInternalInventory()
public IItemHandler getInternalInventory()
{
return this.inv;
}
@Override
public boolean isItemValidForSlot( final int i, final ItemStack itemstack )
{
return !itemstack.isEmpty() && AEApi.instance().registries().cell().isCellHandled( itemstack );
}
@Override
public void onChangeInventory( final IInventory inv, final int slot, final InvOperation mc, final ItemStack removed, final ItemStack added )
public void onChangeInventory( final IItemHandler inv, final int slot, final InvOperation mc, final ItemStack removed, final ItemStack added )
{
if( this.isCached )
{
@@ -291,12 +285,6 @@ public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPrior
this.markForUpdate();
}
@Override
public int[] getAccessibleSlotsBySide( final EnumFacing side )
{
return this.sides;
}
private void updateState()
{
if( !this.isCached )
@@ -306,7 +294,7 @@ public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPrior
double power = 2.0;
for( int x = 0; x < this.inv.getSizeInventory(); x++ )
for( int x = 0; x < this.inv.getSlots(); x++ )
{
final ItemStack is = this.inv.getStackInSlot( x );
this.invBySlot[x] = null;
@@ -410,10 +398,20 @@ public class TileDrive extends AENetworkInvTile implements IChestOrDrive, IPrior
this.world.markChunkDirty( this.pos, this );
}
@Override
public boolean isEmpty()
private class CellValidInventoryFilter implements IAEItemFilter
{
// TODO Auto-generated method stub
return false;
@Override
public boolean allowExtract( IItemHandler inv, int slot, int amount )
{
return true;
}
@Override
public boolean allowInsert( IItemHandler inv, int slot, ItemStack stack )
{
return !stack.isEmpty() && AEApi.instance().registries().cell().isCellHandled( stack );
}
}
}