mc-macros : Minecraft Function Macros
You'll get macros of your own.
Installation
Node.js is required for execution.
npm install -g mc-macros
Run
mcmacros [-v | --verbose] DatapackDir ... InputFiles
DatapackDir
Specify the directory of the data pack you want to output.
InputFiles
Specifies one or more input files. Input files are always processed in the order specified.
-v
--verbose
Output result to a file is displayed by adding -v
option.
Basic macro
These basic macros are always loaded. These are defined in defaults.js
.
namespace
When using anonymous functions, you must first specify a default namespace with namsspace
.
namespace foo
anon (anonymous function)
In the Minecraft function, when you want to express the control structure, you need to create a mcfunction file with a name for the structure, which makes editing very complicated.
By using the anon
macro and indent blocking instead of the function ...
command, The contents of the block are output to another mcfunction file and expanded as a command that will be executed.
The function namespace is the value specified by the namespace
macro.
namespace swedenanon say Mojang.
When this macro is expanded, the following mcfuncion will probably be output.
function sweden: anon/0_0
# ========================================# data/sweden/functions/anon/0_0.mcfunctionsay Mojang.
Furthermore, it is a good example of an anonymous function.
execute as @e[tag=Adios] at @s run anon say Adios. tp @s ~ ~ 100 ~
Since the command source is given to the anonymous function and executed, @e[tag=Adios]
can be processed only once.
recursive
Within an anonymous function block, recursive
can recursively execute itself.
execute as @e[type=cow,limit=1,sort=nearest] run anon execute store result score @p tmp run data get entity @s Health scoreboard players operation @p HealthCount += @p tmp kill @s execute if score @p HealthCount matches ..100 as @e[type=cow,limit=1,sort=nearest] run recursive
In this example, the health of the bulls to be killed is counted and killed one by one until the total reaches 100 or more.
mcfunction
Switches the mcfunction file to be output.
If the namespace is omitted, the value specified by namespace
is used.
namespace foo # output to data/foo/functions/bar.mcfunctionmcfunction barsay Bar. # output to data/sweden/functions/mojang.mcfunctionmcfunction sweden: mojangsay Mojang.
Function tag specification
mcfunction myload load mcfunction mytick tick mcfunction myloadandtick load tick
By specifying the function tag in the data pack following the function name, load
and init
are registered in load.json
and tick.json
of data/minecraft/tags/functions
respectively.
When using a macro that uses the initialization function, the function registered in load
is required.
If a tagged function is no longer needed, it must be corrected manually.
define
Sets a key and value in the current scope of the preprocessor. This makes the string template using the Template Literal of ES2015/ES6 work.
define foo barsay ${foo}.# => say bar. define num 10say ${num * num}.# => say 100.
The template string is processed when the command macro is output, so if you give a define
value to a parameter that internally processes the value in the macro, you will get unexpected results.
require
You can add macro modules for each input file.
require mymacros
This example configures the preprocessor to use the mymacros.js macro module in the same directory as the input file.
Macro module
Importing with require
is possible by making initialization functions and macro functions into modules.
Please refer to the definition example. https://github.com/rasensuihei/mc-macros/blob/master/test/mymacros.js
Initialize
Set a function to expand the initialization command in exports.init
.
exports { cx}
Directive
Set the directives to exports.directives
.
directives 'greeting' = cxexportsdirectives = directives
Parameter type
By specifying types
in the directive, you can specify the parameter types that the macro receives.
These can be any arrays of 'number', 'int', 'float', 'string', 'bool', 'json', 'expr'.
If types
is omitted, the character string of the text line excluding the command name becomes the parameter.
directives'calc' = types: 'number' 'string' 'number' { if op === '+' cx }
handler function
- command: Command macro expansion handler
- blockBegin: Block start handler
- blockRepeat: Handler that repeats a block
- blockEnd: Block end handler