| package li.cil.oc.api.machine; |
| |
| import net.minecraft.item.ItemStack; |
| |
| import java.util.Map; |
| |
| /** |
| * This interface provides access to arguments passed to a {@link Callback}. |
| * <p/> |
| * It allows checking for the presence of arguments in a uniform manner, taking |
| * care of proper type checking based on what can be passed along by Lua. |
| * <p/> |
| * Note that integer values fetched this way are actually double values that |
| * have been truncated. So if a Lua program passes <tt>1.9</tt> and you do a |
| * <tt>checkInteger</tt> you'll get a <tt>1</tt>. |
| * <p/> |
| * The indexes passed to the various functions start at zero, i.e. to get the |
| * first argument you would use <tt>checkAny(0)</tt>. This is worth mentioning |
| * because Lua starts its indexes at one. |
| */ |
| public interface Arguments extends Iterable<Object> { |
| /** |
| * The total number of arguments that were passed to the function. |
| */ |
| int count(); |
| |
| /** |
| * Get whatever is at the specified index. |
| * <p/> |
| * Throws an error if there are too few arguments. |
| * <p/> |
| * The returned object will be one of the following, based on the conversion |
| * performed internally: |
| * <ul> |
| * <li><tt>null</tt> if the Lua value was <tt>nil</tt>.</li> |
| * <li><tt>java.lang.Boolean</tt> if the Lua value was a boolean.</li> |
| * <li><tt>java.lang.Double</tt> if the Lua value was a number.</li> |
| * <li><tt>byte[]</tt> if the Lua value was a string.</li> |
| * </ul> |
| * |
| * @param index the index from which to get the argument. |
| * @return the raw value at that index. |
| * @throws IllegalArgumentException if there is no argument at that index. |
| */ |
| Object checkAny(int index); |
| |
| /** |
| * Try to get a boolean value at the specified index. |
| * <p/> |
| * Throws an error if there are too few arguments. |
| * |
| * @param index the index from which to get the argument. |
| * @return the boolean value at the specified index. |
| * @throws IllegalArgumentException if there is no argument at that index, |
| * or if the argument is not a boolean. |
| */ |
| boolean checkBoolean(int index); |
| |
| /** |
| * Try to get an integer value at the specified index. |
| * <p/> |
| * Throws an error if there are too few arguments. |
| * |
| * @param index the index from which to get the argument. |
| * @return the integer value at the specified index. |
| * @throws IllegalArgumentException if there is no argument at that index, |
| * or if the argument is not a number. |
| */ |
| int checkInteger(int index); |
| |
| /** |
| * Try to get a double value at the specified index. |
| * <p/> |
| * Throws an error if there are too few arguments. |
| * |
| * @param index the index from which to get the argument. |
| * @return the double value at the specified index. |
| * @throws IllegalArgumentException if there is no argument at that index, |
| * or if the argument is not a number. |
| */ |
| double checkDouble(int index); |
| |
| /** |
| * Try to get a string value at the specified index. |
| * <p/> |
| * Throws an error if there are too few arguments. |
| * <p/> |
| * This will actually check for a byte array and convert it to a string |
| * using UTF-8 encoding. |
| * |
| * @param index the index from which to get the argument. |
| * @return the boolean value at the specified index. |
| * @throws IllegalArgumentException if there is no argument at that index, |
| * or if the argument is not a string. |
| */ |
| String checkString(int index); |
| |
| /** |
| * Try to get a byte array at the specified index. |
| * <p/> |
| * Throws an error if there are too few arguments. |
| * |
| * @param index the index from which to get the argument. |
| * @return the byte array at the specified index. |
| * @throws IllegalArgumentException if there is no argument at that index, |
| * or if the argument is not a byte array. |
| */ |
| byte[] checkByteArray(int index); |
| |
| /** |
| * Try to get a table at the specified index. |
| * <p/> |
| * Throws an error if there are too few arguments. |
| * |
| * @param index the index from which to get the argument. |
| * @return the table at the specified index. |
| * @throws IllegalArgumentException if there is no argument at that index, |
| * or if the argument is not a table. |
| */ |
| Map checkTable(int index); |
| |
| /** |
| * Try to get an item stack representation at the specified index. |
| * <p/> |
| * This is a utility method provided to convert tables to item stacks, with |
| * the tables being of a compatible format to that of tables generated by |
| * the built-in item stack converter. In particular, this takes care of |
| * restoring NBT data attached to the item stack. |
| * <p/> |
| * Throws an error if there are too few arguments. |
| * <p/> |
| * <em>Important</em>: usually you will not want to be using this. Some |
| * items require NBT information to fully describe them, and by default |
| * this information is not returned to underlying architectures when |
| * item stacks are returned from callbacks. This means the scripts can |
| * usually not provide this full information, so the roundtrip callback-> |
| * script->callback will be incomplete. |
| * <p/> |
| * Instead, please make use of the {@link li.cil.oc.api.internal.Database} |
| * component to get complete item stack descriptors. |
| * |
| * @param index the index from which to get the argument. |
| * @return the item stack at the specified index. |
| */ |
| ItemStack checkItemStack(int index); |
| |
| /** |
| * Get whatever is at the specified index. |
| * <p/> |
| * Return the specified default value if there is no such element, behaves |
| * like {@link #checkAny(int)} otherwise. |
| * <p/> |
| * The returned object will be one of the following, based on the conversion |
| * performed internally: |
| * <ul> |
| * <li><tt>null</tt> if the Lua value was <tt>nil</tt>.</li> |
| * <li><tt>java.lang.Boolean</tt> if the Lua value was a boolean.</li> |
| * <li><tt>java.lang.Double</tt> if the Lua value was a number.</li> |
| * <li><tt>byte[]</tt> if the Lua value was a string.</li> |
| * </ul> |
| * |
| * @param index the index from which to get the argument. |
| * @return the raw value at that index. |
| */ |
| Object optAny(int index, Object def); |
| |
| /** |
| * Try to get a boolean value at the specified index. |
| * <p/> |
| * Return the specified default value if there is no such element, behaves |
| * like {@link #checkBoolean(int)} otherwise. |
| * |
| * @param index the index from which to get the argument. |
| * @return the boolean value at the specified index. |
| * @throws IllegalArgumentException if the argument exists and is not a boolean. |
| */ |
| boolean optBoolean(int index, boolean def); |
| |
| /** |
| * Try to get an integer value at the specified index. |
| * <p/> |
| * Return the specified default value if there is no such element, behaves |
| * like {@link #checkInteger(int)} otherwise. |
| * |
| * @param index the index from which to get the argument. |
| * @return the integer value at the specified index. |
| * @throws IllegalArgumentException if the argument exists but is not a number. |
| */ |
| int optInteger(int index, int def); |
| |
| /** |
| * Try to get a double value at the specified index. |
| * <p/> |
| * Return the specified default value if there is no such element, behaves |
| * like {@link #checkDouble(int)} otherwise. |
| * |
| * @param index the index from which to get the argument. |
| * @return the double value at the specified index. |
| * @throws IllegalArgumentException if the argument exists and is not a number. |
| */ |
| double optDouble(int index, double def); |
| |
| /** |
| * Try to get a string value at the specified index. |
| * <p/> |
| * Return the specified default value if there is no such element, behaves |
| * like {@link #checkString(int)} otherwise. |
| * <p/> |
| * This will actually check for a byte array and convert it to a string |
| * using UTF-8 encoding. |
| * |
| * @param index the index from which to get the argument. |
| * @return the boolean value at the specified index. |
| * @throws IllegalArgumentException if the argument exists and is not a string. |
| */ |
| String optString(int index, String def); |
| |
| /** |
| * Try to get a byte array at the specified index. |
| * <p/> |
| * Return the specified default value if there is no such element, behaves |
| * like {@link #checkByteArray(int)} otherwise. |
| * |
| * @param index the index from which to get the argument. |
| * @return the byte array at the specified index. |
| * @throws IllegalArgumentException if the argument exists and is not a byte array. |
| */ |
| byte[] optByteArray(int index, byte[] def); |
| |
| /** |
| * Try to get a table at the specified index. |
| * <p/> |
| * Return the specified default value if there is no such element, behaves |
| * like {@link #checkTable(int)} otherwise. |
| * |
| * @param index the index from which to get the argument. |
| * @return the table at the specified index. |
| * @throws IllegalArgumentException if the argument exists and is not a table. |
| */ |
| Map optTable(int index, Map def); |
| |
| /** |
| * Try to get an item stack at the specified index. |
| * <p/> |
| * Return the specified default value if there is no such element, behaves |
| * like {@link #checkItemStack(int)} otherwise. |
| * |
| * @param index the index from which to get the argument. |
| * @return the item stack at the specified index. |
| * @throws IllegalArgumentException if the argument exists and is not an item stack. |
| */ |
| ItemStack optItemStack(int index, ItemStack def); |
| |
| /** |
| * Tests whether the argument at the specified index is a boolean value. |
| * <p/> |
| * This will return false if there is <em>no</em> argument at the specified |
| * index, i.e. if there are too few arguments. |
| * |
| * @param index the index to check. |
| * @return true if the argument is a boolean; false otherwise. |
| */ |
| boolean isBoolean(int index); |
| |
| /** |
| * Tests whether the argument at the specified index is an integer value. |
| * <p/> |
| * This will return false if there is <em>no</em> argument at the specified |
| * index, i.e. if there are too few arguments. |
| * |
| * @param index the index to check. |
| * @return true if the argument is an integer; false otherwise. |
| */ |
| boolean isInteger(int index); |
| |
| /** |
| * Tests whether the argument at the specified index is a double value. |
| * <p/> |
| * This will return false if there is <em>no</em> argument at the specified |
| * index, i.e. if there are too few arguments. |
| * |
| * @param index the index to check. |
| * @return true if the argument is a double; false otherwise. |
| */ |
| boolean isDouble(int index); |
| |
| /** |
| * Tests whether the argument at the specified index is a string value. |
| * <p/> |
| * This will return false if there is <em>no</em> argument at the specified |
| * index, i.e. if there are too few arguments. |
| * |
| * @param index the index to check. |
| * @return true if the argument is a string; false otherwise. |
| */ |
| boolean isString(int index); |
| |
| /** |
| * Tests whether the argument at the specified index is a byte array. |
| * <p/> |
| * This will return false if there is <em>no</em> argument at the specified |
| * index, i.e. if there are too few arguments. |
| * |
| * @param index the index to check. |
| * @return true if the argument is a byte array; false otherwise. |
| */ |
| boolean isByteArray(int index); |
| |
| /** |
| * Tests whether the argument at the specified index is a table. |
| * <p/> |
| * This will return false if there is <em>no</em> argument at the specified |
| * index, i.e. if there are too few arguments. |
| * |
| * @param index the index to check. |
| * @return true if the argument is a table; false otherwise. |
| */ |
| boolean isTable(int index); |
| |
| /** |
| * Tests whether the argument at the specified index is an item stack. |
| * <p/> |
| * This will return false if there is <em>no</em> argument at the specified |
| * index, i.e. if there are too few arguments. |
| * |
| * @param index the index to check. |
| * @return true if the argument is an item stack; false otherwise. |
| */ |
| boolean isItemStack(int index); |
| |
| /** |
| * Converts the argument list to a standard Java array, converting byte |
| * arrays to strings automatically, since this is usually what others |
| * want - if you need the actual raw byte arrays, don't use this method! |
| * |
| * @return an array containing all arguments. |
| */ |
| Object[] toArray(); |
| } |