Get Premium

MacroMod Documentation & API Guide

Learn how to build powerful macros, automate gameplay loops, configure event threshold triggers, and design custom HUD scripts.


1. Macro Syntax Basics

MacroMod supports two execution formats: Inline Macros and Script Files.

Inline Macros

Inline macros are single-line instruction sets bound directly to a keyboard trigger or event inside the Configuration GUI. Chained actions are separated by a vertical bar (|).

# Simple inline look and walk combo (using name alias)
{LOOK 90 0} | {KEYDOWN forward} | {WAIT 100} | {KEYUP forward}

Script Files (.mcm)

Script files (ending in .mcm) are written sequentially line-by-line under the Scripts tab or in .minecraft/config/macromod/scripts/. Chaining vertical bars (|) are not used in script files.

# Walk forward and jump
{LOOK 90 0}
{KEYDOWN 87}
{WAIT 40}
{KEY 32}
{WAIT 40}
{KEYUP 87}

2. Built-in Special Actions

Special client actions are enclosed inside curly braces ({}). They simulate hardware inputs or instruct the macro execution flow:

Action Command Description Usage Example
{STASHALL} Automatically deposits main player inventory items into open container screens while protecting hotbar tools (pickaxes & shovels). {STASHALL}
{CHAT msg} Dispatches a chat message or server command with color section sign translation (e.g., &a → §a). {CHAT &a[Macro] Auto-stashing items...}
{READFILE file arrayVar} / {ARRAYSIZE arrayVar targetVar} / {GETARRAY arrayVar index targetVar} Reads lines from a text file into an array variable, gets array length, or indexes specific lines in .mcm scripts. {READFILE "targets.txt" targets}
{SLOTCLICK slot [button] [mode]} / {SHIFTCLICK slot} / {CTRLSHIFTCLICK slot} / {QUICKMOVE slot} / {QUICKMOVEALL slot} / {CONTAINERCLICK slot button mode} Granular container and slot manipulation actions for inventory automation. {QUICKMOVEALL 9} or {SHIFTCLICK 0}
{SLOT 1..9} / {HOTBAR 1..9} Switches selected hotbar slot (1 to 9 mapped to 0..8 indices) and dispatches ServerboundSetCarriedItemPacket. {SLOT 1} (Selects hotbar slot 1)
{CLOSESCREEN} Invokes Screen.onClose() to properly dispatch container close packets, preventing screen overlay lockups. {CLOSESCREEN}
{WAIT ticks} / {WAIT min max} / {WAITRANDOM min max} Pauses macro execution for a fixed tick duration, or waits a random tick duration in min/max range. {WAIT 40} or {WAITRANDOM 20 50}
{LOOK yaw pitch} Instantly turns player view to target rotation angles (1-tick snap). {LOOK 180 0} (Looks West)
{HLOOK yaw pitch} Smoothly rotates player camera using human WindMouse curves to target yaw & pitch. {HLOOK 90 0}
{LOOKRANGE minYaw maxYaw minPitch maxPitch} Instantly faces a random direction bounded by min/max angle boundaries. {LOOKRANGE 87 93 -3 3}
{HLOOKRANGE minYaw maxYaw minPitch maxPitch} Smoothly rotates player camera using human WindMouse curves to a random direction within boundaries. {HLOOKRANGE 87 93 -3 3}
{LOOKRANDOM centerYaw centerPitch yawSpread pitchSpread} Instantly faces a random direction centered at target angle with ±variance spread. (Aliases: {LOOKVARIANCE}, {LOOKSPREAD}, {LOOKOFFSET}). {LOOKRANDOM 90 0 3 3}
{HLOOKRANDOM centerYaw centerPitch yawSpread pitchSpread} Smoothly rotates player camera using human WindMouse curves to a random direction centered at target angle with ±variance spread. {HLOOKRANDOM 90 0 3 3}
{LOOKAT x y z [expectedBlock] [innerMargin]} Turns player camera using human WindMouse curves to target 3D world coordinates. Supports optional block validation (e.g. chest) and inner depth margin. {LOOKAT 100 64 -200 chest 0.1}
{LEFTCLICK} / {ATTACK} / {LMB} Triggers a single left-click attack / break action tap. {LEFTCLICK} or {ATTACK}
{RIGHTCLICK} / {USE} / {RMB} Triggers a single right-click / item-use action tap. {RIGHTCLICK} or {USE}
{KEYDOWN key} Simulates holding down a key or mouse button. Accepts GLFW keycodes, key names, mouse codes (-100), or game action aliases (attack, use, jump, sneak, sprint, forward, back, left, right). {KEYDOWN attack} or {KEYDOWN -100}
{KEYUP key} Simulates releasing a held key or mouse button. Supports the same aliases and codes as {KEYDOWN}. {KEYUP attack} or {KEYUP -100}
{KEY key} Simulates a quick tap (press and release) of a key or action. Supports keycodes, names, and action aliases. {KEY space} or {KEY 32} (Jumps)
{OPENSCREEN} Opens the Macro Configuration GUI dashboard. {OPENSCREEN}
{OPENOVERLAY} Opens the transparent gameplay buttons HUD overlay screen. {OPENOVERLAY}
{ECHO msg} Prints a private local system message in your chat console. {ECHO Low Durability!}
{VERIFYSCREEN expectedInterface} / {VERIFYINTERFACE} Verifies that active screen title or container type matches expected target (e.g. furnace, chest, vault). Halts execution if mismatched. {VERIFYSCREEN blast_furnace}
{DROP slot} / {DROPALL} Drops item in specified slot or drops entire inventory. {DROP 0} / {DROPALL}
{SNEAK} / {UNSNEAK} Toggles sneaking / crouching state on or off. {SNEAK}
{SPRINT} / {UNSPRINT} Toggles sprinting state on or off. {SPRINT}
{JUMP} Simulates a single jump action. {JUMP}
{DISCONNECT} / {LOGOUT} Disconnects from the current server or world. {DISCONNECT}
{CLEARCHAT} Clears the client-side chat HUD console. {CLEARCHAT}
{STOP} / {STOPALL} Emergency Kill Switch. Immediately halts all running scripts and releases all held keys. {STOPALL}
{CALL name} Invokes a multi-line script file from the script library. {CALL AutoStash}
{INVENTORYGETSLOT item_id varName} Finds inventory slot containing item_id and stores index into a variable. {INVENTORYGETSLOT minecraft:diamond_pickaxe pickSlot}
{GETHELDITEM varName} Stores item ID of currently held main-hand item into a variable. {GETHELDITEM currentItem}
{GETCONTAINERTITLE varName} Stores title of currently open container screen into a variable. {GETCONTAINERTITLE openTitle}
{SWAPSLOT fromSlot toSlot} Swaps items between two inventory slot indexes. {SWAPSLOT 0 36}
{WAITUNTIL condition [timeout_ticks]} Parks interpreter execution until condition evaluates to true or optional timeout elapses. {WAITUNTIL $containeropen == 1 100}

