blob: d4d9a5941e1b6f8980106d87b7611b5770ad7a9e [file] [log] [blame] [raw]
package appeng.api.me.util;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import appeng.api.IAEItemStack;
import appeng.api.TileRef;
import appeng.api.exceptions.AppEngTileMissingException;
import appeng.api.me.tiles.IGridMachine;
import appeng.api.me.tiles.IGridTileEntity;
import appeng.api.me.tiles.ITilePushable;
import appeng.api.networkevents.MENetworkEvent;
import appeng.api.networkevents.MENetworkPowerStorage;
/**
* Lets you access network related features. You will mostly care about "getCellArray()" which returns the IMEInventory for the entire network...
*/
public interface IGridInterface
{
/**
* Issue a new crafting request.
* @param whatToCraft
* @param showInMonitor
* @param enableRecursion
* @return the ICraftRequest
* @throws AppEngTileMissingException
*/
public ICraftRequest craftingRequest( ItemStack whatToCraft, boolean showInMonitor, boolean enableRecursion ) throws AppEngTileMissingException;
/**
* deprecated version of creaftingRequest.
* @param what
* @return
* @throws AppEngTileMissingException
*/
public ICraftRequest craftingRequest( ItemStack what ) throws AppEngTileMissingException;
/**
* opens the crafting gui.
* @param pmp
* @param gte
* @param s
* @throws AppEngTileMissingException
*/
public void craftGui( EntityPlayerMP pmp, IGridTileEntity gte, ItemStack s ) throws AppEngTileMissingException;
/**
* Updates the interface requested, used internally
* @param te
*/
public void requestUpdate( IGridTileEntity te );
/**
* returns a list of all machines on the grid.
* @return
*/
List< TileRef<IGridMachine> > getMachines();
/**
* Labeled version for debugging...
*/
boolean useMEEnergy(float use, String for_what);
/**
* returns energy to the system to prevent endless energy sinks.
*/
void refundMEEnergy( float use, String for_what );
/**
* Reports previous 20 ticks avg of energy usage.
* @return
*/
public float getPowerUsageAvg();
/**
* this is used for standard items, anything else just use useMEEnergy.
* @param items
* @param multipler
* @return
*/
int usePowerForAddition(int items, int multipler);
/**
* returns a single IMEInventory that represents the entire networks.
* @return
*/
public IMEInventoryHandler getCellArray();
/**
* returns a single IMEInventory that represents the entire network, and all crafting available.
* @return
*/
public IMEInventoryHandler getFullCellArray();
/**
* add which users should be notified of terminal updates.
* @param p
*/
void addViewingPlayer(EntityPlayer p);
/**
* remove which users should be notified of terminal updates.
* @param p
*/
void rmvViewingPlayer(EntityPlayer p);
/**
* add which users should be notified of crafting queue updates.
* @param p
*/
void addCraftingPlayer(EntityPlayer p);
/**
* remove which users should be notified of crafting queue updates.
* @param p
*/
void rmvCraftingPlayer(EntityPlayer p);
/**
* aquire the controller tile entity.
* @return
*/
public TileEntity getController();
/**
* create a waiting job.
* @param what
* @return
*/
ICraftRequest waitingRequest(ItemStack what);
/**
* creates a crafting job to push the item out of IPushable, and to enable crafting to acocomplish this goal.
* @param willAdd
* @param out
* @param allowCrafting
* @return
*/
ICraftRequest pushRequest( ItemStack willAdd, ITilePushable out, boolean allowCrafting );
/**
* is the grid valid?
* @return
*/
public boolean isValid();
/**
* tell AE to re-examin items in the waiting list.
*/
void resetWaitingQueue();
/**
* craftable items
* @return
*/
IMEInventoryHandler getCraftableArray();
/**
* get a numeric id for this grid, used internally for cable animations, and not much else.
* @return
*/
public int getGridIndex();
/**
* Try to find the pattern for the item in question.
* @param req
* @return
*/
public ICraftingPattern getPatternFor(ItemStack req);
/**
* Inform the network that power costs have changed.
*/
public void triggerPowerUpdate();
/**
* Inform the netowrk that these items were removed from storage ( don't do this for items remove though the grid, it already knows about those. )
* @param removed
*/
public void notifyExtractItems(IAEItemStack removed);
/**
* Inform the network that these items were added to storage ( don't do this for items added via the grid, it already knows about those. )
* @param vo
*/
public void notifyAddItems(IAEItemStack vo);
/**
* return a cache by its identifier ( the number you get when you register your cache with AE )
* @param id
* @return
*/
public IGridCache getCacheByID( int id );
/**
* Potential future use, for now just returns the network encryption key.
* @return
*/
public String getName();
/**
* inform the network that energy was transfered between two nodes on the network,
* this will be used to calculates future information, but also causes the network
* to flash presently.
*
* this will automatically be handled by the standard extractItem / addItem API in the future, only
* Processes that skip the vanilla AE storage system should use this.
*
* @param a
* @param b
* @param amt
*/
void signalEnergyTransfer(IGridTileEntity a, IGridTileEntity b, float amt);
/**
* posts an event into the network, blocks with the event listeners on them will receive them.
* @param ev
* @return
*/
public MENetworkEvent postEvent( MENetworkEvent ev );
@Override
public boolean equals(Object obj);
/**
* total amount of power available
* @return
*/
public double getAvailablePower();
/**
* Returns if the system can provide this much power, returns the amount of power the system can provide.
* @param powerRequired
* @return
*/
public float canUsePower( float powerRequired );
}