CloudTrophyHunt: A Trophy You Can't Take Off

"The Trophy Hunt starts in 300 sec! Type /hunt join to sign up." And for the next half hour the whole server splits into two camps: those with a golden trophy on their heads, and those who go to take it off them.

A good PvP event doesn't need explaining, you feel it. An Ender Dragon roar across the whole server, a countdown, and suddenly two or three players stand with a burning target above their heads while the rest of the server drops its builds and runs into the forest. CloudTrophyHunt is exactly that kind of event: simple rules, real excitement, and full tuning to your server's balance. The plugin is built for Paper 1.19.4 by the Cloud Delight studio.

What this event is

The "Trophy Hunt" (Трофейная охота) is a round of open hunting for several players. An admin (or a schedule) starts the event, and some of the players who signed up become "Lucky Ones" (Счастливчики): a trophy item is placed on their heads that can't be taken off by hand. While the trophy is on the head, it drips gold and XP to its owner, and the whole server knows exactly who to chase: the lucky ones' coordinates are available with a single command. Kill a lucky one and the trophy and its income pass to you. The format covers what many vanilla servers lack: PvP gets a reason to gather, the economy gets a controlled source of gold, and players get a shared story for the whole evening instead of quiet farming in the corners.

Under the hood is a simple state machine: waiting (IDLE) → signup (SIGNUP) → hunt (RUNNING) → waiting again. The plugin controls every transition itself, so the event can't get stuck between states even if the server restarts or the plugin is disabled mid-hunt.

How the hunt goes

Announcement and signup

An admin with the hunt.admin permission types /hunt start, but only if the event is currently idle. You can't start one on top of a running hunt, and the plugin just replies that a hunt is already in progress. Signup opens: two announcements go out across the server at once (the hunt start and the invitation to sign up), and an Ender Dragon roar is heard by all online players at once, so this moment is never quiet. The default signup window is 300 seconds (5 minutes). You can set it lower in the config, but the plugin never allows less than 5 seconds. Exactly at the middle of the window, a reminder with the remaining time goes out, unless half the window is shorter than 3 seconds: very short hunts run with no reminder at all. Anyone who wants to join types /hunt join. You can also join later, while the hunt is in full swing: such players don't become lucky ones right away, but they immediately go into the replacement pool in case a trophy frees up. If nobody signed up by the time signup closes, the hunt is quietly cancelled with a separate message, and the plugin returns to waiting mode. The auto-schedule isn't thrown off and fires on time as if nothing happened.

Who gets the trophy

When signup closes, between lucky-min and lucky-max lucky ones are picked at random from the signed-up players who are still online. The default is 2 to 3, and the number is new each time, not always the maximum. If fewer participants signed up than needed, everyone who's there becomes a lucky one. If you set the maximum below the minimum in the config by mistake, the plugin won't throw an error: it silently uses the minimum as the ceiling. Each chosen player is teleported to a new spot, the trophy goes on their head, and a big "YOU'RE THE LUCKY ONE" pops up on screen with a hint to run from the hunters, with a festive sound. Their previous helmet is saved exactly once, before the trophy is put on, with one important caveat: if an orphaned trophy from a previous round is already on the head, it isn't saved as a "helmet", otherwise the player would get a trophy back instead of real armor when the hunt ends.

The trophy can't be taken off

The plugin recognizes the trophy by a service tag in the item's data, not by name, so renaming the item won't fool the system. It can't be removed by a normal click, by a number-key or offhand swap onto the helmet slot, or by dragging with the cursor. It can't be dropped either: an active trophy simply returns with a refusal message. An accidentally orphaned trophy on a player who no longer counts as a lucky one is quietly deleted when dropped, so such leftovers don't pile up on the ground. If the item still disappears from the helmet slot (closing the inventory, a conflict with another plugin, anything), a separate check once per second during the hunt automatically puts the trophy back on the head. There's only one way to take it off: die.

Lucky one restrictions

