🎉 v4.0 — The Big One

Six new systems. One JAR. Zero breaking changes. Let's go.

v4.0 is huge. We added six entirely new systems that turn Command Maker from "that handy alias mod" into a full-blown server automation platform. And the best part? Nothing breaks. Your existing aliases, syntaxes, and permissions all keep working exactly like before. New stuff is totally opt-in.

🕐 1. Cooldowns — No More Spam

Ever had players spam /home or /heal? Yeah, us too. Now you can slap a cooldown on any alias.

  • Per-player: each player has their own timer. Bob spamming /home only affects Bob.
  • Global: one player uses it, everyone waits. Great for server-wide events.
  • Custom messages: write whatever you want. {remaining} shows seconds left. Colors work too.

Dropped in config/CommandMaker/cooldowns.json. Dead simple.

All the cooldown details →

🔀 2. If/Else — Your Aliases Just Got Smarter

Real logic. Right in your alias. No config files, no scripting — just type it inline.

if:xp(30) give @s diamond else say Come back when you're level 30!

You can check 9 different things: XP level, health %, permissions, items in inventory, custom variables, cooldowns, player name, dimension, or whether someone's an op.

The else part is optional. If the condition fails and there's no else, nothing happens — no errors, no crashes.

Every condition explained →

📡 3. Event Triggers — Set It and Forget It

Stuff happens on your server. Now your mod can respond to it.

Player joins? Auto-welcome message. Player dies? Broadcast it. Someone breaks a diamond ore? Give 'em a bonus. First time someone connects? Roll out the red carpet.

Eight event types: join, leave, death, respawn, first join, chat, kill, block break. All in config/CommandMaker/events.json.

Each event can have its own cooldown. You can even filter block breaks to specific blocks — only fire when someone mines diamond ore, for example.

All the events →

📊 4. Custom Scoreboards — Pretty Sidebars, Zero Effort

Define a scoreboard in JSON. It shows up. It updates itself. That's it.

Put ${player_count} in a line and it'll always show the right number. ${tps} for server performance. Full color support with & codes. Position it in the sidebar, tab list, or below player names.

And here's the thing: scoreboards are off by default. The example config has "enabled": false so nothing appears until you're ready. No surprise sidebars.

Scoreboard deep dive →

🔤 5. Placeholders — The Glue

Remember ${player} and ${x}? Meet their cooler cousins.

%player_health% tells you how much HP someone has. %player_world% says which dimension they're in. %server_online% tells you how many people are on.

Fifteen built-in. They work everywhere — aliases, events, scoreboards, cooldown messages. Same %name% format as PlaceholderAPI, so if you've used PAPI before, this feels familiar.

Every placeholder listed →

📦 6. Shareable Packages — One File, Everything

Spent hours setting up the perfect alias system? Package it up and share it.

A .cmk file is just a ZIP with all your stuff inside: aliases, functions, events, scoreboards, cooldowns — the works. Two commands and you're done:

/cmd package MyCoolSetup    ← bundles everything into a .cmk
/cmd import MyCoolSetup     ← installs it on another server

Importing is safe — it won't overwrite your existing stuff unless you say --overwrite. Conflicts are reported, not silently replaced.

Think of it like a modpack, but for Command Maker content. Drop the file in config/CommandMaker/packages/ and you're golden.

Everything about packages →

✨ Also New: Quick Commands

/cmd help now shows all 20+ subcommands. We added /cmd package and /cmd import as simpler alternatives to the module commands. Same functionality, fewer keystrokes.

📋 Platform Status

Platformv4.0 Status
Fabric 1.21.9✅ Ready to go — all 6 features
Fabric 26.1🟡 Ported, needs final polish
Paper / Bukkit / Spigot⏳ Coming after Fabric 26.1
Forge / NeoForge⏳ Coming after Paper
Rift⏳ Coming after Forge
Upgrading from v3.x? Just swap the JAR. All the new config files appear automatically with everything set to false or empty. Your old stuff keeps working. No migration needed. 🎉