blob: 175c4dc17e3d26b523102f30bf5130f36bdb8073 [file] [log] [blame] [raw]
package li.cil.oc.api
import scala.reflect.runtime.universe._
import net.minecraft.world.World
/**
* This interface is used to give drivers a controlled way of interacting with
* a computer. It can be passed to driver API functions if they declare a
* parameter of this type and is passed in the install and uninstall functions.
*/
trait IComputerContext {
/** The world the computer lives in. */
def world: World
/**
* Send a signal to the computer.
*
* Signals are like top level events. Signals are queued up and sequentially
* processed by the computer. The queue has a maximum length; if reached,
* this will return false. Signals only support simple types such as booleans,
* numbers and strings. This is because unprocessed signals have to be saved
* to NBT format when the game is saved.
*
* Lua programs can register a function as a callback for each signal type,
* which is the first parameter - the signal name. For example, two built-in
* signals are "component_install" and "component_uninstall".
*
* @param name the name of the signal.
* @param args any parameters to pass along with the signal.
*/
def signal(name: String, args: Any*): Boolean
/**
* Gets a component with the specified ID from the computer.
*
* The Lua state refers to components only by their ID. They may pass this ID
* along to a driver API function, so that it in turn may resolve it to the
* actual component (originally retrieved by the computer via
* {@see IItemDriver#getComponent(ItemStack)} or
* {@see IBlockDriver#getComponent(Int, Int, Int)}).
*
* This will try to convert the component to the specified type and throw an
* exception if the type does not match. It also throws an exception if there
* is no such component.
*
* @param id the id of the component to get.
*/
def component[T: TypeTag](id: Int): T
}