3. Input Placeholders

You can pause macro execution to request input from the user before executing the command:

  • $$?: Opens a generic text entry box.
    /pv $$?
  • $$[Prompt Label]: Opens a text input box with a custom descriptive prompt label.
    /pv $$[Vault Number]  # Displays "Vault Number:" above the field

4. Script Control Flow & Advanced Logic

Write advanced logic statements within .mcm script library files PREMIUM FEATURE:

While Loops

while $health < 12
  execute "/heal"
  delay 40
endwhile

For Loops

for i 0 8
  execute "{SLOT $i}"
  delay 10
endfor

Conditionals & String Comparisons

if $dimension == "minecraft:the_nether"
  execute "{ECHO Caution: In Nether!}"
else
  execute "{ECHO Overworld location: $xpos, $zpos}"
endif

Variables & Arithmetic Operations

# Parameterized Increment & Decrement
inc counter 5
dec health 10

# Native Math Instructions
add counter 10
sub counter 2
mul counter 3
div counter 2
mod counter 5

String & Array Manipulation Functions

# String Operations
concat(fullGreeting, "Hello ", $playername)
substr(shortName, 0, 5)
length(nameLen, $playername)
lower(varName)
upper(varName)

# Array Operations
arraypush(myList, "Item1")
arraypop(myList, poppedVar)
arrayclear(myList)
arraycontains(myList, "Item1", hasItem)

5. Read-Only Player & World Variables

Read-only player and world variables can be queried inside script conditions or printed using {ECHO}:

