API
GolemScript is a library for the GolemScript programming language.
As such, it doesn't come with a user interface with which to run programs.
Instead, it exposes an API that allows other datapacks to run GolemScript programs.
All API functions follow the same conventions.
A function is called using function glm:api/module/submodule/function, submodule being optional.
A function accepts its arguments and outputs values through a data storage: glm:api/module/submodule function.
A function returns (using the return command) a status code based on the outcome of the function. These match http status codes.
For example, the function with module parser and function name init is called with function glm:api/parser/init,
recieves the argument target through glm:api/parser init.target,
outputs error through glm:api/parser init.error,
and returns a status code, which can be captured using execute store.
Parser
Init
Parses the given strings, separating them with newlines.
Arguments:
target- An array of strings
Output:
output- The parsed AST oftargeterror- The error message, if any
Returns:
200- Parsed successfully400- Invalid syntax
Interpreter
Init
Executes one cycle of the given program.
Arguments:
stack- An array containing the program stack. Should start as an array containing one item: The parsed ASTvariables- An array containing all defined variablesfunctions- An array containing all defined functionsscope- An integer, the current program scope. Should start at0
Output:
- error - The error message, if any
output - An object, containing the values that should be used as input in the next cycle:
stack- The program stack after the cycle. If empty, the program is finished, otherwise, it should be run again next tickvariables- An array containing all defined variablesfunctions- An array containing all defined functionsscope- An integer, the current program scope
Returns:
200- Program ran successfully (Note: If the interpreter throws a Runtime Error, this is still considered a success, and stderr should be checked)400- Invalid inputs given
Function
Register
Registers a set of builtin functions
Arguments:
target- An array of objects containing the data about the registered functions
A registered function consists of:
id- Name of the function, used to call it in GolemScriptname- Name of the function as an array of single charactersfunction- Resource location of the mcfunction implementationargs- Array of types of the arguments the function expects (e.g.[{type: "integer"}]), will be used for type-checking which is not yet implemented
Outputs:
error- The error message, if any
Returns:
200- Successfully registered the functions400- Invalid input
Delete
Deletes a builtin function from the registry
Arguments:
id- The name of the function to delete
Outputs:
errorThe error message, if any
Returns:
200- Successfully deleted function404- Could not find the function to delete
Execute
Execute is not a callable function, but the data given to builtin functions.
It is all found in glm:api/interpreter/function execute
This is an object that contains:
args- Array of arguments the user passed to the functionmetadata- An object containing arbitrary data the can be used to store data over multiple ticks
You can also write to the storage:
metadata- The data to store for the next tickloop- Whether to call this function again the next tick (used in sleep)next- An AST node to evaluate, and then return execution to the function (for example usage, see the implementation of map)return- The value to return from the function, if any
Stdio
Stdio is not a function that you can call, but a storage that can be read from.
The storage is glm:api/interpreter stdio.
Out
Standard output of the program.
An array of string literals
A string literal is an object containing:
type- The string"literal", used internally in the interpretervariant- The string"string", marks this object as a stringvalue- The string's value, as an array of characters ("hello"is represented as["h","e","l","l","o"])
Error
Array containing all errors the program generated An error is an object containing:
type- The string"literal", used internally in the interpretervariant- The string"error", marks this object as an errorvalue- The error message, as a string