Frostyh Plugins

Plugins / Crates

Crates

Crates that open in the world, on item displays, with every real chance shown before a key is spent.

Get Crates

$13.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

Crates 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 crates to land at its booth, or right-click the compass and pick it. The world resets every night.

Overview

Crates

Crates players trust: the real chances shown before a key is spent, and a draw they can watch

Most crate plugins are a chest menu full of glass panes and a percentage nobody can verify. This one opens in the world on item displays, tells the player every reward and its real chance before they spend anything, and rolls the reward before the animation starts, so a disconnect in the middle of a spin cannot eat it.

A crate opening in the world, on item displays, no chest menu.

Latest version
1.1.1
Server
Paper or Purpur, Java 21
BuiltByBit
Crates on BuiltByBit
What changed in 1.1.1
  • Fixed: the preview screen showed no picture for an enchanted golden apple. Minecraft has no separate texture for it (it draws the golden apple with a glint), so the icon lookup found nothing. It now shows the golden apple picture.
  • The same fix covers about 390 other items that had no picture in the preview: glass panes, tall flowers like the sunflower, the crossbow, tipped arrows, stairs, slabs, walls, fences, buttons, carpets, waxed copper, and full blocks such as TNT, ancient debris, pumpkins and crafting tables.
  • Beds, banners, chests, mob heads and copper golem statues still show no picture in the reward list, because the game draws them as 3D models with no flat texture. The reward tiles show the real item as before.
  • Nothing to change in config.yml or crates.yml.

Features

Why server owners pick it

Opening the Legendary Crate: the rewards cycle on top of the chest.

What makes it different

Works with

What you get

Two crates at spawn, each with its own label.

The crate screens

The preview shows every reward with its real chance.

Admins add the item in hand as a reward and set its weight in game.

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.

Can I run a key-all event?

Yes. /crate giveall gives every online player keys at once and works from the console.

Updates

Released on September 17, 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 Crates.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/Crates/config.yml with the defaults shown under Configuration.
  4. Edit config.yml to suit your server.
  5. Apply the changes with /crate reload (Read crates.yml again), or restart the server.

Setup guide

  1. Drop Crates.jar into /plugins and restart.
  2. Run /crates, press manage, type a name and create the crate.
  3. Hold the item you want to give away, set a weight, and press add. Repeat for every reward.
  4. Hold the item you want to be the key and press use my item as the key.
  5. Look at the block that should be the crate and press bind. Give yourself a key and try 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
/cratesnone/cratesYour crates and your keys.not set
/cratenone/crate preview|keys|key|givevirtual|giveall|set|list|reloadCrate admin and key giving.not set

Subcommands in detail

/crates                              Your crates and keys.
/crate preview <crate>               What is inside and what it costs.
/crate keys                          How many keys you hold of each crate.
/crate key <crate> <player> [n]      (admin) Give physical keys.
/crate givevirtual <crate> <p> [n]   (admin) Give keys to an account, even offline.
/crate set <crate>                   (admin) Bind the block you are looking at.
/crate list                          Every crate id.
/crate reload                        (admin) Read crates.yml again.
/crate giveall <crate> [amount] [virtual]   (admin) Keys for everyone online (alias keyall).

Permissions

From plugin.yml.

NodeDefaultDescriptionChildren
crates.useeveryoneOpen crates and see the screens.none
crates.adminoperatorsBuild crates, give keys (also /crate giveall), bind blocks, reload.none

Placeholders

Registered with PlaceholderAPI under the identifier crates (CratePlaceholders.java). PlaceholderAPI must be installed for these to work.

PlaceholderReturns
%crates_keys_<crate>%keys held: in the inventory plus on the account
%crates_virtual_<crate>%keys on the account only (also for offline players)
%crates_physical_<crate>%key items in the inventory only
%crates_name_<crate>%the crate's display name
%crates_rewards_<crate>%how many rewards the crate holds
%crates_total_keys%every key the player holds, all crates together
%crates_count%how many crates the server has