Variable Type Description
$health Float Current player health (out of 20 by default).
$maxhealth Float Maximum player health capacity.
$hunger Integer Current hunger saturation level (0-20).
$durability Integer / % Remaining durability percent of the currently held item.
$offhanddurability, $helmetdurability, $chestdurability, $leggingsdurability, $bootsdurability Integer / % Durability percent of offhand item and equipped armor slots.
$screentitle, $screenclass, $containertype String Active screen title, class name, or container type (e.g., "Blast Furnace", "chest").
$isfurnaceopen, $ischestopen, $iscraftingopen, $isanvilopen Boolean (0/1) Returns 1 if specific container type interface is currently open.
$hasgui, $containeropen Boolean (0/1) Returns 1 if a screen or container inventory GUI is currently open.
$targettype Integer Type of object under crosshairs (0=Air/Miss, 1=Block, 2=Entity).
$targetdist, $targetx, $targety, $targetz Double Distance and world coordinates of targeted block/entity.
$invfull Boolean (0/1) Returns 1 if player's main inventory has no free slots.
$xpos, $ypos, $zpos Double Player coordinate location values in the world.
$speed Double Current horizontal player movement speed.
$isburning, $onfire Boolean (0/1) Returns 1 if player is currently on fire / burning.
$isswimming Boolean (0/1) Returns 1 if player is currently swimming.
$eyeheight Double Player's current camera eye height coordinate offset.
$random / $rand Float Returns a random floating-point number between 0.0 and 1.0.
$dimension, $biome, $server, $fps, $ping String / Int Current dimension, biome name, server IP, FPS counter, and ping latency.

6. Mojang InputConstants & Key Action Aliases (MC 26.3+)

In Minecraft 26.3+, MacroMod routes hardware input events through Mojang's native InputConstants.Key pipeline. You can pass key name strings (e.g. "A", "SPACE"), game action aliases ("attack", "use", "jump"), or legacy GLFW integer codes inside {KEY}, {KEYDOWN}, and {KEYUP} actions:

Key Code Key Code
A - Z 65 - 90 0 - 9 48 - 57
Space 32 Enter 257
Escape 256 Tab 258
Backspace 259 Grave (`) 96
L-Shift 340 L-Ctrl 341
L-Alt 342 R-Shift 344
L-Click -100 R-Click -101 / -99
M-Click -102 / -98 F1 - F12 290 - 301

Mouse Buttons & Game Action Aliases

Target / Action Code(s) / Aliases Description
Left Click / Attack -100, LMB, ATTACK, LEFTCLICK Hold or release Left Click (Attack / Mine block).
Right Click / Use -101, -99, RMB, USE, RIGHTCLICK Hold or release Right Click (Use / Place block / Eat).
Middle Click / Pick -102, -98, MMB, PICK, MIDDLECLICK Hold or release Middle Click (Pick block).
Forward / Back / Left / Right FORWARD, BACK, LEFT, RIGHT Movement directions mapped to player keys.
Jump / Sneak / Sprint JUMP, SNEAK, SPRINT Player action aliases.

7. Container & Inventory Slot Index Map

Use these integer slot IDs with {SLOTCLICK slot [button] [type]}, {SHIFTCLICK slot}, and {ALLCLICK slot} actions:

Player Inventory Slot Map (46 Slots)

+-------------------------------------------------------------+
|                          CRAFTING                           |
|                    [ 1 ] [ 2 ]                              |
|                    [ 3 ] [ 4 ]   --->   [ 0 ] Result        |
+-------------------------------------------------------------+
|                           ARMOR                             |
|  [ 5 ] Helmet                                               |
|  [ 6 ] Chestplate                                           |
|  [ 7 ] Leggings                                             |
|  [ 8 ] Boots                                [ 45 ] Offhand  |
+-------------------------------------------------------------+
|                       MAIN INVENTORY                        |
|  [ 9 ] [10] [11] [12] [13] [14] [15] [16] [17]             |
|  [18] [19] [20] [21] [22] [23] [24] [25] [26]             |
|  [27] [28] [29] [30] [31] [32] [33] [34] [35]             |
+-------------------------------------------------------------+
|                          HOTBAR                             |
|  [36] [37] [38] [39] [40] [41] [42] [43] [44]             |
+-------------------------------------------------------------+
Container Type Container Content Slots Player Main Inventory Player Hotbar
Single Chest / Shulker Box (27 slots) 0 to 26 27 to 53 54 to 62
Double Chest (54 slots) 0 to 53 54 to 80 81 to 89

8. Companion Server Plugin (macromod-server)

MacroMod is designed as a player-first client-side mod. Server administrators can manage or restrict macro features on Paper, Folia, Velocity, or BungeeCord servers using our companion plugin:

# MacroModServer Policy Configuration (config.yml)
version: 1

allowMovement: true             # Allow movement actions ({KEYDOWN W}, etc.)
allowLook: true                 # Allow camera rotation actions ({LOOK}, {LOOKAT})
allowInventoryAutomation: true  # Allow slot clicking ({SLOTCLICK}, {SHIFTCLICK})
allowScriptFiles: true          # Allow executing multi-line .mcm script library files
allowLooping: true              # Allow while and for loop statements

maxLoopIterations: 1000         # Max loop iteration cap
chatRateLimitMs: 250            # Delay (ms) enforced between chat messages