Plugins / Graves
Graves
Items wait in a grave where you died, marked with your head and a floating label. Locked to you.
Get Graves
$4.99 on BuiltByBit, list price on 16 October 2026. BuiltByBit sales can lower it, the listing shows the current price.
Also in Complete Collection: Every Plugin, SMP Starter Bundle.
Try it live
Graves runs on a public demo server, set up so you can use it yourself. Join, try it, then decide.
Address: try.zeropvp.xyz:25570 (Java Edition 1.21.11)
In Minecraft: Multiplayer, Add Server, paste the address, Join. Type /demo go graves to land at its booth, or right-click the compass and pick it. The world resets every night.
Free version: GravesLite
GravesLite is free to download and run on your servers. It does the basics of Graves; the paid plugin adds the rest.
In GravesLite: grave on death with the player's own head (or CHEST, BARREL, AIR), floating label with owner, items, XP, time left and lock state, items kept in their original slots and shown in a shared chest view, XP kept (percentage), protection minutes, lifetime minutes, expire drops or deletes, break gives items or drops them, finds a floor (air, caves, void), explosion and piston proof, world filter, keep-inventory skip, graves.exempt, survives restarts and world unloads, /graves lists your graves in chat, /graves reload.
Only in Graves: sneak + right click restores every item to the slot it was in, /graves dialog with teleport and recover buttons (graves.teleport / graves.recover as rank perks) and a compass button, staff tools (/graves all, of, near, clear and the staff screen), max graves per player.
Moving up: stop the server, copy plugins/GravesLite/graves.yml to plugins/Graves/graves.yml, remove GravesLite.jar, start. The labels use the same tag as the full plugin, so it adopts or clears them. Lite also switches itself off when the full plugin is installed.
Overview
Graves
Players keep their gear when they die: everything waits in a locked grave where they fell
Dying in lava should cost you the fight, not your netherite. Graves catches everything you were carrying, puts it in a grave where you fell, marks it with your own head and a floating label, and holds it until you come back for it.
The grave wears the player's head; the label shows items, XP, time left and the lock.
- Latest version
- 1.1.0
- Server
- Paper or Purpur, Java 21
- BuiltByBit
- Graves on BuiltByBit
What changed in 1.1.0
- New: after respawning, the player gets one chat line with how far away their newest grave is and its coordinates, with a clickable [list] that opens /graves. Their compass points at the grave. In another world the line names the world instead. Turn it off with respawn-hint: false.
- New: the owner is told once when the protection on their grave runs out and anybody can open it. Turn it off with unlock-notice: false.
- New PlaceholderAPI placeholders (PlaceholderAPI is optional): %graves_count%, %graves_latest_world%, %graves_latest_x%, %graves_latest_y%, %graves_latest_z%, %graves_latest_items%, %graves_latest_xp%, %graves_latest_time%, %graves_latest_locked%, %graves_latest_distance%, %graves_server_total%. The latest_ ones are empty when the player has no grave.
- /graves reload now also reloads the theme colours.
- An existing config.yml keeps working: both new options are on by default and the new messages (respawn-hint, respawn-hint-other-world, grave-unlocked) use their defaults until you add them.
Features
Why server owners pick it
- Every item kept in a grave at the death spot
- Locked to the owner
- XP is kept too
- Marked with the player's own head and a floating label
- A grave list to find them again
What makes it different
- Items are stored once, in Paper's own item format, so they come back exactly as they went in and cannot be duplicated
- The grave finds a floor: a death in the air, in a cave or in the void puts it on solid ground
- After respawning, players get the distance in chat and a compass pointing at their grave
Works with
- Paper or Purpur 1.21+ (tested on 1.21.11)
- Java 21
- No other plugin, no database, no library
- No DRM, no licence key and no licence server; the code is not obfuscated
What you get
- New in v1.2.0: Respawn hint: after respawning, one chat line with the distance and coordinates of the newest grave, a clickable list, and the compass pointing at it
- New in v1.2.0: Unlock notice: the owner is told when the protection runs out
- New in v1.2.0: PlaceholderAPI (optional): grave count, newest grave location, items, XP and time left
- Your head on the ground: the grave wears the dead player's skin, and the label above it says who it belongs to, how much is in it and how long it has left
- Locked to you first: for the minutes you choose nobody else can open or break it, then it is fair game, or yours forever if you set the protection that way
- Experience too: the grave keeps the levels you would have dropped, as much of them as you allow
- It finds a floor: dying in the air, in a cave or in the void puts the grave on solid ground, never inside a wall and never where it cannot be reached
- Nothing can break it by accident: creepers, TNT, pistons and other players all bounce off a grave that is not theirs to take
- Stored once: the items live in one place, in Paper's own item format, so enchantments and custom items come back exactly as they went in and nothing can ever be duplicated
- A limit if you want one: a player with too many graves standing has the oldest one spill on the ground rather than lose it quietly
- Survives restarts, world reloads and crashes: graves are written to disk and their labels rebuilt on start
Everything the player carried, kept in one grave.
The grave list
/graves: where each grave is, what is in it, go there or bring it back.
Staff open the same list for any player.
- /graves opens a real Minecraft dialog window with every grave you have standing: where it is, what is in it, how long it has left, and whether it is still locked
- Buttons to teleport to a grave or pull it straight into your inventory, both behind their own permission, so you can sell them as a rank perk
- Without either permission the button points your compass at the grave instead
- Staff get the same screen for anybody: /graves all lists everyone with a grave, and one click opens their list
menu: falseprints the list in chat instead
FAQ
Which servers does it run on?
Paper or Purpur 1.21.11 or a newer 1.21.x, with Java 21.
Do I need other plugins?
No. It runs on its own.
Is there DRM or a licence key?
No. There is nothing to activate and no licence server to reach, and the code is not obfuscated.
How long does setup take?
Drop the jar into /plugins and restart. The setup guide above has 5 short steps.
Can I try it before I buy?
Yes. This page has a test server with the plugin installed.
Where do I get help?
In the active support Discord, in the discussion tab on this page, or in the documentation.
How do players find their grave?
After respawning they get the distance and coordinates in chat, their compass points at the grave, and /graves lists every grave.
Updates
Released on September 16, 2026 and updated 4 times since. The latest version is v1.2.0 (October 16, 2026). Every update is free, new Minecraft versions included.
Also by Frostyh
- Crates: crates with the real chances shown
- Holograms: floating text and boards
- Scripted SMP Essentials: NPCs, death ban, recording mode and more for scripted SMPs
- Complete Collection: all my published plugins in one purchase, 40% off
If this plugin helps your server, a short review on this page would mean a lot. Thank you!
Installation
Requirements
- Server software
- Paper, or a Paper fork such as Purpur. Spigot and CraftBukkit are not supported: the plugin uses Paper-only APIs.
- Minecraft version
- plugin.yml api-version 1.21; built against Paper API 1.21.11
- Java
- 21 or newer
- Required plugins
- none
- Optional plugins
PlaceholderAPI
Steps
- Download
Graves.jarfrom BuiltByBit. There is no licence key to enter. - Stop the server and put the jar into the
pluginsfolder. - Start the server. The plugin creates
plugins/Graves/config.ymlwith the defaults shown under Configuration. - Edit
config.ymlto suit your server. - Apply the changes with
/graves reload(Reload the config and rebuild the labels), or restart the server.
Setup guide
- Drop Graves.jar into /plugins and restart.
- Decide how long a grave is locked to its owner: protection-minutes.
- Decide how long it stands at all: lifetime-minutes, or 0 to leave it until somebody empties it.
- Give graves.teleport and graves.recover to the ranks you sell them with, or to nobody.
- That is the whole setup. Die once and run /graves to see it.
Commands
From plugin.yml. "Not set" in the permission column means plugin.yml attaches no permission to the command itself; the nodes the plugin checks are listed under Permissions.
| Command | Aliases | Usage | Description | Permission |
|---|---|---|---|---|
/graves | /grave, /deathchest | /graves [all|of <player>|near [radius]|clear <player>|reload] | Your graves, and the staff tools for everybody elses. | not set |
Subcommands in detail
/graves Your graves.
/graves all (staff) Everybody with a grave standing.
/graves of <player> (staff) One player's graves.
/graves near [radius] (staff) Graves around you.
/graves clear <player> (staff) Empty every grave of a player onto the ground.
/graves reload (staff) Reload the config and rebuild the labels.
Permissions
From plugin.yml.
| Node | Default | Description | Children |
|---|---|---|---|
graves.teleport | nobody until granted | Teleport to your own graves from the list. | none |
graves.recover | nobody until granted | Pull a grave straight into your inventory from the list. | none |
graves.admin | operators | See and open every grave, clear them, reload. | none |
graves.exempt | nobody until granted | Never leaves a grave; items drop the vanilla way. | none |
Placeholders
Registered with PlaceholderAPI under the identifier graves (GravePlaceholders.java). PlaceholderAPI must be installed for these to work.
| Placeholder | Returns |
|---|---|
%graves_count% | graves the player has standing |
%graves_latest_world% | the newest grave's world (empty without a grave) |
%graves_latest_x% | _y% _z% the newest grave's block coordinates |
%graves_latest_items% | items in the newest grave |
%graves_latest_xp% | experience in the newest grave |
%graves_latest_time% | time left on the newest grave, or the "forever" text |
%graves_latest_locked% | protection time left on the newest grave, empty once it is open |
%graves_latest_distance% | blocks from the player to the newest grave (empty in another world) |
%graves_server_total% | graves standing on the whole server |
%graves_world% | |
%graves_x% | |
%graves_y% | |
%graves_z% | |
%graves_items% | |
%graves_xp% | |
%graves_time% | |
%graves_locked% | |
%graves_distance% |
Configuration reference
The default files as they ship in the jar, with their comments. The plugin writes them to plugins/Graves/ on first start.
config.yml
Top-level keys:
| Key | Default | Comment above it |
|---|---|---|
menu | true | Bare /graves opens the grave list instead of printing it in chat. |
worlds | [] (empty list) | Worlds graves are made in. Empty means every world. |
grave-block | "PLAYER_HEAD" | The block the grave stands on. PLAYER_HEAD wears the dead player's skin. CHEST and BARREL work too, and AIR means no block at all, only the floating label. |
protection-minutes | 10 | Minutes only the owner may open it. 0 means it is open to everybody from the start. |
lifetime-minutes | 60 | Minutes the grave stands before it gives up. 0 means it waits forever. |
expire-drops-items | true | What happens when the time runs out: true drops everything on the ground, false deletes it. |
break-gives-items | true | Breaking the grave block: true puts the contents straight into the breaker's inventory, false drops them on the ground. |
sneak-restores | true | Sneak and right click a grave to take everything back at once, each item into the slot it was in when you died: the same armour on, the same hotbar in the same order. A slot that is already occupied is never overwritten - that item goes wherever there is... |
keep-xp-percent | 100 | How much of the dropped experience the grave keeps. 0 leaves the vanilla orbs on the floor. |
max-per-player | 5 | Graves one player may have standing at once. When a new one would go over, the oldest is emptied onto the ground where it stood. 0 means no limit. |
skip-when-keep-inventory | true | Skip the grave when another plugin or a game rule kept the inventory anyway. |
respawn-hint | true | After respawning: one chat line with where the newest grave is and how far away, and the player's compass pointed at it. false turns both off. |
unlock-notice | true | Tell the owner once when the protection runs out and anybody may open their grave. |
hologram | section, 4 keys | none |
theme | section, 11 keys | Every message below is written against these names, not against hex codes: <accent>Open</accent> rather than <#c9a227>Open</#c9a227>. Change a colour here and it changes on every screen at once. Ordinary MiniMessage still works, so <gradient:#a:#b> and... |
messages | section, 53 keys | none |
review-reminder | true | One thank-you line with the BuiltByBit review link: once in the console after install and once in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off. |
# Graves - what you dropped, kept where you died.
#
# A death puts the items into a grave: a head on the ground with a floating label above it. Only the
# owner can open it for a while, it holds the experience too, and everything is stored in one place
# so nothing can be duplicated. All text is MiniMessage: <red>, <bold>, <#ff9900>, <gradient:#a:#b>.
# Bare /graves opens the grave list instead of printing it in chat.
menu: true
# Worlds graves are made in. Empty means every world.
worlds: []
# The block the grave stands on. PLAYER_HEAD wears the dead player's skin. CHEST and BARREL work
# too, and AIR means no block at all, only the floating label.
grave-block: PLAYER_HEAD
# Minutes only the owner may open it. 0 means it is open to everybody from the start.
protection-minutes: 10
# Minutes the grave stands before it gives up. 0 means it waits forever.
lifetime-minutes: 60
# What happens when the time runs out: true drops everything on the ground, false deletes it.
expire-drops-items: true
# Breaking the grave block: true puts the contents straight into the breaker's inventory,
# false drops them on the ground.
break-gives-items: true
# Sneak and right click a grave to take everything back at once, each item into the slot it was in
# when you died: the same armour on, the same hotbar in the same order. A slot that is already
# occupied is never overwritten - that item goes wherever there is room, and anything that still
# does not fit lands at your feet. An ordinary right click still opens the chest.
sneak-restores: true
# How much of the dropped experience the grave keeps. 0 leaves the vanilla orbs on the floor.
keep-xp-percent: 100
# Graves one player may have standing at once. When a new one would go over, the oldest is emptied
# onto the ground where it stood. 0 means no limit.
max-per-player: 5
# Skip the grave when another plugin or a game rule kept the inventory anyway.
skip-when-keep-inventory: true
# After respawning: one chat line with where the newest grave is and how far away, and the
# player's compass pointed at it. false turns both off.
respawn-hint: true
# Tell the owner once when the protection runs out and anybody may open their grave.
unlock-notice: true
hologram:
# Lines above the grave, bottom line last. {player} {items} {xp} {time} {protection}
lines:
- "<#c9a227><bold>{player}</bold></#c9a227>"
- "<gray>{items} items · {xp} xp</gray>"
- "<dark_gray>{time} left · {protection}</dark_gray>"
height: 1.0 # blocks above the grave where the first line sits
line-height: 0.28
scale: 1.0
# ------------------------------------------------------------------------------------------------
# THEME
# ------------------------------------------------------------------------------------------------
# Every message below is written against these names, not against hex codes: <accent>Open</accent>
# rather than <#c9a227>Open</#c9a227>. Change a colour here and it changes on every screen at
# once. Ordinary MiniMessage still works, so <gradient:#a:#b> and <#ff0000> are fine anywhere.
theme:
accent: "#c9a227" # your colour: headings and anything the player is meant to click
accent2: "#e1cc88" # a lighter accent, for a second level of emphasis
title: "#f4f7ff" # screen titles
text: "#c2ccdd" # ordinary prose
muted: "#6b7a94" # hints, separators, anything the eye should skip
value: "#ffffff" # the numbers and names the player opened the screen to read
good: "#57e08a"
warn: "#ffc857"
bad: "#ff6b6b"
small-caps: false # ᴇхᴀᴍᴘʟᴇ - a garnish; whole menus in it read badly
# Real Minecraft item pictures beside the buttons and in the chest screens. Drawn from the
# client's own textures, so there is nothing to install and no resource pack: it needs a
# 1.21.9 or newer client, and older ones simply see the buttons as words.
item-icons: true
messages:
prefix: "<accent><bold>Graves</bold></accent> <muted>»</muted> "
no-permission: "<bad>You cannot do that.</bad>"
players-only: "<text>Players only.</text>"
unknown-player: "<bad>Unknown player: </bad><value>{name}</value>"
reloaded: "<value>Config reloaded.</value>"
forever: "forever"
protected-for: "<bad>locked {time}</bad>"
unprotected: "<good>open</good>"
help: "<text>/graves · /graves all · /graves of <player> · /graves near [radius] · /graves clear <player> · /graves reload</text>"
grave-made: "<text>Your things are in a grave at </text><value>{x} {y} {z}</value><text> in {world}. It stands for {time}.</text>"
grave-expired: "<bad>Your grave at {x} {y} {z} ran out of time.</bad>"
# respawn-hint (the compass now points at the grave). {distance} is in blocks.
respawn-hint: "<text>Your grave is </text><value>{distance}</value><text> blocks away at </text><value>{x} {y} {z}</value><text>. Your compass points at it. </text><click:run_command:'/graves'><accent>[list]</accent></click>"
respawn-hint-other-world: "<text>Your grave is at </text><value>{x} {y} {z}</value><text> in {world}. </text><click:run_command:'/graves'><accent>[list]</accent></click>"
# unlock-notice: the protection on a grave has run out.
grave-unlocked: "<warn>Your grave at {x} {y} {z} is no longer locked. Anybody can open it now.</warn>"
grave-emptied: "<text>Grave emptied.</text>"
grave-collected: "<text>You took everything from </text><value>{player}</value><text>'s grave.</text>"
grave-restored: "<text>Back where it was: </text><value>{items}</value><text> items, </text><value>{xp}</value><text> xp.</text>"
# Added to the end of grave-restored, only when something did not fit in the inventory.
grave-restored-dropped: "<bad>{dropped} did not fit and are on the ground.</bad>"
still-protected: "<bad>{player}'s grave is locked for another {time}.</bad>"
xp-back: "<text>You get </text><value>{xp}</value><text> experience back.</text>"
oldest-dropped: "<text>Your oldest grave at {x} {y} {z} spilled its contents: you had too many.</text>"
teleported: "<text>There it is.</text>"
recovered: "<text>Everything is back in your inventory.</text>"
compass-set: "<text>Your compass points at </text><value>{where}</value><text>.</text>"
none: "<text>{player} has no graves standing.</text>"
none-near: "<text>No graves within {radius} blocks.</text>"
cleared: "<text>Emptied </text><value>{count}</value><text> grave(s) of {player}.</text>"
usage-of: "<text>/graves of <player></text>"
usage-clear: "<text>/graves clear <player></text>"
list-header: "<value>{player}</value><text>: {count} grave(s)</text>"
list-row: "<text> - </text><value>{x} {y} {z}</value><text> in {world} · {items} items · {time} left</text>"
all-header: "<text>Graves standing: </text><value>{count}</value>"
all-row: "<text> - </text><value>{player}</value><text> at {x} {y} {z} in {world}</text>"
gui-title: "<muted>Grave of {player}</muted>"
# The grave list. Every line here is a screen title, a button label or a tooltip.
menu-title: "<value>Your graves</value>"
menu-title-other: "<value>{player}'s graves</value>"
menu-all-title: "<value>Every grave</value>"
menu-close: "<white><icon:close></white><text>Close</text>"
# The item tiles: the first few things in the grave, drawn as the items themselves.
tile-name: "<accent><bold>{item}</bold></accent>"
tile-where: "<muted>at </muted><text>{x} {y} {z}</text>"
menu-none: "<text>You have no graves standing. Nothing of yours is lying around.</text>"
menu-none-other: "<text>{player} has no graves standing.</text>"
menu-no-graves: "<text>Nobody has a grave standing.</text>"
menu-line: "<value>{x} {y} {z}</value><text> in {world} · {items} items · {xp} xp · {time} left · </text>{state}"
menu-teleport: "<white><icon:teleport></white><accent>Go to {where}</accent>"
menu-teleport-tip: "<text>Teleport to the grave.</text>"
menu-recover: "<white><icon:grave></white><good>Bring back {where}</good>"
menu-recover-tip: "<text>Put everything in the grave straight into your inventory.</text>"
menu-where: "<white><icon:compass></white><value>Point my compass at {where}</value>"
menu-where-tip: "<text>Sets your compass to the grave.</text>"
menu-owner-line: "<value>{player}</value><text> · {count} grave(s)</text>"
menu-owner-open: "<white><icon:dot></white><value>{player}</value>"
menu-owner-open-tip: "<text>The graves of {player}.</text>"
# One thank-you line with the BuiltByBit review link: once in the console after install and once
# in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off.
review-reminder: trueConfig guide
The annotated summary from the store page. Where it and the default file above differ, the file is what the plugin ships.
menu: true
worlds: [] empty = every world
grave-block: PLAYER_HEAD CHEST, BARREL, or AIR for label only
protection-minutes: 10 0 = open to everybody at once
lifetime-minutes: 60 0 = it waits forever
expire-drops-items: true false deletes the contents instead
break-gives-items: true false drops them on the ground
keep-xp-percent: 100
max-per-player: 5 0 = no limit
skip-when-keep-inventory: true
hologram:
lines: ["{player}", "{items} items · {xp} xp", "{time} left · {protection}"]
height: 1.0
line-height: 0.28
scale: 1.0
Differences between this summary and the shipped files (an example in the summary may use values of its own):
hologram.lines: the summary shows['{player}', '{items} items · {xp} xp', '{time} left · {protection}'], the default file has['<#c9a227><bold>{player}</bold></#c9a227>', '<gray>{items} items · {xp} xp</gray>', '<dark_gray>{time} left · {protection}</dark_gray>'].
FAQ
Which servers and versions does it run on?
It needs Paper or a Paper fork such as Purpur, because it uses Paper-only APIs (the dialog API for its menus, Adventure text components, Paper player profiles). Spigot and CraftBukkit are not supported. plugin.yml declares api-version 1.21, the jar is built against Paper API 1.21.11, and it needs Java 21 or newer.
Does it need other plugins?
No other plugin is required (plugin.yml has no hard dependencies). Optional: PlaceholderAPI (plugin.yml softdepend), used when present.
How do I apply config changes?
Edit plugins/Graves/config.yml and run /graves reload (reload the config and rebuild the labels). A restart works too.
Does it run on Folia, or for Bedrock players?
Not tested on Folia, and plugin.yml does not declare folia-supported. Bedrock players (through Geyser) have not been tested either.
What licence do I get?
The licence terms are the BuiltByBit EULA shown on the listing. There is no licence key to enter, and the plugin never contacts a licence server.
Links
- BuiltByBit: Graves
- Support Discord: discord.gg/KG4ubAZEuw
- All plugins on BuiltByBit: the collection
- More plugins: all plugins
- Custom work: commissions
Support
Questions, bugs or ideas: the active support Discord or the discussion tab on this page. When something breaks, include your server version and the error from the console.
Full setup guide, commands, permissions and config reference: documentation.