Marker Command Engine
No reviews yet
A macro-free vanilla command execution engine designed for Minecraft 1.20.1 and below. Built with command block logic for maximum compatibility, predictability, and security.
Provides a framework or library for other mods to use.
Projects that have been proven to or clearly use AI-generated art assets, including project logo. Projects with this tag are automatically excluded from all Pack Finder results.
Data Packs were introduced to vanilla Minecraft in version 1.13 and allow the server to modify data about the game, or run commands. Data Packs are compatible with all mod loaders.
Forge is a popular mod loader for versions 1.1+ of Minecraft.
Neoforge is a fork of the Minecraft Forge available for versions 1.20.1+ of Minecraft. Many Forge mods are compatible with Neoforge and vice versa.
Fabric is a mod loader for versions 1.14+ of Minecraft, particularly popular for client side and optimization mods.
Quilt is a fork of the Fabric mod loader. Many Fabric mods are compatible with Quilt and vice versa.
Community voices
Reviews
Click once to include, again to exclude, again to clear
No reviews yet. Be the first to review this project!
Get it on
Available Platforms
Compatibility
Supported Environments
About
Project Details
For authors
Embed Badge
If you're the author of this project, you can embed a live badge anywhere that supports HTML or Markdown. It updates automatically whenever ratings change.
Use HTML for any page that supports it, or Markdown for README files and Markdown-based descriptions.
Identifiers
Platform IDs
About
Description
Marker Command Engine - Macro-free Command Framework
A trusted command runtime/dependency framework for datapacks. Not designed as a sandbox. Use only with trusted packs and operators.
Marker Command Engine is a lightweight command execution engine for Minecraft datapacks. It runs commands stored in NBT storage using a marker entity + command block technique, with full LanternLoad integration for reliable load ordering.
Features
- Execute commands stored in
storage mce:cmd - No macros required — compatible with Minecraft 1.19.3+
- Low performance impact
- Clean public API (
mce:api/*) — internal functions are private - Batch & Queue system
- MCE-managed scheduler (replaces
/schedule, preserves entity context) - Per-player cooldown system — macro-free, scoreboard-based
- Run at fixed world coordinates — execute commands from any integer coordinate
- Announce system — title, subtitle, and actionbar in a single call
- Structured log system — write/show/clear with severity levels
- Version query API — check MCE version from storage at runtime
- LanternLoad integrated — other packs can depend on MCE with guaranteed load order
- Versioned API (
load.statusscore for dependency checks)
Requirements
- Minecraft 1.19.3+ (pack_format 10+)
mce:api/cooldown/checkrequires 1.20.2+ (returncommand)- LanternLoad is bundled — no separate installation needed
Installation
- Download the latest release zip.
- Place the
marker-command-enginefolder into your world'sdatapacks/folder. - Run
/reload. - You should see
[MCE] Marker Command Engine v2.2.0 loaded!in chat.
Usage
Run a Command
data modify storage mce:cmd Command set value "say Hello World!"
function mce:api/run/cmd
Run as Entity
# Tag the target entity first
tag @a[name=Steve,limit=1] add mce.executor
# Set the command and call
data modify storage mce:cmd Command set value "execute as @a[tag=mce.executor] run say I am Steve!"
function mce:api/run/as
# mce.executor tag is removed automatically
Run at Coordinates
# Execute a command from a fixed world position
data modify storage mce:cmd Command set value "say Hello from coords!"
data modify storage mce:cmd AtX set value 0
data modify storage mce:cmd AtY set value 64
data modify storage mce:cmd AtZ set value 0
function mce:api/run/at
All three coordinates (AtX, AtY, AtZ) must be set before calling. Values are integers.
Queue
data modify storage mce:cmd Command set value "say First!"
function mce:api/queue/add
data modify storage mce:cmd Command set value "say Second!"
function mce:api/queue/add
function mce:api/queue/run
Batch
data modify storage mce:batch commands set value ["say One","say Two","say Three"]
function mce:api/batch/run
Schedule
# Replaces /schedule
data modify storage mce:cmd Command set value "say Delayed!"
data modify storage mce:cmd Delay set value 40
function mce:api/schedule/run
Cooldown
# Set a 5-second (100 tick) cooldown on @s
data modify storage mce:cd Ticks set value 100
function mce:api/cooldown/set
# Check before running a command (requires 1.20.2+)
execute as @s if function mce:api/cooldown/check run function ns:your/action
# Get remaining ticks
execute as @s run function mce:api/cooldown/get
# Result -> mce:output Cooldown.remaining
# Clear cooldown immediately
function mce:api/cooldown/clear
Announce
# Send title, subtitle, and/or actionbar in a single call.
# All three keys are optional — omit any to skip that slot.
data modify storage mce:announce Title set value "Welcome!"
data modify storage mce:announce Subtitle set value "Enjoy your stay."
data modify storage mce:announce Actionbar set value "Server online"
function mce:api/util/announce
With custom timing (call before announce):
# Presets: fast (5/30/5), normal (10/70/20), slow (20/100/20), instant (0/40/0)
data modify storage mce:announce_times Preset set value "fast"
function mce:api/util/announce_times
data modify storage mce:announce Title set value "Go!"
function mce:api/util/announce
Log
# Write an entry using level shorthands (recommended)
data modify storage mce:log_write msg set value "Player joined the arena."
function mce:api/log/info # severity 0 — white
data modify storage mce:log_write msg set value "Cooldown nearly expired."
function mce:api/log/warn # severity 1 — yellow
data modify storage mce:log_write msg set value "Command failed."
function mce:api/log/error # severity 2 — red
# Or set lvl manually and call write
data modify storage mce:log_write msg set value "Custom entry."
data modify storage mce:log_write lvl set value 1
function mce:api/log/write
# Show all entries to @s (colored by level)
function mce:api/log/show
# Clear all entries
function mce:api/log/clear
The log holds the last 64 entries. Older entries are dropped automatically.
Each entry is stored as {n: <int>, lvl: <0|1|2>, msg: "<string>"}.
Version
# Prints version to chat and writes to storage.
function mce:api/util/version
# mce:output Version.string -> "2.2.0"
# mce:output Version.numeric -> 2002000
Help
function mce:api/util/help
Public API
Only mce:api/* functions are part of the public API. All mce:core/* functions are private and may change without notice.
mce:api/run/
| Function | Description |
|---|---|
mce:api/run/cmd |
Execute command from mce:cmd Command immediately |
mce:api/run/as |
Execute as tagged entities (mce.executor tag + mce:cmd Command) |
mce:api/run/at |
Execute command from fixed coordinates (mce:cmd AtX/AtY/AtZ) |
mce:api/queue/
| Function | Description |
|---|---|
mce:api/queue/add |
Add mce:cmd Command to queue |
mce:api/queue/run |
Start executing the queue (one command per 3 ticks) |
mce:api/queue/clear |
Clear queue without executing |
mce:api/schedule/
| Function | Description |
|---|---|
mce:api/schedule/run |
Schedule command after mce:cmd Delay ticks (minimum: 1) |
mce:api/schedule/clear |
Cancel all pending scheduled jobs |
mce:api/batch/
| Function | Description |
|---|---|
mce:api/batch/run |
Add mce:batch commands list to queue and run |
mce:api/batch/clear |
Clear batch staging area without queuing |
mce:api/cooldown/
| Function | Min Version | Description |
|---|---|---|
mce:api/cooldown/set |
1.19.3+ | Set cooldown ticks for @s from mce:cd Ticks |
mce:api/cooldown/check |
1.20.2+ | Returns 1 if @s is ready, 0 if on cooldown |
mce:api/cooldown/clear |
1.19.3+ | Clear cooldown for @s immediately |
mce:api/cooldown/get |
1.19.3+ | Write remaining ticks to mce:output Cooldown.remaining |
mce:api/log/
| Function | Description |
|---|---|
mce:api/log/write |
Append entry from mce:log_write {msg, lvl} |
mce:api/log/info |
Shorthand: write with lvl=0 (INFO) |
mce:api/log/warn |
Shorthand: write with lvl=1 (WARN) |
mce:api/log/error |
Shorthand: write with lvl=2 (ERROR) |
mce:api/log/show |
Print all entries to @s (colored by level) |
mce:api/log/clear |
Clear all entries and reset counter |
mce:api/util/
| Function | Description |
|---|---|
mce:api/util/announce |
Send title/subtitle/actionbar from mce:announce storage |
mce:api/util/announce_times |
Set title timing preset from mce:announce_times Preset |
mce:api/util/version |
Print MCE version and write to mce:output Version |
mce:api/util/cancel |
Abort active command execution (does not affect queue) |
mce:api/util/debug_toggle |
Toggle debug output on/off |
mce:api/util/help |
Print usage in chat |
mce:api/util/broadcast |
Send message to all players from mce:broadcast {Msg, Prefix} |
mce:api/util/error_clear |
Reset mce:error state and counter |
mce:api/util/logandmce:api/util/log_clearare deprecated — usemce:api/log/*instead.
Depending on MCE (LanternLoad)
To make your pack load after MCE, add your load function to #load:post_load and verify the version score:
// data/yourpack/tags/function/post_load.json
{
"values": ["yourpack:load"]
}
# yourpack:load
# Require MCE v2.2.0+ (score format: major*1000000 + minor*1000 + patch)
execute unless score mce load.status matches 2002000.. run tellraw @a {"text":"[YourPack] ERROR: MCE v2.2.0+ required!","color":"red"}
execute unless score mce load.status matches 2002000.. run return 0
# Your init here...
Technical Details
- Marker tag:
mce.cmd - Command block position:
0 -64 0 - Reset delay: 3 ticks after execution
- Queue interval: 3 ticks between commands
- Version score:
mce load.status=2002000(v2.2.0)
Storage Reference
| Storage | Key | Type | Description |
|---|---|---|---|
mce:cmd |
Command |
String | Command to execute |
mce:cmd |
Delay |
Int | Delay in ticks for schedule/run (min: 1) |
mce:cmd |
AtX |
Int | X coordinate for run/at |
mce:cmd |
AtY |
Int | Y coordinate for run/at |
mce:cmd |
AtZ |
Int | Z coordinate for run/at |
mce:cd |
Ticks |
Int | Cooldown duration in ticks for cooldown/set |
mce:queue |
commands |
List | Pending queue commands |
mce:batch |
commands |
List | Batch staging area |
mce:schedule |
jobs |
List | Scheduled job list |
mce:config |
mce.debug |
Byte | Debug mode flag (1b = on) |
mce:config |
mce.version |
String | MCE version string |
mce:announce |
Title |
String | Title text for util/announce |
mce:announce |
Subtitle |
String | Subtitle text for util/announce |
mce:announce |
Actionbar |
String | Actionbar text for util/announce |
mce:announce_times |
Preset |
String | Timing preset: fast normal slow instant |
mce:log_write |
msg |
String | Message to write (input for log/write) |
mce:log_write |
lvl |
Int | Severity level: 0=INFO 1=WARN 2=ERROR |
mce:log |
entries |
List | Log entries: {n, lvl, msg} (max 64) |
mce:broadcast |
Msg |
String | Message text for util/broadcast |
mce:broadcast |
Prefix |
String | Optional prefix for util/broadcast |
mce:output |
Cooldown.ready |
Byte | 1b if @s is ready, 0b if on cooldown |
mce:output |
Cooldown.remaining |
Int | Remaining cooldown ticks |
mce:output |
Version.string |
String | MCE version string (e.g. "2.2.0") |
mce:output |
Version.numeric |
Int | MCE version as int (e.g. 2002000) |
mce:error |
Last |
String | Last error message |
mce:error |
Code |
String | Last error code (e.g. ERR_NO_CMD) |
mce:error |
Count |
Int | Total error count since load |
Scoreboard Reference
| Objective | Description |
|---|---|
mce.queue |
Queue state and error counter |
mce.tick |
Internal tick counters |
mce.compat |
Compat system flags |
mce.cd |
Per-player cooldown (remaining ticks, 0 = ready) |
mce.log |
Log entry counter and size tracking |
Note:
mce:cmd Executoris no longer used. Tag your target entity withmce.executorbefore callingmce:api/run/as.
Changelog
v2.2.0
- Added
mce:api/log/write— structured log entries{n, lvl, msg}, 64-entry cap - Added
mce:api/log/info/log/warn/log/error— level shorthands - Added
mce:api/log/show— level-colored tellraw output, macro-free - Added
mce:api/log/clear— clears entries and resets counter - Added
mce:api/util/error_clear— resets error state and counter - Added missing function tags for
api/run/at,api/util/announce,announce_times,version,api/multi/run - Deprecated
mce:api/util/logandutil/log_clear(compat wrappers kept) - Added
mce.logscoreboard objective
v2.1.0
- Added
mce:api/multi/run— execute title, subtitle, actionbar, message, and commands in a single call - Added
mce:api/util/broadcast— send a message to all players from storage - Added
mce:api/util/log— append command string to in-memory audit log
v2.0.0
- Added
mce:api/run/at— execute commands from fixed world coordinates - Added
mce:api/util/announce— send title, subtitle, actionbar in one call - Added
mce:api/util/announce_times— configure title timing via presets - Added
mce:api/util/version— query MCE version at runtime - Updated
mce:api/util/helpwith all new APIs - Bumped LanternLoad version score to
2000000
v1.1.0
- Initial public release
License
MIT License — free to use, modify, and distribute.
Screenshots
Gallery
Versions
Files
Relations
Project Relations
More like this
Similar Mods
Suggestions use data such as tags, dependencies, dependents, descriptions, titles, and more to rank how much they overlap with this mod.
On ModDex
Community snapshot
By the numbers
Statistics
Want to reach Minecraft players?
We're looking for a server hosting partner to feature here and other parts of the site. Interested? Send us a message!
Get in touchGet it on
Available Platforms
On ModDex
Community snapshot
By the numbers