Configuration reference

The default files as they ship in the jar, with their comments. The plugin writes them to plugins/Crates/ on first start.

config.yml

Top-level keys:

KeyDefaultComment above it
key-lore['<gray>Right-click a {crate} crate to open it.</gray>']The lore put on a key that has none of its own. {crate} is the crate's name.
default-hologramlist of 3The floating label put over a new crate. {crate} is the crate's name.
mass-open-max10Mass open: the preview screen offers "Open N at once" to a player with at least two keys on their account (virtual keys). It skips the animation and sends one summary line. This is the most it opens in one click; 0 or 1 hides the button.
themesection, 11 keysEvery message below is written against these names, not against hex codes: <accent>Open</accent> rather than <#f2c14e>Open</#f2c14e>. Change a colour here and it changes on every screen at once. Ordinary MiniMessage still works, so <gradient:#a:#b> and...
messagessection, 101 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/Crates/config.yml
# Crates - keys, a draw you can watch, and honest chances.
#
# A crate is a block you bind, a key item, and a list of rewards with weights. The opening happens
# in the world on item displays, not in a chest menu, and the preview screen shows every reward with
# its real percentage before anybody spends a key.
#
# Crates themselves live in crates.yml, which the plugin writes; build them in game with /crates.

# The lore put on a key that has none of its own. {crate} is the crate's name.
key-lore:
  - "<gray>Right-click a {crate} crate to open it.</gray>"

# The floating label put over a new crate. {crate} is the crate's name.
default-hologram:
  - "<#f2c14e><bold>{crate}</bold></#f2c14e>"
  - "<gray>right-click with a key</gray>"
  - "<dark_gray>left-click to look inside</dark_gray>"

# Mass open: the preview screen offers "Open N at once" to a player with at least two keys on their
# account (virtual keys). It skips the animation and sends one summary line. This is the most it
# opens in one click; 0 or 1 hides the button.
mass-open-max: 10

