package appeng.helpers; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import appeng.api.AEApi; import appeng.api.config.AccessRestriction; import appeng.api.config.Actionable; import appeng.api.config.PowerMultiplier; import appeng.api.features.IWirelessTermHandler; import appeng.api.implementations.guiobjects.IPortableCell; import appeng.api.networking.IGrid; import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; import appeng.api.networking.security.BaseActionSource; import appeng.api.networking.storage.IStorageGrid; import appeng.api.storage.IMEMonitor; import appeng.api.storage.IMEMonitorHandlerReciever; import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; public class WirelessTerminalGuiObject implements IPortableCell { IWirelessTermHandler wth; String encryptionKey; IGrid targetGrid; IStorageGrid sg; IMEMonitor itemStorage; EntityPlayer myPlayer; public ItemStack effectiveItem; public WirelessTerminalGuiObject(IWirelessTermHandler wh, ItemStack is, EntityPlayer ep, World w, int x, int y, int z) { encryptionKey = wh.getEncryptionKey( is ); effectiveItem = is; myPlayer = ep; wth = wh; long encKey = Long.parseLong( encryptionKey ); Object obj = AEApi.instance().registries().locateable().findLocateableBySerial( encKey ); if ( obj instanceof IGridHost ) { IGridNode n = ((IGridHost) obj).getGridNode( ForgeDirection.UNKNOWN ); if ( n != null ) { targetGrid = n.getGrid(); if ( targetGrid != null ) { sg = targetGrid.getCache( IStorageGrid.class ); if ( sg != null ) itemStorage = sg.getItemInventory(); } } } } public boolean rangeCheck() { if ( targetGrid != null && itemStorage != null ) { return true; } return false; } @Override public IMEMonitor getItemInventory() { if ( sg == null ) return null; return sg.getItemInventory(); } @Override public IMEMonitor getFluidInventory() { if ( sg == null ) return null; return sg.getFluidInventory(); } @Override public void addListener(IMEMonitorHandlerReciever l, Object verificationToken) { if ( itemStorage != null ) itemStorage.addListener( l, verificationToken ); } @Override public void removeListener(IMEMonitorHandlerReciever l) { if ( itemStorage != null ) itemStorage.removeListener( l ); } @SuppressWarnings("deprecation") @Override public IItemList getAvailableItems(IItemList out) { if ( itemStorage != null ) return itemStorage.getAvailableItems( out ); return out; } @Override public IItemList getStorageList() { if ( itemStorage != null ) return itemStorage.getStorageList(); return null; } @Override public AccessRestriction getAccess() { if ( itemStorage != null ) return itemStorage.getAccess(); return AccessRestriction.NO_ACCESS; } @Override public boolean isPrioritized(IAEItemStack input) { if ( itemStorage != null ) return itemStorage.isPrioritized( input ); return false; } @Override public boolean canAccept(IAEItemStack input) { if ( itemStorage != null ) return itemStorage.canAccept( input ); return false; } @Override public int getPriority() { if ( itemStorage != null ) return itemStorage.getPriority(); return 0; } @Override public int getSlot() { if ( itemStorage != null ) return itemStorage.getSlot(); return 0; } @Override public IAEItemStack injectItems(IAEItemStack input, Actionable type, BaseActionSource src) { if ( itemStorage != null ) return itemStorage.injectItems( input, type, src ); return input; } @Override public IAEItemStack extractItems(IAEItemStack request, Actionable mode, BaseActionSource src) { if ( itemStorage != null ) return itemStorage.extractItems( request, mode, src ); return null; } @Override public StorageChannel getChannel() { if ( itemStorage != null ) return itemStorage.getChannel(); return StorageChannel.ITEMS; } @Override public double extractAEPower(double amt, Actionable mode, PowerMultiplier usePowerMultiplier) { if ( wth != null && effectiveItem != null ) { if ( mode == Actionable.SIMULATE ) return wth.hasPower( myPlayer, amt, getItemStack() ) ? amt : 0; return wth.usePower( myPlayer, amt, getItemStack() ) ? amt : 0; } return 0.0; } @Override public ItemStack getItemStack() { return effectiveItem; } }