/** * This file is part of the public ComputerCraft API - http://www.computercraft.info * Copyright Daniel Ratcliffe, 2011-2015. This API may be redistributed unmodified and in * full only. For help using the API, and posting your mods, visit the forums at * computercraft.info. */ package dan200.computercraft.api.peripheral; import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.LuaException; /** * The interface that defines a peripheral. This should be implemented by the * TileEntity of any common that you wish to be interacted with by * computercraft or turtle. */ public interface IPeripheral { /** * Should return a string that uniquely identifies this type of peripheral. * This can be queried from lua by calling peripheral.getType() * @return A string identifying the type of peripheral. */ public String getType(); /** * Should return an array of strings that identify the methods that this * peripheral exposes to Lua. This will be called once before each attachment, * and should not change when called multiple times. * @return An array of strings representing method names. * @see #callMethod */ public String[] getMethodNames(); /** * This is called when a lua program on an attached computercraft calls * peripheral.call() with one of the methods exposed by getMethodNames().

Be * aware that this will be called from the ComputerCraft Lua thread, and must be * thread-safe when interacting with minecraft objects. * @param computer The interface to the computercraft that is making the call. * Remember that multiple * computers can be attached to a peripheral at once. * @param context The context of the currently running lua thread. This can be * used to wait for events * or otherwise yield. * @param method An integer identifying which of the methods from * getMethodNames() the computercraft * wishes to call. The integer indicates the index into the * getMethodNames() table that corresponds to the string passed into peripheral.call() * @param arguments An array of objects, representing the arguments passed into * peripheral.call().
* Lua values of type "string" will be represented by Object type * String.
Lua values of type "number" will be represented by Object type * Double.
Lua values of type "boolean" will be represented by Object type * Boolean.
Lua values of any other type will be represented by a null object.
* This array will be empty if no arguments are passed. * @return An array of objects, representing values you wish to return to the lua * program.
* Integers, Doubles, Floats, Strings, Booleans and null be converted to * their corresponding lua type.
All other types will be converted to nil.
You * may return null to indicate no values should be returned. * @throws Exception If you throw any exception from this function, a lua error * will be raised with the * same message as your exception. Use this to throw appropriate * errors if the wrong arguments are supplied to your method. * @see #getMethodNames */ public Object[] callMethod( IComputerAccess computer, ILuaContext context, int method, Object[] arguments ) throws LuaException, InterruptedException; /** * Is called when canAttachToSide has returned true, and a computercraft is attaching * to the peripheral. This will occur when a peripheral is placed next to an active * computercraft, when a computercraft is turned on next to a peripheral, or when a * turtle travels into a square next to a peripheral. Between calls to attach() and * detach(), the attached computercraft can make method calls on the peripheral using * peripheral.call(). This method can be used to keep track of which computers are * attached to the peripheral, or to take action when attachment occurs.

Be * aware that this will be called from the ComputerCraft Lua thread, and must be * thread-safe when interacting with minecraft objects. * @param computer The interface to the computercraft that is being attached. * Remember that multiple * computers can be attached to a peripheral at once. * @see #detach */ public void attach(IComputerAccess computer); /** * Is called when a computercraft is detaching from the peripheral. * This will occur when a computercraft shuts down, when the peripheral is removed * while attached to computers, or when a turtle moves away from a square attached to * a peripheral. This method can be used to keep track of which computers are attached * to the peripheral, or to take action when detachment occurs.

Be aware that * this will be called from the ComputerCraft Lua thread, and must be thread-safe when * interacting with minecraft objects. * @param computer The interface to the computercraft that is being detached. * Remember that multiple * computers can be attached to a peripheral at once. * @see #detach */ public void detach(IComputerAccess computer); /** * TODO: Document me */ public boolean equals(IPeripheral other); }