package li.cil.oc.api; import li.cil.oc.api.nanomachines.BehaviorProvider; import li.cil.oc.api.nanomachines.Controller; import net.minecraft.entity.player.EntityPlayer; import java.util.Collections; /** * This API allows interfacing with nanomachines. * <p/> * It allows registering custom behavior providers as well as querying for all * presently registered providers and getting a controller for a player. */ public class Nanomachines { /** * Register a new behavior provider. * <p/> * When a controller is reconfigured it will draw behaviors from all * registered providers and build a new random connection graph to * those behaviors. * * @param provider the provider to add. */ public static void addProvider(BehaviorProvider provider) { if (API.nanomachines != null) API.nanomachines.addProvider(provider); } /** * Get a list of all currently registered providers. * * @return the list of all currently registered providers. */ public static Iterable<BehaviorProvider> getProviders() { if (API.nanomachines != null) return API.nanomachines.getProviders(); return Collections.emptyList(); } /** * Check whether a player has a nanomachine controller installed. * * @param player the player to check for. * @return <tt>true</tt> if the player has a controller, <tt>false</tt> otherwise. */ public static boolean hasController(EntityPlayer player) { if (API.nanomachines != null) return API.nanomachines.hasController(player); return false; } /** * Get the nanomachine controller of the specified player. * <p/> * If the player has a controller installed, this will initialize the * controller if it has not already been loaded. If the player has no * controller, this will return <tt>null</tt>. * * @param player the player to get the controller for. * @return the controller for the specified player. */ public static Controller getController(EntityPlayer player) { if (API.nanomachines != null) return API.nanomachines.getController(player); return null; } /** * Install a controller for the specified player if it doesn't already * have one. * <p/> * This will also initialize the controller if it has not already been * initialized. * * @param player the player to install a nanomachine controller for. */ public static Controller installController(EntityPlayer player) { if (API.nanomachines != null) return API.nanomachines.installController(player); return null; } /** * Uninstall a controller from the specified player if it has one. * <p/> * This will disable all active behaviors before disposing the controller. * * @param player the player to uninstall a nanomachine controller from. */ public static void uninstallController(EntityPlayer player) { if (API.nanomachines != null) API.nanomachines.uninstallController(player); } // ----------------------------------------------------------------------- // private Nanomachines() { } }