# ------------------------------------------------------------------------------------------------
# THEME
# ------------------------------------------------------------------------------------------------
# Every message below is written against these names, not against hex codes: <accent>Open</accent>
# rather than <#f2c14e>Open</#f2c14e>. 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: "#f2c14e"     # your colour: headings and anything the player is meant to click
  accent2: "#f8dd9e"    # 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>Crates</bold></accent> <muted>»</muted> "
  no-permission: "<bad>You cannot do that.</bad>"
  players-only: "<text>Players only.</text>"
  unknown: "<bad>No crate called </bad><value>{crate}</value>"
  unknown-player: "<bad>Unknown player: </bad><value>{name}</value>"
  bad-name: "<bad>Names: letters, numbers, - and _, up to 24 characters.</bad>"
  exists: "<bad>There is already a crate called </bad><value>{crate}</value>"
  hold-something: "<text>Hold the item first.</text>"
  look-at-block: "<text>Look at the block you want to be the crate.</text>"
  help: "<text>/crates · /crate preview <crate> · /crate keys · /crate key <crate> <player> [n] · /crate givevirtual <crate> <player> [n] · /crate giveall <crate> [n] [virtual] · /crate set <crate> · /crate reload</text>"
  usage-preview: "<text>/crate preview <crate></text>"
  usage-key: "<text>/crate key <crate> <player> [amount]</text>"
  usage-virtual: "<text>/crate givevirtual <crate> <player> [amount]</text>"
  usage-set: "<text>/crate set <crate>  (looking at the block)</text>"
  # /crate giveall: a key-all for everyone online. "virtual" puts the keys on their accounts.
  usage-giveall: "<text>/crate giveall <crate> [amount] [virtual]</text>"
  giveall-done: "<text>Gave </text><value>{amount}</value><text> {crate} key(s) to </text><value>{count}</value><text> online player(s).</text>"
  list: "<text>Crates: </text><value>{list}</value>"
  reloaded: "<value>Reloaded {count} crate(s).</value>"

  key-name: "<accent>{crate} Key</accent>"
  key-given: "<text>Gave </text><value>{amount}</value><text> {crate} key(s) to </text><value>{player}</value><text>.</text>"
  key-received: "<text>You got </text><value>{amount}</value><text> {crate} key(s).</text>"
  virtual-given: "<text>Put </text><value>{amount}</value><text> {crate} key(s) on </text><value>{player}</value><text>'s account.</text>"
  virtual-received: "<text>You have </text><value>{amount}</value><text> more {crate} key(s). </text><value>/crates</value>"
  keys-row: "<value>{crate}</value><text>: {keys} key(s)</text>"
  need-key: "<text>You need a </text><value>{crate}</value><text> key.</text>"
  no-virtual-key: "<text>No {crate} keys on your account.</text>"
  already-opening: "<text>One at a time.</text>"
  crate-empty: "<text>{crate} has nothing in it yet.</text>"
  opening: "<value>Opening {crate}...</value>"
  won: "<text>You won </text>{reward}<text> from {crate}.</text>"
  # A crate that finished while the player was offline (they logged out mid-opening, or the server stopped).
  pending-given: "<text>Your </text><value>{crate}</value><text> opening finished while you were away. Here it is.</text>"
  broadcast: "<value>{player}</value><text> won </text>{reward}<text> from </text><value>{crate}</value><text>.</text>"
  block-added: "<text>That block is now a </text><value>{crate}</value><text> crate.</text>"
  block-removed: "<text>That block is no longer a {crate} crate.</text>"
  block-protected: "<text>That is a </text><value>{crate}</value><text> crate. Sneak and break it to unbind it.</text>"

  # The screens. Every line here is a title, a button label or a tooltip.
  menu-title: "<value>Crates</value>"
  menu-close: "<white><icon:close></white><text>Close</text>"
  menu-back: "<white><icon:back></white><text>Back</text>"
  menu-back-tip: "<text>Back to the screen before.</text>"
  menu-crate-line: "<value>{crate}</value><text> · {rewards} rewards · you hold {keys} key(s) · {places} place(s)</text>"
  menu-crate-open: "{icon}<value>{crate}</value>"
  menu-crate-open-tip: "<text>See what is inside and what it costs.</text>"
  menu-no-crates: "<text>No crates yet.</text>"
  menu-manage: "<white><icon:staff></white><text>Manage crates</text>"
  menu-manage-tip: "<text>Admins: build and edit crates.</text>"

  preview-title: "<value>{crate}</value>"
  preview-head: "<text>Inside </text><value>{crate}</value><text>. You hold {keys} key(s).</text>"
  preview-row: "{icon}<value>{reward}</value><text> · {chance}%</text> {rare}"
  preview-rare: "<accent>rare</accent>"
  preview-empty: "<text>Nothing in this crate yet.</text>"
  # The reward tiles: the real item, with its odds under it.
  preview-tile-name: "<accent><bold>{reward}</bold></accent>"
  preview-tile-chance: "<text>Chance </text><value>{chance}%</value>"
  preview-tile-rare: "<warn>Announced to the server</warn>"
  preview-tile-common: "<muted>Quietly yours</muted>"
  # The crate rows on the list screen: the crate's own key is the icon.
  row-crate: "<accent><bold>{crate}</bold></accent>"
  row-crate-keys: "<good>{keys} key(s)</good><text> · {rewards} rewards</text>"
  row-crate-nokeys: "<muted>No keys</muted><text> · {rewards} rewards</text>"
  preview-where: "<muted>Standing in {count} place(s) in the world.</muted>"
  preview-open-virtual: "<white><icon:crate></white><good>Open one now ({keys} left)</good>"
  preview-open-virtual-tip: "<text>Uses a key from your account, wherever you are.</text>"
  # Mass open (see mass-open-max). {rewards} is the list of what came out.
  preview-open-many: "<white><icon:crate></white><good>Open {count} at once</good>"
  preview-open-many-tip: "<text>Uses {count} keys from your account and skips the animation.</text>"
  mass-opened: "<text>Opened </text><value>{count}</value><text> {crate} crate(s): </text>{rewards}"
  mass-reward-times: "{reward}<muted> x{times}</muted>"
  mass-reward-separator: "<muted>, </muted>"

  admin-title: "<value>Manage crates</value>"
  admin-empty: "<text>No crates yet. Type a name below and create one.</text>"
  admin-line: "<value>{crate}</value><text> ({id}) · {rewards} rewards · {places} place(s) · {animation}</text>"
  admin-open: "{icon}<value>Edit {crate}</value>"
  admin-open-tip: "<text>Edit this crate.</text>"
  admin-field-id: "<text>Name of the new crate</text>"
  admin-create: "<white><icon:yes></white><good>Create it</good>"
  admin-create-tip: "<text>Makes an empty crate with that name.</text>"

  edit-title: "<value>{crate}</value>"
  edit-head: "<text>{crate} ({id}) · {animation} · {places} place(s) · key: {key}</text>"
  edit-default-key: "tripwire hook"
  edit-reward: "<value>{reward}</value><text> · weight {weight} = {chance}% · {what}</text>"
  edit-no-rewards: "<text>No rewards yet. Hold an item and press add.</text>"
  edit-field-name: "<text>Name players see</text>"
  edit-field-weight: "<text>Weight for the reward</text>"
  edit-field-reward: "<text>Which reward</text>"
  edit-add-held: "<white><icon:yes></white><good>Add what I am holding</good>"
  edit-add-held-tip: "<text>The item in your hand becomes a reward with the weight above.</text>"
  edit-remove: "<white><icon:delete></white><bad>Remove the chosen reward</bad>"
  edit-remove-tip: "<text>Deletes the reward you picked.</text>"
  edit-weight: "<white><icon:weight></white><value>Set its weight</value>"
  edit-weight-tip: "<text>Writes the weight above onto the reward you picked.</text>"
  edit-rare: "<white><icon:arrange></white><value>Announce it or not</value>"
  edit-rare-tip: "<text>Whether the whole server hears when somebody wins it.</text>"
  edit-rename: "<white><icon:rename></white><value>Rename the crate</value>"
  edit-rename-tip: "<text>Uses the name field above.</text>"
  edit-key-held: "<white><icon:crate></white><value>Use my item as the key</value>"
  edit-key-held-tip: "<text>The item in your hand becomes this crate's key.</text>"
  edit-key-give: "<white><icon:crate></white><value>Give me one key</value>"
  edit-key-give-tip: "<text>For testing the crate you are building.</text>"
  edit-bind: "<white><icon:bind></white><value>Bind the block I am looking at</value>"
  edit-bind-tip: "<text>That block becomes a crate players can right-click.</text>"
  edit-animation: "<white><icon:fire></white><value>Animation: {animation}</value>"
  edit-animation-tip: "<text>roulette, orbit, or instant.</text>"
  edit-delete: "<white><icon:delete></white><bad>Delete this crate</bad>"
  edit-delete-tip: "<text>Removes the crate and its rewards.</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.

key-lore: ["<gray>Right-click a {crate} crate to open it.</gray>"]
default-hologram:
  - "<#f2c14e><bold>{crate}</bold></#f2c14e>"
  - "<gray>right-click with a key</gray>"

crates.yml, written by the plugin as you build:
  vote:
    display: "Vote"
    animation: roulette      roulette, orbit, instant
    animation-ticks: 60
    key: <the item you chose>
    blocks: ["world,120,64,-30"]
    rewards:
      r1:
        display: "16x Diamond"
        weight: 10           weights, not percentages
        item: <the item you held>
        commands: []
        broadcast: false

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). 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/Crates/config.yml and run /crate reload (read crates.yml again). 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.