Event Maker turns invisible triggers into datapack-driven events. Place walk-through volumes, or paint IDs onto normal blocks. When a player activates a gate, your commands run as that player — with multiplayer-safe one-shots built in.
Built for modpacks, adventure maps, and event servers that need scripted gates without command-block spaghetti.
Features
- Event Trigger — no collision, invisible in Survival, cyan wireframe in Creative
- Event Wand — inject a trigger ID onto any block without replacing it
- Shared IDs — many blocks, one logical gate (doors, corridors, floors)
- ID inheritance — newly placed Event Triggers reuse the last ID you set
- Three activation modes — walk through, side touch, or step on
- One-shot or persistent — fire once per player, or re-fire after leave + re-enter
- Server-ready — one-shots are per player; markers stay so others can still activate
- Datapack / KubeJS — define commands in JSON under
event_trigger/ - Admin commands — reset, check, or mark one-shot progress
Quick start
- Creative → Event Maker tab → place Event Trigger blocks (or use the Event Wand on existing blocks)
- Set an ID, e.g.
welcomeormypack:arena_enter - Add matching datapack data (examples below)
- Switch to Survival and activate the gate — commands run for that player
Event Wand
- Shift + right-click — set the wand’s trigger ID
- Right-click a block — assign that ID (Event Trigger, or inject onto any other block)
- Left-click an injected block — clear the ID and outline (block stays)
Activation
| Field | Values | Default |
|---|---|---|
activation |
walk_through, touch, stepped_on |
walk_through |
persistent |
true / false |
false |
commands |
list of command strings | required |
walk_through— player enters the block volumetouch— player bumps the block from the sides (not from above)stepped_on— player stands on top of the blockpersistent: false— fires once per player; markers stay for everyone elsepersistent: true— markers stay; fires again after that player fully leaves, then contacts again
Commands run as the triggering player (permission 2). Chat output is suppressed. @s is that player.
Datapack / KubeJS
Put files under:
data/<namespace>/event_trigger/
Or with KubeJS:
kubejs/data/<namespace>/event_trigger/
Run /reload after editing.
All IDs in one file (recommended)
Filename is arbitrary (e.g. events.json):
{
"welcome": {
"activation": "walk_through",
"persistent": false,
"commands": [
"title @s actionbar {\"text\":\"Welcome!\",\"color\":\"green\"}",
"give @s minecraft:bread 1"
]
},
"pressure": {
"activation": "stepped_on",
"persistent": true,
"commands": [
"title @s actionbar {\"text\":\"Stepped\"}"
]
},
"bump": {
"activation": "touch",
"commands": [
"playsound minecraft:entity.experience_orb.pickup player @s"
]
}
}
Keys become IDs in that namespace (eventmaker:welcome, …). Full namespace:path keys work too.
One file per ID
data/eventmaker/event_trigger/welcome.json:
{
"activation": "walk_through",
"commands": [
"title @s actionbar {\"text\":\"Welcome!\",\"color\":\"green\"}"
]
}
File path is the ID. For mypack:arena_enter, use data/mypack/event_trigger/arena_enter.json.
Server commands
Permission level 2. Manage per-player one-shot progress:
/eventmaker reset <players> [id]— clear progress for players (all IDs, or one ID)/eventmaker resetall [id]— clear progress for everyone/eventmaker check <player> [id]— list consumed IDs, or check one ID/eventmaker mark <players> <id>— mark an ID as already consumed
IDs accept path or namespace:path. Reset also clears contact state, so a player still standing in the gate can fire again immediately.
Requirements
- Minecraft 1.21.1
- NeoForge

