# Standard library for mcfunction Make development of Minecraft datapacks in mcfunction easier with variables, arithmetic, and relational (comparison) operators. ```mcfunction # Set variable 'my_variable' to 10 function var:set { k: my_variable, v: 10 } # Add 5 to 'my_variable' function math:add { k: my_variable, v: 5 } # Put the result of the calculation back into 'my_variable' function var:put { k: my_variable } # if 'my_variable' == 15 function comp:eq { k: my_variable, v: 15 } # then execute if std:out run return run function my_function # else execute unless std:out run return fail ``` **See the [function reference](#functions) for a full list of available functions** # Installation Download the datapack as a zip from [the releases page](/vlw/mcfstd/releases) for the version that you require. Place the zip file directly into the `datapacks/` directory of your Minecraft world save directory. Enable this library in Minecraft by typing the following two commands ```mcfunction reload datapack enable "file/mcfstd-X-X-X.zip" # Where X-X-X would be the version of the datapack ``` # The standard output This library contains a standard output that is used as an intermediary for arithmetic and comparison operations. # Arithmetics When performing arithmetic and comparisons on variables, the result of the operation is not stored back into the variable immediately. When a function, for example `std:add` is performed on a varaible, the result is stored in an internal register called the "A" register. This allows for simple equations to be constructed without needing to create temporary or mutating existing variables. ```mcfunction function var:set { k: addend, v: 10 } function var:set { k: sum, v: 0 } # Add 10 to the variable 'addend' and store the result in 'sum' function math:add { k: addend, v: 10 } function var:put { k: sum } ``` Note that the variable `addend` is still 10 and the variable `sum` contains the sum of the calculation. # Comparisons The result of comparing variable values is not returned immediately from the comparison functions. This is mainly due to a limitation in mcfunction which does not permit function arguments to be passed after an `execute (if|unless)` statement. To work around this, we store the result of the last comparison in a standard output function `std:out`. This function will return nothing (pass) if the last comparison was truthy, and return 0 (fail) if the comparison was falsy. ```mcfunction function var:set { k: x, v: 20 } function var:set { k: y, v: 10 } # x != y, so std:out will be false function comp:eq { a: x, b: y } execute if std:out run return run function my_function # x > y, so std:out will be TRUE and this function will return with my_function function comp:gt { a: x, b: y } execute if std:out run return run function my_function ``` # Functions
Function Arguments Description
Variables
var:set k Name of the variable (string) Set the value of a variable
v Value of the variable (int)
var:unset k Name of the variable (string) Remove a varialbe
var:mv k Old variable name (string) Rename a variable
v New variable name (string)
var:inc k Name of the variable (string) Increment the value of a variable
var:dec k Name of the variable (string) Decrement the value of a variable
var:put - Put the current value of A into this variable
Arithmetic
math:add k Name of the variable (string) Add a number to the current value of a variable and store the result in A
v Number to add (int)
math:sub k Name of the variable (string) Subtract a number to the current value of a variable and store the result in A
v Number to subtract (int)
math:mul k Name of the variable (string) Multiply a number with the current value of a variable and store the result in A
v Number to multiply (int)
math:div k Name of the variable (string) Divide a number with the current value of a variable and store the result in A
v Number to divide (int)
math:mod k Name of the variable (string) Modulo a number with the current value of a variable and store the result in A
v Number to modulo (int)
Relation / Compare
comp:eq a Name of the first variable (string) Check if a = b and store the result in the standard output
b Name of the second variable (string)
comp:gt a Name of the first variable (string) Check if a > b and store the result in the standard output
b Name of the second variable (string)
comp:gteq a Name of the first variable (string) Check if a >= b and store the result in the standard output
b Name of the second variable (string)
comp:lt a Name of the first variable (string) Check if a < b and store the result in the standard output
b Name of the second variable (string)
comp:lteq a Name of the first variable (string) Check if a <= b and store the resulteq in the standard output
b Name of the second variable (string)
Built-in operations
std:out - Will return nothing if the value of the standard output is not fail. Else this function will also fail