Applied-Energistics-2-tiler.../me/storage/SecurityInventory.java
2014-07-23 13:55:48 -05:00

158 lines
3.3 KiB
Java

package appeng.me.storage;
import com.mojang.authlib.GameProfile;
import appeng.api.AEApi;
import appeng.api.config.AccessRestriction;
import appeng.api.config.Actionable;
import appeng.api.config.SecurityPermissions;
import appeng.api.implementations.items.IBiometricCard;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.security.PlayerSource;
import appeng.api.storage.IMEInventoryHandler;
import appeng.api.storage.StorageChannel;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.me.GridAccessException;
import appeng.tile.misc.TileSecurity;
import appeng.util.item.ItemList;
public class SecurityInventory implements IMEInventoryHandler<IAEItemStack>
{
final TileSecurity securityTile;
final public IItemList<IAEItemStack> storedItems = AEApi.instance().storage().createItemList();
public SecurityInventory(TileSecurity ts) {
securityTile = ts;
}
private boolean hasPermission(BaseActionSource src)
{
if ( src.isPlayer() )
{
try
{
return securityTile.getProxy().getSecurity().hasPermission( ((PlayerSource) src).player, SecurityPermissions.SECURITY );
}
catch (GridAccessException e)
{
// :P
}
}
return false;
}
@Override
public IAEItemStack injectItems(IAEItemStack input, Actionable type, BaseActionSource src)
{
if ( hasPermission( src ) && AEApi.instance().items().itemBiometricCard.sameAsStack( input.getItemStack() ) )
{
if ( canAccept( input ) )
{
if ( type == Actionable.SIMULATE )
return null;
storedItems.add( input );
securityTile.inventoryChanged();
return null;
}
}
return input;
}
@Override
public IAEItemStack extractItems(IAEItemStack request, Actionable mode, BaseActionSource src)
{
if ( hasPermission( src ) )
{
IAEItemStack target = storedItems.findPrecise( request );
if ( target != null )
{
IAEItemStack output = target.copy();
if ( mode == Actionable.SIMULATE )
return output;
target.setStackSize( 0 );
securityTile.inventoryChanged();
return output;
}
}
return null;
}
@Override
public IItemList<IAEItemStack> getAvailableItems(IItemList out)
{
for (IAEItemStack ais : storedItems)
out.add( ais );
return out;
}
@Override
public StorageChannel getChannel()
{
return StorageChannel.ITEMS;
}
@Override
public AccessRestriction getAccess()
{
return AccessRestriction.READ_WRITE;
}
@Override
public boolean isPrioritized(IAEItemStack input)
{
return false;
}
@Override
public boolean canAccept(IAEItemStack input)
{
if ( input.getItem() instanceof IBiometricCard )
{
IBiometricCard tbc = (IBiometricCard) input.getItem();
GameProfile newUser = tbc.getProfile( input.getItemStack() );
int PlayerID = AEApi.instance().registries().players().getID( newUser );
if ( securityTile.getOwner() == PlayerID )
return false;
for (IAEItemStack ais : storedItems)
{
if ( ais.isMeaninful() )
{
GameProfile thisUser = tbc.getProfile( ais.getItemStack() );
if ( thisUser.equals( newUser ) )
return false;
}
}
return true;
}
return false;
}
@Override
public int getPriority()
{
return 0;
}
@Override
public int getSlot()
{
return 0;
}
@Override
public boolean validForPass(int i)
{
return true;
}
}