Compatibility
Minecraft: Java Edition
Platforms
Tags
Creators
Details

🔍 CauseChain
You died. Type /why. Get the chain.
Vanilla says you were blown up by TNT. /why names who lit it, the chain, and the crater.
⚡ Why install this?
You already run CoreProtect. /co i tells you who last touched a block. Players still respawn into "Steve was blown up by TNT" and staff still guess which TNT, which player, which WorldGuard region.
CauseChain sits next to CoreProtect. After a death, a deny, or a captured chain, /why prints the chain in chat. Keep /co i for rollback. Keep CauseChain for the story.
- 💀 Death — respawn, type
/why, get igniter + TNT + you - 💥 TNT chain — ignite → chain trigger → explosion, with evidence ids
- 🚫 Named deny —
/why denyafter WorldGuard or GriefPrevention blocks a place - 🔍 Inspect — click a block you can build on; empty inspect points at
/co i - 🏹 Bow / dispenser — projectile owner when the platform recorded one; a dispenser stays a dispenser
- ✏️ WorldEdit
//set— one semantic node, not a thousand block clicks - ⚙️ Paper / Purpur / Folia

📂 What /why actually answers
💀 Death
- How did you die? — last death for the player who typed it
- Unknown parent — if the platform never named a cause, chat says unknown. No fake player.

💥 TNT
- Ignite — player lighting TNT (
vanilla.tnt.ignition.v1) - Chain — TNT priming TNT (
vanilla.tnt.chain-trigger.v1) - Crater — explosion, blocks, who started it

🚫 Protection
- WorldGuard —
WorldGuard spawn (visitor)plus the flag - GriefPrevention — claim owner + trust
- Both — listed together, marked ambiguous
🔍 Land inspect
/why inspect//why here— captured fire, TNT, WorldEdit on that block- Empty — names the claim or region, then tells you to run
/co i. CauseChain does not store every place/break.
🏹 Other traces
- Bow kill — when the projectile owner was recorded
- Dispenser — stays a dispenser
- WorldEdit / FAWE — one op node. FAWE is experimental
- Fire, falling blocks, explosions — when the platform link is defensible

🛠️ Commands
Player
/why— last death/why deny— last cancelled place/break/why inspect— click inspect/why here— target block
Staff
/why— inspect toggle/chain <id>— neighborhood around a node/cc status/cc adapters/cc explain/cc export/cc trace/cc reload
causechain.why.self and causechain.why.claim default true. Staff nodes default op.
PlaceholderAPI: %causechain_last_death% %causechain_last_deny%
/why has a [Share] button that copies a Discord-ready line.
📦 Install
Drop the jar in plugins/ next to CoreProtect and restart. No extra JARs, no account, no cloud.
Required for the loop: CoreProtect. The JAR still loads without it. Empty inspect still tells you to use /co i.
Optional: WorldGuard, GriefPrevention, WorldEdit / FastAsyncWorldEdit, PlaceholderAPI
📋 Requirements
Built for Paper, Purpur, and Folia.
Spigot and CraftBukkit are not supported. They have not been tested.
- Server-side only. No client mod
- Folia uses region, entity, global, and async schedulers (
folia-supported: true). No published Folia stress run. Smoke TNT + death on your Folia jar before you treat it as production-proven.
Versions on the Files tab are the ones this jar was tested against. Don't assume unlisted versions.
Not in this release
/rewind/ rolling the world back- CoreProtect history lookup
- Logging every successful place/break
- Lands
- Naming every plugin that cancelled a click
- Uploading traces off the server
CauseChain is not affiliated with CoreProtect. Do not ping the CoreProtect author for support.
🔒 Privacy
Chat and command text are never stored. Trace upload is not implemented. privacy.telemetry must stay false.
bStats anonymous server counts are on by default. Turn off with privacy.bstats: false or plugins/bStats/config.yml.
❓ Support
- Docs: https://mbcz.mintlify.app/causechain
- Discord: https://discord.com/invite/VQjTVKjs46
- Ko-fi: https://ko-fi.com/mbczishim/tip
- PayPal: https://www.paypal.com/paypalme/MatthewWatuna
- bStats: https://bstats.org/plugin/bukkit/CauseChain/33693
License: Apache 2.0.


