Frostyh Plugins

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.

Buy on BuiltByBit

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.

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

What makes it different

Works with

What you get

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.

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

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

  1. Download Graves.jar from BuiltByBit. There is no licence key to enter.
  2. Stop the server and put the jar into the plugins folder.
  3. Start the server. The plugin creates plugins/Graves/config.yml with the defaults shown under Configuration.
  4. Edit config.yml to suit your server.
  5. Apply the changes with /graves reload (Reload the config and rebuild the labels), or restart the server.

Setup guide

  1. Drop Graves.jar into /plugins and restart.
  2. Decide how long a grave is locked to its owner: protection-minutes.
  3. Decide how long it stands at all: lifetime-minutes, or 0 to leave it until somebody empties it.
  4. Give graves.teleport and graves.recover to the ranks you sell them with, or to nobody.
  5. 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.

CommandAliasesUsageDescriptionPermission
/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.

NodeDefaultDescriptionChildren
graves.teleportnobody until grantedTeleport to your own graves from the list.none
graves.recovernobody until grantedPull a grave straight into your inventory from the list.none
graves.adminoperatorsSee and open every grave, clear them, reload.none
graves.exemptnobody until grantedNever 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.

PlaceholderReturns
%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:

KeyDefaultComment above it
menutrueBare /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-minutes10Minutes only the owner may open it. 0 means it is open to everybody from the start.
lifetime-minutes60Minutes the grave stands before it gives up. 0 means it waits forever.
expire-drops-itemstrueWhat happens when the time runs out: true drops everything on the ground, false deletes it.
break-gives-itemstrueBreaking the grave block: true puts the contents straight into the breaker's inventory, false drops them on the ground.
sneak-restorestrueSneak 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-percent100How much of the dropped experience the grave keeps. 0 leaves the vanilla orbs on the floor.
max-per-player5Graves 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-inventorytrueSkip the grave when another plugin or a game rule kept the inventory anyway.
respawn-hinttrueAfter 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-noticetrueTell the owner once when the protection runs out and anybody may open their grave.
hologramsection, 4 keysnone
themesection, 11 keysEvery 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...
messagessection, 53 keysnone
review-remindertrueOne 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.
plugins/Graves/config.yml
# 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: true

Config 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):

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.