Each restriction is toggled separately in the config, and all of them are ignored for players with the hunt.admin permission, otherwise an admin couldn't even stop their own event.

  • Commands. With block-commands enabled, a lucky one can use only commands from the whitelist (by default just one, /hunt leave). The check is prefix-based, so allowing /hunt leave also lets through any variants of it with arguments after it.
  • Fireworks. Using rockets is forbidden: interaction with the item in hand is blocked.
  • Claims and regions. Placing claim blocks is not allowed. The plugin recognizes them in three ways at once: by a service tag in the item's data (if its namespace contains "private", "cloudprivates", or "region"), by a substring in the display name (by default "приват", "private", "регион"), and by exact material (a beacon by default). Any of the three lists can be extended in the config.
  • Sitting it out in your own claim. With CloudPrivates connected and its API working, the plugin counts the seconds a lucky one has spent continuously in their own region. The default is 60 seconds, and you can't just wait until the limit: the timer resets to zero the moment you step out of the region, even for an instant, so you can't bank time in short visits. Exceed the limit and you're teleported back into the fight with the same command used at selection, plus a separate sound and message. Without CloudPrivates or with an unavailable API, this one check simply doesn't work, and the other restrictions are unaffected.

Passing the trophy by killing

Anyone can kill a lucky one, anywhere on the map. The trophy doesn't drop on the ground. It's removed from the drop entirely and goes straight to the winner along with the status. The killer isn't teleported anywhere, since they're already standing at the fight. The victim's real helmet, set aside at selection, isn't lost: if the server has keepInventory on, it goes right back on the head because the inventory stays in place after death anyway. If it's off, the helmet is added to the drop list and falls with the rest of the items rather than vanishing. If the killer wasn't a lucky one yet, they get the trophy without a teleport, since they earned it on the spot. If the killer already wore their own trophy, they don't get a second one: the number of active lucky ones simply drops by one, and with every such death the hunt naturally tightens toward the finale. If a lucky one dies without a killer (fell into lava, crashed, suicide), the trophy goes to no one. Instead the plugin picks a replacement at random from the remaining participants who aren't wearing a trophy yet.

The finale, disconnects, and other edge cases

After total-minutes (30 by default, minimum 1) the event ends on its own: the trophy is removed from all online lucky ones and their previous helmet is returned, the server gets a final announcement with a separate sound, and the state resets to waiting. The /hunt stop command runs exactly the same sequence early, rather than just cutting the hunt off silently.

If a lucky one leaves the server, their real helmet is returned and the status is removed before the connection drops, so the changes are saved correctly in the player file. They drop out of the participants, the server learns of it through a separate message, and a replacement is picked right away, with no pauses. On rejoin the logic is symmetrical: if the plugin's data says the player is still a lucky one but there's somehow no trophy on their head, it's put back on. If the player isn't counted as a lucky one but joined with a trophy on their head (orphaned after a restart or crash), the trophy is removed. Plugin shutdown or a server stop work under the same safeguard: all trophies on online players are removed properly before unloading, so there are no stuck golden pumpkins left on heads. One more extreme case for admins: if the last lucky one dies without a killer and no free participants are left to replace them, the hunt doesn't crash. It just keeps running with zero active lucky ones until the timer expires or it's stopped manually.

Rewards and income

While the trophy is on the head, the lucky one earns steadily. That's the bait for those who go sign up.

ParameterDefault value
Payout intervalevery 5 seconds
Gold per tick (via Vault)50
XP per tick10 XP

The payout shows right above the hotbar (action bar), with gold and XP on a separate line for every tick. Vault is a soft dependency: with no Vault or economy plugin behind it, gold is simply not paid out (the action bar line shows zero), while XP still flows as usual. The gold amount in the message is shown as a whole number if the sum has no remainder (50, not 50.0), and with a fractional part if one is set in the config. A payout happens only if the trophy is actually on the head at that moment, a separate safeguard against a fraction of a second of desync. The check that the trophy is in place and the actual payout of gold and XP are two different timers: the first ticks once per second always, the second runs on its own config interval.

