🚀 Getting Started
Installation & Controls
Key Bindings:
Right Shift- Open Loop EditorP- Pause/Resume all loops
Basic Concepts
MC Looper works with Loops that contain:
- Triggers - When the loop should run
- Blocks - What actions to perform
- Conditions - Logic for decision making
- Variables - Store and manipulate data
Creating Your First Loop
- Press
Right Shiftto open the editor - Click "Add Loop" to create a new loop
- Set the loop name and configure the trigger
- Add blocks to define what the loop does
- Click "Save" to save your configuration
⚡ Triggers
Triggers determine when your loops execute. Each loop has one trigger.
📋 manual
Manually triggered from the UI
Parameters:
None - triggered by clicking "Run Loop"
🌍 on_start
Triggers when you join a world
Parameters:
None - automatically triggers on world join
⏱️ interval
Triggers at regular intervals
Parameters:
interval- Time between triggers (number or [min-max] for random)unit- "ticks" or "seconds" (default: ticks)
Examples:
- Every 100 ticks:
interval: 100, unit: ticks - Every 5 seconds:
interval: 5, unit: seconds - Random 10-30 seconds:
interval: [10-30], unit: seconds
💬 on_chat
Triggers when chat messages match a regex pattern
Parameters:
pattern- Regex pattern to matchvar_prefix- Variable prefix for capture groupsverbose- Show captured variables (true/false)
Examples:
- Death messages:
pattern: "You died" - Player mentions:
pattern: "@(\\w+)", var_prefix: "mention" - Server announcements:
pattern: "\\[Server\\] (.*)"
🖼️ on_gui_item
Triggers when GUI items match a regex pattern
Parameters:
pattern- Regex pattern to match item namesvar_prefix- Variable prefix for capture groupsverbose- Show captured variables (true/false)
Examples:
- Shop items:
pattern: "Buy (.*) for (\\d+)" - Quest items:
pattern: "Complete Quest"
🧱 Blocks (Actions)
Blocks are the actions your loops perform. They execute in sequence.
Communication Blocks
💬 chat
Sends messages or commands to the server
Parameters:
message- Text to send (prefix with / for commands)
Examples:
- Chat:
message: "Hello everyone!" - Command:
message: "/tp spawn" - With variables:
message: "My position: ${player_x}, ${player_y}, ${player_z}"
📱 client_message
Shows messages only to you (not sent to server)
Parameters:
message- Text to display locally
Examples:
- Status:
message: "Loop started successfully" - Debug:
message: "Variable value: ${my_var}"
📝 comment
Documentation only - does nothing during execution
Parameters:
text- Comment text for documentation
Timing & Flow Control
⏳ wait
Pauses execution for a specified time
Parameters:
time- Duration (number or [min-max] for random)unit- "ticks" or "seconds" (default: ticks)
Examples:
- Wait 2 seconds:
time: 2, unit: seconds - Random 50-100 ticks:
time: [50-100], unit: ticks
🔄 call_loop
Executes another loop
Parameters:
loop- Name of the loop to call
🔀 if
Conditional execution - stops loop if condition fails
Parameters:
condition- Condition to evaluateblocks- Blocks to execute if trueverbose- Show variable states (true/false)
🔁 loop
Repeats nested blocks multiple times
Parameters:
count- Number of repetitionsblocks- Blocks to repeat
🚪 exit
Immediately stops the current loop execution
Parameters:
None - this block has no configuration options
Use cases:
- Emergency stops based on conditions
- Early termination when goals are reached
- Error handling and safe shutdown
⏰ wait_until
Waits until a condition becomes true
Parameters:
condition- Condition to wait for
🚫 prevent_execution
Prevents the current loop from running for a duration
Parameters:
time- Duration to preventunit- "ticks" or "seconds"
Interaction Blocks
🖱️ click_gui_item
Auto-clicks GUI items by name pattern (excludes inventory)
Parameters:
name_pattern- Regex pattern to match item namesvar_name- Variable to store matched text
Examples:
- Click confirm:
name_pattern: "Click to Confirm" - Buy items:
name_pattern: "Buy (.*)", var_name: "item"
🌍 world_click
Clicks in the world - left (break/attack) or right (place/use)
Parameters:
click_type- "left" or "right"target- "crosshair" or "x,y,z" coordinates (supports variables)pause_on_gui- Pause clicking when GUI is open (true/false)
Examples:
- Right-click:
click_type: "right", target: "crosshair" - Break block:
click_type: "left", target: "100,64,200" - Variable coords:
target: "${x},${y},${z}" - Safe mining:
pause_on_gui: true(stops when chests open)
Data & Network Blocks
🌐 post_request
Sends HTTP POST requests with timeout and response capture
Parameters:
url- Request URLbody- JSON request bodytimeout- Timeout in milliseconds (default: 5000)response_var- Variable prefix for response
Response Variables:
${response_var}_code- HTTP status code${response_var}_body- Response body${response_var}_success- Success boolean${response_var}_error- Error message (if failed)
🔤 regex_replace
Performs regex find/replace on variables
Parameters:
source_var- Variable to read fromtarget_var- Variable to write topattern- Regex pattern to findreplacement- Replacement textverbose- Show operation details
❓ Conditions
Conditions are used in if and wait_until blocks for decision making.
📊 variable_equals
Compares a variable to an expected value (string comparison)
Parameters:
variable- Variable name to checkvalue- Expected value
Example:
{
"type": "variable_equals",
"params": {
"variable": "player_health",
"value": "20"
}
}
📈 variable_greater_than
Numeric comparison - checks if variable is greater than value
Parameters:
variable- Variable name to checkvalue- Numeric threshold
🎒 inventory_contains
Checks if inventory contains specific items
Parameters:
search_mode- "registry" or "regex"item_name- Item to find (registry mode)regex_pattern- Pattern to match (regex mode)var_name- Variable to store found item infoverbose- Show found item details
Created Variables:
${var_name}- Display name${var_name}_registry- Registry name${var_name}_count- Item count
🖼️ gui_contains
Checks if current GUI contains specific items
Parameters:
Same as inventory_contains, plus:
${var_name}_slot- Slot index of found item
🔍 gui_item_exists
Checks if GUI item with matching name pattern exists
Parameters:
name_pattern- Regex pattern to matchvar_name- Variable to store matched textverbose- Show match details
Created Variables:
${var_name}- Matched text${var_name}_1,${var_name}_2... - Capture groups
📋 Variables
Variables store and manipulate data throughout your loops.
Variable Types
🔄 Runtime Variables
Temporary variables cleared when leaving world. Created by blocks and conditions.
⚙️ Config Variables
Persistent variables stored in configuration files.
🎮 Built-in Minecraft Variables
${player_name}- Your username${player_x},${player_y},${player_z}- Your coordinates${world_name}- Current world name${server_name}- Server name (if on server)${timestamp}- Current timestamp
Variable Usage
Variable Replacement:
Use ${variable_name} in any string parameter to insert variable values.
Examples:
"Hello ${player_name}!""Position: ${player_x}, ${player_y}, ${player_z}""Found item: ${found_item}"
Verbose Mode
Enable verbose mode in triggers and blocks to see variable states during execution. Useful for debugging.
💡 Example Configurations
🌱 Auto Farm Monitor
Checks crops every 30 seconds and sends status updates
{
"name": "Farm Monitor",
"trigger": {
"type": "interval",
"params": {
"interval": 30,
"unit": "seconds"
}
},
"blocks": [
{
"type": "world_click",
"params": {
"click_type": "right",
"target": "crosshair"
}
},
{
"type": "wait",
"params": {
"time": 1,
"unit": "seconds"
}
},
{
"type": "chat",
"params": {
"message": "Farm check complete at ${timestamp}"
}
}
]
}
💀 Death Response
Automatically responds when player dies
{
"name": "Death Handler",
"trigger": {
"type": "on_chat",
"params": {
"pattern": "You died",
"verbose": true
}
},
"blocks": [
{
"type": "wait",
"params": {
"time": [2-5],
"unit": "seconds"
}
},
{
"type": "chat",
"params": {
"message": "Respawning..."
}
},
{
"type": "chat",
"params": {
"message": "/spawn"
}
}
]
}
🏪 Shop Automation
Automatically buys items when GUI appears
{
"name": "Auto Shop",
"trigger": {
"type": "on_gui_item",
"params": {
"pattern": "Buy (.*) for (\\d+)",
"var_prefix": "shop",
"verbose": true
}
},
"blocks": [
{
"type": "if",
"params": {
"condition": {
"type": "inventory_contains",
"params": {
"search_mode": "registry",
"item_name": "emerald",
"var_name": "emeralds"
}
},
"blocks": [
{
"type": "click_gui_item",
"params": {
"name_pattern": "Buy.*",
"var_name": "purchased_item"
}
},
{
"type": "client_message",
"params": {
"message": "Purchased: ${purchased_item}"
}
}
]
}
}
]
}
📊 Server Status Monitor
Monitors server status with HTTP requests
{
"name": "Status Monitor",
"trigger": {
"type": "interval",
"params": {
"interval": 60,
"unit": "seconds"
}
},
"blocks": [
{
"type": "post_request",
"params": {
"url": "https://api.example.com/server/status",
"body": "{\"server\": \"${server_name}\"}",
"timeout": 5000,
"response_var": "status"
}
},
{
"type": "wait",
"params": {
"time": 2,
"unit": "seconds"
}
},
{
"type": "if",
"params": {
"condition": {
"type": "variable_equals",
"params": {
"variable": "status_success",
"value": "true"
}
},
"blocks": [
{
"type": "client_message",
"params": {
"message": "Server status: ${status_body}"
}
}
]
}
}
]
}
🚀 Advanced Techniques
Random Timing
Use random ranges to make your automation less predictable:
interval: [10-30]- Random 10-30 unitstime: [1-5]- Random 1-5 units wait
Regex Patterns
Powerful pattern matching for chat, GUI items, and variables:
.*- Match anything\\d+- Match numbers(.*)- Capture groups for variables^Start.*End$- Line anchors
Variable Capture
Many blocks and conditions can capture data into variables:
- Chat triggers:
var_prefixparameter - Inventory/GUI conditions:
var_nameparameter - Regex operations: Automatic capture groups
Loop Prevention
Use prevent_execution to avoid spam or conflicts:
- Prevent loop after completion
- Cooldown periods between actions
- Temporary disabling based on conditions
Startup Delay
Configure loops to wait before first execution:
startupDelay- Delay in loop configuration (seconds)- Useful for initialization or sequential timing
- Prevents all loops from starting simultaneously
- Set via Loop Editor UI or JSON:
"startupDelay": 5
Global Verbose Logging
Control debug output for the entire mod:
- Toggle button in top-right of Loop Editor screen
- When disabled, saves 99.9% of log space
- Overrides individual block verbose settings
- Essential for performance in production use
Enhanced Number Support
Full support for decimal numbers and variables:
- Decimal wait times:
time: 2.5, unit: seconds - Variable substitution in all numeric fields
- Randomizer support:
[1.5-3.0]for decimal ranges - Works in wait blocks, interval triggers, and world_click coordinates
Debugging Tips
- Enable
verbosemode to see variable states - Use
client_messageblocks to display debug info - Test with
manualtriggers first - Use
commentblocks for documentation - Start with simple loops and add complexity gradually
Performance Considerations
- Use appropriate intervals - avoid too frequent triggers
- HTTP requests are async - don't block game performance
- Use conditions to avoid unnecessary processing
- Clear runtime variables when no longer needed