Corpse Extension spawns a corpse where a player died, holding their inventory and experience until someone loots it or it expires. Built for TypeWriter, engineered for BTC Studio infrastructure.
- Per-viewer rendering: every player nearby sees the corpse, each with their own copy of the
model, using the engine's
entity.show-range. - Five model backends: EntityExtension, ModelEngine, BetterModel, BTC Mob NPC and MythicMobs NPC.
- Vanilla fallback: with no model configured, the corpse is a plain player entity in the dying pose, wearing the victim's skin and armour.
- Client-side glow: a configurable outline drawn by the client, not server-sent particles.
- World filter:
allowedWorldsandexcludedWorldsoncorpse_settingschoose the worlds where a death leaves a corpse. Empty allow list = every world (the default). Outside the allowed worlds the death is vanilla: normal drops, normal experience. - Entries are compared, ignoring case, with the world name (its folder name) and the dimension
key (
minecraft:the_nether).*matches any run of characters and?exactly one, sodungeon_*covers everydungeon_procedural_<uuid>world,dgbuildis one named world. An exclusion always wins over an allow entry. filteredWorldDeathchooses what a death looks like in a world the lists turn down (no effect when both lists are empty).VANILLA_DEATH_SCREEN(default) is the ordinary Minecraft death: the body lying on the ground and the death screen are drawn by the Minecraft client, they are not a Corpse entity and Corpse cannot remove them.INSTANT_RESPAWNrespawns the player on the next tick, without the death screen. Items and experience drop as in vanilla either way.
- Full inventory and experience: taken from the death event's own drop list, so what other
plugins decided (Curse of Vanishing, soulbound items,
keepInventory) is respected. - Survives restarts: stored in MySQL when available, otherwise in the plugin folder. An
unreadable storage file is kept aside (
.unreadable-<time>) instead of being overwritten. - Access control: owner-only looting, or a timed protection window after which the corpse opens to everyone.
- Reach and click guard:
interactionReach(default 6 blocks,0= no limit) is the longest distance for a click on a corpse to count, andoutOfReachMessageis what a player farther away is told (empty by default: no message).interactionCooldownMillis(default 250) ignores the repeated packets of one click, so the menu does not open, or the loot get taken, several times over. - Loot menu on the GUI engine: take items one at a time instead of dropping everything at once. The menu is a GUI Extension menu, so it inherits the engine's click routing, menu history and extended-inventory projection rather than running its own inventory listener.
- Events:
on_corpse_spawn,on_corpse_loot,on_corpse_expire, with the corpse's owner, loot and position published as context. - Facts and audiences:
has_corpse,corpse_count,corpse_owner_audience,corpse_waypoint. - Quests:
corpse_recovery_objective, active until the player recovers their corpse. - Admin:
corpse_admin_commandwithlistandclear. - Every text is yours: messages, menu labels, the waypoint format and its eight arrows, the admin command replies and the menu items are all fields, with MiniMessage and PlaceholderAPI.
- Most settings can be driven by placeholders and facts.
| Entry | Kind | Purpose |
|---|---|---|
corpse_settings |
Manifest | Server-wide rules: duration, loot mode, protection, messages, menu labels |
corpse_definition |
Manifest | Look of the corpse (model backend or player fallback), by world and priority |
on_corpse_spawn |
Event | A corpse spawns |
on_corpse_loot |
Event | A corpse is looted |
on_corpse_expire |
Event | A corpse expires unlooted |
has_corpse |
Fact | Whether the player has a corpse waiting |
corpse_count |
Fact | How many corpses the player has |
corpse_owner_audience |
Audience | Players who have a corpse waiting |
corpse_waypoint |
Audience | Points players back to their corpse |
corpse_recovery_objective |
Objective | Recover your corpse |
corpse_admin_command |
Command | Staff command (default /corpses) |
Created from a corpse_admin_command entry; the command name and permission are fields of the entry.
| Command | Description |
|---|---|
/corpses list |
List every corpse on the server, with its owner, position and world |
/corpses clear |
Remove every corpse (does not fire on_corpse_expire) |
Default permission: typewriter.corpse.admin.
| Requirement | Needed for |
|---|---|
Typewriter 0.9.0-beta-177 on Paper |
Engine |
| Basic Extension | Base entries |
| Entity Extension | Model rendering and the player fallback |
| Quest Extension | The recovery objective |
| GUI Extension | The loot menu |
| MySQL Extension | Cross-restart storage (optional — falls back to a local file) |
A death with keepInventory on (or cancelled by another plugin) leaves no corpse: the player keeps
their items. Corpses only take what the death would have dropped.
Full documentation available at BTC Studio Docs.
GNU General Public License v3.0 or later — LICENSE — with a linking exception for the Typewriter engine — LICENSE-EXCEPTION.md.
| You may | Run it anywhere, including on a monetised server. Study it, modify it, use it as a base, and redistribute it — even for a fee. GPLv3 §4 explicitly allows charging for a copy. |
| You must | Publish the complete corresponding source of your version under GPLv3, preserve the copyright notices, and state that you modified it and when (§5(a)). |
| You may not | Ship a closed-source or proprietary version, relicense under stricter terms, or strip the attribution and present this work as your own — §8 terminates your rights automatically. |
| Marks | "Born To Craft" and "BTC Studio" are not covered by the GPL. Fork it freely, sell your fork if you like — but rebrand it. |
Reselling this code is legally allowed and practically pointless: whoever buys a copy from you receives, under the GPL, the right to redistribute it for free. That is the protection — not a clause forbidding sale, which the GPL does not permit us to add.
This is a third-party extension. It uses the public extension API of the Typewriter engine by gabber235 and contains none of its source. Born To Craft Studio is not affiliated with or endorsed by the Typewriter project.
The engine itself is not free software — its licence forbids redistributing it. Get it from the Typewriter project, and never redistribute it, including inside a fork of this repository.
Full attribution, the statement of modifications required by §5(a), and the trademark reservation are in NOTICE.md. Read it before redistributing.
© 2026 Born To Craft Studio.