How to run a hunt: tactics

  • Signup length to match the mood. A short window (minimum 5 seconds, realistically 60-90) is for a spontaneous burst at peak online, with no reminder at the midpoint. A long one (5+ minutes) warms the server up in advance: with an announcement, a pause, and a separate reminder exactly in the middle.
  • Lucky one count to match your population. On a small server it makes sense to set lucky-min and lucky-max to one, which gives a tense hunt for a single target. On a large one, 2-3 or more, so several fights happen at once rather than a single brawl around one target.
  • Against sitting out in your base. The time limit in your own claim and the ban on placing new claims only work together. Otherwise a lucky one either sits out in an old region or immediately builds a new one right where they were caught.
  • A counted-down finale directs itself. Since a killer who already has a trophy doesn't get a second one, the number of targets drops with every death. If you start with three, the evening can well end with the whole server chasing just one. Keep /hunt leaders handy to tell spectators where things are hot right now.
  • Teleport to fit your map. rtp-command ties lucky-one selection and the return from a region into your homes, spawns, or arenas system instead of pure random. It's handy if you want to keep fights in a set PvP zone rather than across the whole map.
  • The schedule is background, not a prime-time guarantee. Auto-start fires only from the idle state and on a pure timer, with no link to how many players are online. If you need a hunt at the evening peak, just start it by command instead of relying on the automatic one.
  • Live edits. /hunt reload is safe to apply right in the middle of a hunt. The current round isn't interrupted, and the config (texts, restrictions, schedule) updates without a restart and without kicking players out of the game.

Commands

CommandWhat it doesAccess
/hunt joinsign up as a participanthunt.use
/hunt leaveleave the event / drop the trophyhunt.use
/hunt leaderscoordinates of all lucky oneshunt.use
/hunt startstart the eventhunt.admin
/hunt stopstop the eventhunt.admin
/hunt reloadreload the config without a restarthunt.admin

The same commands are available through the aliases /trophyhunt and /охота, with tab completion. A command with no arguments (or with an unknown argument) doesn't stay silent: it shows a list of available actions and a live status, the current state of the event and the number of signed-up players. Admin entries in that list are visible only to those who have the permission for them.

Permissions

PermissionDescriptionDefault
hunt.adminevent control: start/stop/reloadop
hunt.useparticipation: join/leave/leaderstrue (everyone)

Lucky one restrictions don't apply to players with hunt.admin. The command limit and other bans don't affect them, so an admin can always manage the event from the inside, even when picked as a lucky one.

Configuration

  • Trophy. The material (carved pumpkin by default; a player head or any other item for the helmet slot works too), CustomModelData for the resource pack (750001 is reserved for the trophy in the shared numbering of Cloud Delight plugins, so there are no collisions with other events' packs), the name, lore line by line, and glow are all in the trophy section. Without a resource pack the item looks like a regular pumpkin, and that's fine.
  • Event. The lucky one count range (lucky-min/lucky-max), signup time (signup-seconds), and total hunt duration (total-minutes) are in the event section.
  • Income. The payout interval and the gold/XP amounts per tick are in the income section, and fractional gold values are allowed.
  • Restrictions. Each is toggled separately: the command whitelist, the firework ban, the claim ban (by item material and by substring in the name), and the time limit in your own claim. All of it is in the restrictions section.
  • Teleport. Your own command used when picking a lucky one and when kicking out of a claim (for example, via a homes system or a spawn point) is rtp-command. A fallback random teleport with a set world, center, and radius is rtp-fallback, used if your own command is empty or didn't work.
  • Schedule. Auto-start every N minutes is in the schedule section. The default is 0, which means off, and the event starts only manually by command.
  • Messages. All texts are in Russian, with color codes and placeholders for each specific event (selection, death, claim timeout, and so on), and you edit them to fit your server's voice in the messages section.
  • License. The license section is an online key check every time the plugin is enabled, with a grace-hours allowance (24 hours by default) in case the license server is unavailable. In that case the plugin runs on the last successful cache rather than shutting down immediately. For your own server, just set enabled: false and the check is turned off completely.
  • All changes are applied with the /hunt reload command, with no server restart and without stopping a hunt already in progress.
You can't hide or take off the trophy on your head, you can only take it from someone. After that, the server sorts itself out.