Applied-Energistics-2-tiler.../src/main/java/appeng/me/storage/SecurityInventory.java

160 lines
3.3 KiB
Java
Raw Normal View History

package appeng.me.storage;
import appeng.api.AEApi;
import appeng.api.config.AccessRestriction;
import appeng.api.config.Actionable;
import appeng.api.config.SecurityPermissions;
2014-02-01 06:37:27 +01:00
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;
2014-07-26 04:52:21 +02:00
import com.mojang.authlib.GameProfile;
public class SecurityInventory implements IMEInventoryHandler<IAEItemStack>
{
final TileSecurity securityTile;
2014-07-23 20:55:48 +02:00
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() ) )
{
2014-02-01 06:37:27 +01:00
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)
{
2014-02-01 06:37:27 +01:00
if ( input.getItem() instanceof IBiometricCard )
{
IBiometricCard tbc = (IBiometricCard) input.getItem();
2014-07-09 22:07:53 +02:00
GameProfile newUser = tbc.getProfile( input.getItemStack() );
2014-02-01 06:37:27 +01:00
int PlayerID = AEApi.instance().registries().players().getID( newUser );
if ( securityTile.getOwner() == PlayerID )
return false;
2014-02-01 06:37:27 +01:00
for (IAEItemStack ais : storedItems)
{
2014-09-20 22:42:09 +02:00
if ( ais.isMeaningful() )
2014-02-01 06:37:27 +01:00
{
2014-07-09 22:07:53 +02:00
GameProfile thisUser = tbc.getProfile( ais.getItemStack() );
2014-07-29 18:20:47 +02:00
if ( thisUser == newUser )
return false;
if ( thisUser != null && thisUser.equals( newUser ) )
2014-02-01 06:37:27 +01:00
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;
}
}