What CPVPEvent+ does.
CPVPEvent+ is one plugin that handles everything you need to run an event on a Crystal PvP server. The world, the border, the kits, the chat, the spectators, the auto events, the gulag, and the parties. All in one config file.
Drop the jar in, paste your license key, tell it which world is your event world, done. The rest of this page explains how each piece works. If you just want to get it running, go straight to Installation and License Activation.
New here? Read these in order: Installation → License → Configuring Worlds → Setting Up /regen. That's enough to get the basics working.
What's inside.
One jar, one config. No extra plugins required (PlaceholderAPI and TAB are optional, the plugin works fine without them).
Smart Border
Animated shrink, pause/resume, optional damage scaling, and an optional action bar that pops in showing live size while the border moves.
Storm Sickness
Configurable tick threshold, warnings, and an optional safe-zone radius.
Rekit System
Auto-enable rekits after N deaths, with manual override, action-bar progress, and titles.
Multi-World /regen
Restart-safe map regen using a templates folder. Reset multiple worlds in parallel on the next boot. Same approach as MultiReset, built in.
RevFights Gulag
Pair dead players into fresh 1v1 worlds with a 50-block border and a 3-minute timer. Winners revive, losers stay out. Arenas auto-clean.
Party / Team System
Up to 8-player parties with team glow (only teammates see it), party chat, invites, kicks, and admin override.
Four Event Modes
Schedule by clock or run on-demand. Modes: Automatic (full sequence), HighPlayers, LowPlayers, and Manually for full hands-on control.
Visual GUI
Tweak settings live with /eventsettings. Force-start or normal-start any mode with a click. No config reloads needed.
Death Title
Customizable red "You died!" title flashes on every death. Toggle it from config.yml if you don't want it.
Spawn-Block Filter
Players only land on configured blocks (grass, sand, snow, mycelium, …) at event start. No more dropping into oceans or lava pits.
PlaceholderAPI
Players alive, border size (auto-tracks the configured event world), rekit deaths, totem count, party size, ping, and more.
/eventstatus
Live read of where the Automatic sequence is: past steps, current step, and time until the next one.
Server requirements.
| Component | Supported |
|---|---|
| Minecraft | 1.20.4 to 1.21.x |
| Server software | Paper, Purpur (recommended). Spigot may work but is not actively tested. |
| Java | Java 17 or higher. |
| Required plugins | None. |
| Soft-dependencies | PlaceholderAPI, TAB |
| Internet access | Required for license validation on startup. |
Purpur tip. Purpur ignores worlds listed in bukkit.yml, so the plugin auto-loads the configured target world on enable. You don't need to add anything to bukkit.yml.
Drop in, restart, configure.
The jar carries everything it needs. The whole install takes about two minutes.
-
Download CPVPEvent+.jar
Grab the latest jar from your BuiltByBit purchase page.
-
Drop it in
plugins/Place the jar in your server's
plugins/folder. If you want PlaceholderAPI placeholders or TAB integration, install those too. they're optional but supported. -
Start the server once
This generates
plugins/CPVPEvent+/config.yml. The plugin will disable itself with a license error. that's expected on first boot. -
Paste your license key
Open
config.ymland replacePASTE-YOUR-KEY-HEREwith the key from your BuiltByBit purchase. See License Activation for the full walkthrough. -
Configure your worlds
Set
world.target-worldandworld.spawn-world. See Configuring Worlds. -
Restart the server
On a clean boot you should see
License verifiedandPlugin enabledin the console.
Setting up your license key.
The plugin checks your license key every time the server starts. If it's missing or wrong, the plugin shuts itself off and prints an error in the console.
Step 1 · Find your key
Go to BuiltByBit, open your CPVPEvent+ purchase page, and grab the key from the Licenses tab. It looks like a long string of letters and numbers.
Step 2 · Open config.yml
The file lives at plugins/CPVPEvent+/config.yml. The license block is right at the top.
# CPVPEvent+ Configuration
# Support: https://discord.gg/7KKz3rYs8U
# Purchase: https://builtbybit.com/resources/cpvpevent.96670/
license:
key: 'PASTE-YOUR-KEY-HERE'
Step 3 · Paste the key
Replace the placeholder with your actual key. Keep the surrounding single quotes.
license:
key: 'a1b2c3d4-XXXX-XXXX-XXXX-c5d6e7f80912'
Step 4 · Restart the server
A reload (/reload or /cepreload) is not enough. The license check runs in onEnable, so you need a full restart.
Step 5 · Verify activation
On success, the plugin prints a banner like this in the console:
╔══════════════════════════════════════════╗
║ CPVPEvent+. License ║
╠══════════════════════════════════════════╣
║ ✔ License verified ║
║ ✔ License valid ║
║ ✔ Plugin enabled ║
╚══════════════════════════════════════════╝
If you see a red banner with ✗ License validation failed, jump to Troubleshooting.
Don't share your key. Each license is tied to your BuiltByBit account. Sharing the file or the key publicly will invalidate it and trigger a manual review.
Target world & spawn world.
You've got two worlds to set up: the event world (where the actual PvP
happens, with the border) and the spawn world (the lobby players go back
to). Both are configured in the world: block of config.yml.
world:
target-world: world_minecraft_desert # the event map
spawn-world: world # the lobby
10-seconds-safe-protection: false
auto-kit: false
default-kit: /k1
load-publickit-before-default-kit: false
spawn-location:
x: 0.5
y: 64.0
z: 0.5
yaw: 180
pitch: 0.0
What goes where
| Key | Purpose |
|---|---|
target-world | The world the border lives in. Players join the event by being teleported here. /regen rebuilds this world by default. |
spawn-world | The lobby world. /tpspawn sends players here, and so do all "exit event" flows. |
spawn-location | The exact coordinates inside the event world where players appear when joining the event. |
auto-kit | If true, runs the default-kit command on join automatically. |
10-seconds-safe-protection | Grants 10 seconds of damage immunity on respawn into the event world. |
If the configured target-world isn't loaded by the server (common on Purpur), CPVPEvent+ will load it itself with WorldCreator on enable.
How to set up /regen.
/regen resets your event maps. It deletes the live world folders and replaces
them with clean templates you set up beforehand. The actual swap happens on the next server
boot, before any world is loaded, so it's always safe.
The system supports multiple worlds at once. Drop one template folder per
world into plugins/CPVPEvent+/regen-templates/ and the plugin resets all of
them in parallel on the next startup. Same approach as the MultiReset plugin, but
built in.
How it works
When you run /regen: the plugin writes a small flag file, blinds and kicks
players, then triggers a server restart. On the next startup, before Bukkit loads any
world, the plugin sees the flag and spins up one thread per template folder. Each thread
deletes the live world and copies the template in its place. The main thread waits until
every reset finishes, then deletes the flag and the server boots normally.
Step 1 · Create clean backups of your event worlds
Stop the server. For each world you want resettable, copy its folder to your local
machine and clean it up: remove chunks you don't want, reset spawn protection, whatever.
These are the worlds players will get back every time someone runs /regen.
Pro tip, pre-generate your world with Chunky: install Chunky, run /chunky world <world> + /chunky radius <blocks> + /chunky start, and let it pre-generate every chunk within the radius before you capture the template. Without this step, the template only contains the chunks that happened to be loaded at copy time, and any unloaded area will be regenerated fresh the first time a player walks into it after a /regen, which can break terrain consistency or even spawn players in mid-generation chunks.
Step 2 · Place templates in regen-templates/
Drop each backup world folder into plugins/CPVPEvent+/regen-templates/.
The folder is created automatically on first start. Each subfolder name must exactly match
the live world name on disk.
└── CPVPEvent+/
├── config.yml
├── regen-templates/ # ← templates folder (one subfolder per world)
│ ├── world/ # template for the overworld
│ │ ├── level.dat
│ │ └── region/
│ ├── world_minecraft_plains/
│ ├── world_minecraft_desert/
│ └── world_minecraft_mushroom/
└── RevFights-Worlds/ # gulag arenas (separate)
Step 3 · Tune the regen block in config.yml
The defaults work for most setups. The two settings worth knowing about are
templates-folder and restart-method.
regen:
templates-folder: regen-templates # subfolder of plugins/CPVPEvent+/
restart-method: restart # 'restart' (recommended) or 'shutdown'
kick-message: '&cThe map is regenerating. Try again later.'
restart-delay: 40 # ticks between announce and kick (40 = 2s)
# Legacy single-world fallback. Only used if the templates
# folder is empty AND a single world is found at the path
# below. Most setups can ignore these two lines.
world-name: world_minecraft_desert
backup-folder: world_minecraft_desert
Step 4 · Make sure your host can restart the server
With restart-method: restart (the default), the plugin dispatches Bukkit's
/restart command. That uses your bukkit.yml's
settings.restart-script when one is configured, otherwise it falls back to a
clean shutdown.
On hosts with auto-restart-on-crash (Pterodactyl, Folium, systemd, screen-loop wrappers),
either method will bring the server back up. If restart misbehaves on your
host, set restart-method: shutdown instead, which forces a clean
Bukkit.shutdown() and lets the wrapper handle the relaunch.
Pterodactyl note: the panel has a 60-second cooldown between auto-restarts. If you run /regen twice within a minute, the second one will leave your server offline until the cooldown expires.
Step 5 · Test it
As an op, run /regen. You'll see a title and chat broadcast, players get
kicked with the configured message, and the server restarts. On boot you'll see something
like:
[CPVPEvent+] Regen flag detected - applying templates (MultiReset-style)...
[CPVPEvent+] Resetting 3 world(s) in parallel...
[CPVPEvent+] Resetting 'world_minecraft_plains' from .../regen-templates/world_minecraft_plains
[CPVPEvent+] Resetting 'world_minecraft_desert' from .../regen-templates/world_minecraft_desert
[CPVPEvent+] Resetting 'world' from .../regen-templates/world
[CPVPEvent+] 'world_minecraft_plains' reset in 412ms.
[CPVPEvent+] 'world' reset in 588ms.
[CPVPEvent+] 'world_minecraft_desert' reset in 624ms.
[CPVPEvent+] Regen complete - 3 world(s) ready for startup.
If the templates folder is empty, /regen will refuse to run and tell you the path it expected. The plugin never deletes a world it can't replace.
Setting up the gulag.
/revfights <n> grabs n pairs of dead spectators, copies a fresh
arena world for each pair, and throws them into a 1v1 with a 50-block border and a 3-minute
timer. Winners come back to life, losers stay dead. Arena copies get deleted on the next
restart.
Step 1 · Build your arenas
You can have as many arena templates as you want. The plugin picks one at random for each
fight. Each one is just a regular world folder with a level.dat. Build them
on a creative server, in singleplayer, wherever, then copy the world folder over.
Step 2 · Place templates in RevFights-Worlds/
Drop each arena world folder into plugins/CPVPEvent+/RevFights-Worlds/.
The folder is created automatically on first start.
└── CPVPEvent+/
└── RevFights-Worlds/
├── arena_desert/
├── arena_ice/
└── arena_pit/
Step 3 · Run a fight
As an op, while the event is live:
/revfights 4 # start 4 simultaneous 1v1s (8 dead players)
/rflist # list active fights
Loaded copies are named RevFightWorld-001, -002, … in the server
root. They're all deleted automatically on the next restart, but if you want to flag them
for cleanup right now use /delrfworlds.
Spawn point of each arena = the world's level.dat spawn. Set it where you want fighters to drop in.
Command reference.
Every command requires its corresponding cpvpevent.<name> permission, or op.
Event control
| Command | Description |
|---|---|
/startevent <min> <mode> <announce> | Start an event after a countdown. Modes: Automatic · HighPlayers · LowPlayers · Manually. Announce: announcestart or silentstart. |
/startforce <mode> <announce> | Force-start the event immediately, no countdown. |
/stopevent | Stop the auto-event sequence cleanly. |
/pauseevent | Pause the auto-event sequence. |
/resumeevent | Resume a paused auto-event sequence. |
/eventstatus | Show where the Automatic event sequence is. Past steps, current step, time until the next one. |
/announcewinner | Broadcast the winner of the event. |
/announce <message> | Send a styled title announcement. |
World & border
| Command | Description |
|---|---|
/border <distance> <time> | Animate the border to the given distance over the given time (in seconds). |
/stopborder | Freeze the border at its current position. |
/resumeborder | Resume the border toward its saved target. |
/drop <deepslate|bedrock> | Drop all blocks above the given level inside the border. |
/setnetherite | Convert all bedrock inside the border to netherite blocks. |
/setbedrock | Convert all netherite blocks inside the border back to bedrock. |
/clearblock | Clear configured blocks from the event world. |
/clearspawn | Clear configured blocks from the spawn world. |
/regen | Regenerate the event world from the backup folder. |
/tpspawn | Teleport to the configured spawn world. |
Players & rekits
| Command | Description |
|---|---|
/revive <player> | Revive a specific player. |
/reviveall | Revive every dead player. |
/rekit <enable|disable> | Toggle the rekit commands manually. |
/rekitset <deaths|disable> | Set the rekit death-count threshold or disable the system. |
/rekitstatus | Show the current rekit death-system status. |
/kitall <k1..k9> | Run the chosen kit command for every alive player. |
/joinspectator <true|false> | Toggle "new players join as spectator". |
Toggles
| Command | Description |
|---|---|
/pvp <enable|disable> | Toggle PVP. |
/chat <enable|disable> | Toggle chat for non-staff. |
/protection <enable|disable> | Toggle block place/break protection. |
/staffchat <true|false> | Switch your messages to staff chat mode. |
RevFights & party
| Command | Description |
|---|---|
/revfights <n> | Start n 1v1 gulag fights using random arena templates. |
/rflist | List all active RevFights and the players in each. |
/delrfworlds | Flag every RevFights world for deletion on next restart. |
/party <sub> | Manage parties: create, invite, accept, decline, leave, kick, transfer, rename, disband, info, invites. |
Tools & admin
| Command | Description |
|---|---|
/eventsettings | Open the visual event-settings GUI. |
/eventools | Give yourself the event tools (nether star + help book). |
/help | Display the in-game help book with every command. |
/cepreload | Reload the plugin configuration without restarting. |
Permission nodes.
Each command has its own node, all under the cpvpevent. prefix. Two convenient
umbrella nodes exist for staff:
| Node | Grants |
|---|---|
cpvpevent.* | Every CPVPEvent+ command, including admin party subcommands. |
cpvpevent.party | Use of /party for normal players. Default: true. |
cpvpevent.party.admin | Admin party subcommands: disable, enable, disbandall. Default: op. |
For everything else, use cpvpevent.<command>, for example
cpvpevent.regen, cpvpevent.revfights, cpvpevent.startevent,
cpvpevent.eventstatus.
The full list of nodes is in plugin.yml.
The settings you'll actually touch.
config.yml has comments on basically every line. The most useful settings
are listed below. The rest is mostly cosmetic stuff (titles, chat messages, colors).
General settings
settings:
join-as-spectator: false
rekit-enabled: true
chat-enabled: true
protection-enabled: false
pvp-enabled: true
fall-damage-enabled: false
suppress-chat-messages: false # silence plugin broadcasts
Border & storm sickness
border:
initial-size: 100 # radius in blocks
border-damage:
enabled: true
base-damage: 2.0
max-damage: 8.0
damage-increase: 0.5
storm-sickness:
enabled: true
tick-threshold: 15
warning-threshold: 5
warning-interval: 5
safe-zone-distance: 0
Border action bar
Optional pop-in action bar that shows the live border size while it's animating to a new target. When active, it takes priority over the rekit action bar and the countdown action bar.
border-action-bar:
enabled: false
format: '&#FFCC00Border: &#FF2B2B<current_border_size> &#AAAAAA-> &#FF2B2B<border_final_size>'
Placeholders: <current_border_size> and <border_final_size> (radius in blocks). Standard & color codes and &#RRGGBB hex codes both work.
"You died!" title
Red title that flashes when a player dies. Set enabled: false to turn it off entirely.
titles:
you-died:
enabled: true
main: '&#FF2B2B&lYou died! ☠︎'
subtitle: ''
fade-in: 5
stay: 40
fade-out: 10
Allowed spawn blocks
The random teleport at event start (and on late-join into a running event) only lands players on top of one of these block types. After 60 failed tries the plugin falls back to "any solid surface" so a player is never left un-teleported.
allowed-spawn-blocks:
- GRASS_BLOCK
- MYCELIUM
- SAND
- RED_SAND
- SNOW # 1-8 layer snow
- SNOW_BLOCK # full snow block
- POWDER_SNOW
Use any Bukkit Material name, case-insensitive. Leave the list empty to use the built-in defaults shown above.
Blocked commands during events
For non-op players while the event is running. Spectators can still use the entries listed under spectator-allowed-commands.
blocked-commands:
enabled: true
commands:
- spawn
- rtp
- regear
- heal
- repair
spectator-allowed-commands:
enabled: true
commands:
- spawn
- hub
- lobby
Four modes, one command.
/startevent <minutes> <mode> <announce> queues an event with a countdown, sequential drops, kit broadcasts, border phases, and a winner announce.
| Mode | Behaviour |
|---|---|
Automatic | Full pre-built sequence. The plugin runs the whole event for you: countdown → border shrinks → drops → revives → final kits → winner announce. Use /eventstatus to see where the sequence is. |
HighPlayers | For bigger lobbies. Wider border, fewer rekits, longer phases. |
LowPlayers | For smaller lobbies. Tighter border, more rekits, faster pace. |
Manually | No automatic phase changes. You handle everything yourself. |
While a sequence is live, use /pauseevent / /resumeevent to handle restarts or staff calls, and /stopevent to abort cleanly. /startforce <mode> <announce> skips the countdown if you need to start right now.
You can also start any of these from the visual GUI: /eventsettings → pick mode → Force Start or Normal Start. Same flow, no typing required.
Live readout for Automatic mode.
/eventstatus shows you exactly where the Automatic event sequence is right
now. Past steps are dimmed, the current step is highlighted, and upcoming steps are
listed with a countdown to the next fire.
Markers:
✓step has already fired►step is the most recent fire (current step)·step is upcoming
/eventstatus
Event Status → Automatic mode (elapsed 4:23)
✓ T+0:00 Border 100m (instant)
✓ T+1:30 Drop deepslate
► T+3:00 Border 80m over 60s
· T+5:00 Drop bedrock + reviveall
· T+8:00 Border 50m over 90s
· T+12:00 Finish
Next step in 0:37
The command works only while an event is running in Automatic mode. In any other mode (HighPlayers, LowPlayers, Manually) it tells you so. Permission node: cpvpevent.eventstatus (default: op).
Schedule a fight every day.
The plugin can fire /startevent automatically at the same time every day. Configured in config.yml:
daily-event:
enabled: true
time: '18:00' # 24-hour, server timezone
mode: HighPlayers
waiting-time: 10 # minutes between announce and start
announce: true
If you change daily-event.time at runtime, run /cepreload for the scheduler to pick it up.
Built-in teams with friendly fire off.
Players can group up to 8 with /party create and /party invite.
Members see each other glowing (only teammates see the glow, nobody else), and they get
their own chat channel with /p <message>.
/party create
/party invite Heuxil
/party accept
/party kick Evoma_the_bot
/party leave
If you want to disable parties for a specific event, the cpvpevent.party.admin permission unlocks disable, enable, and disbandall.
party:
max-size: 8
No camping outside the border.
Storm Sickness counts ticks for any player who's outside the border. Once they go past
tick-threshold ticks over the limit, they get eliminated with a death title.
You can set up a safe-zone-distance around spawn where players are immune.
storm-sickness:
enabled: true
tick-threshold: 15 # ticks past border before elimination
warning-threshold: 5 # show warning at N ticks remaining
warning-interval: 5
safe-zone-distance: 0 # radius (blocks) of immune zone around spawn
To disable the mechanic entirely, set storm-sickness.enabled to false and reload.
Available placeholders.
If PlaceholderAPI is installed, the following placeholders register under the cpvp identifier.
| Placeholder | Returns |
|---|---|
%cpvp_players_alive% | Number of players in survival or adventure mode. |
%cpvp_border% | Current border radius in blocks. Auto-tracks world.target-world from config.yml, so it follows whichever world you've set as the event world. |
%cpvp_rekit% | Enabled or Disabled. |
%cpvp_rekit_deaths% | Deaths remaining until the next auto-rekit, or status text. |
%cpvp_totems% | Number of totems of undying in the player's inventory. |
%cpvp_team% | Player's party size as n/max, or N/A. |
%cpvp_ping% | Player's ping in ms. |
When something looks off.
License validation failed
Open the console and read the error line. The most common reasons:
- The placeholder is still there. Make sure
license.keyis your real key, notPASTE-YOUR-KEY-HERE. - Quotes were dropped. Keep the surrounding single quotes in
config.yml. - The server can't reach the API. Network issues or a firewall blocking outbound HTTP. The plugin needs to talk to the SunLicense API on enable.
- You did
/reload. A plugin reload doesn't re-run the license check. Use a full server restart.
"World 'X' not found! Run /regen first."
The world configured as world.target-world doesn't exist on disk. Either generate it manually, set the value to a world that does exist, or place a template folder in plugins/CPVPEvent+/regen-templates/ and run /regen once.
/regen kicks players but never restarts
The plugin dispatches /restart by default. If your host doesn't have a working
settings.restart-script in bukkit.yml, the server will shutdown
and your wrapper needs to bring it back up. Two things to check:
- On Pterodactyl/Folium, make sure Auto-restart on crash is on in the panel.
- If
/restartmisbehaves on your host, tryregen.restart-method: shutdowninconfig.ymlto force a clean shutdown instead.
/regen finished but my world looks the same
Two common causes:
- The template folder is empty or invalid. Each subfolder under
regen-templates/needs a reallevel.dat+ chunks. If it's empty, the plugin "resets" to nothing and Minecraft regenerates fresh terrain. - You captured the template after your changes. The template is whatever you copied. If it already has your changes baked in, the regen "works" but the result looks identical to what was there before. Re-capture from a fresh world.
/regen looks fine right after, but breaks once players walk around
Your template doesn't include all the chunks. World folders only contain the chunks that
were loaded on disk when you copied them, so any unvisited chunk gets regenerated from
scratch the first time a player walks into it after /regen, which produces
patchy terrain, weird biome borders, and players occasionally spawning in mid-generation
chunks.
Fix: install Chunky, run /chunky world <name> + /chunky radius <blocks> + /chunky start to pre-generate every chunk inside the event area, then capture the template. See the FAQ for the full sequence.
Border placeholder shows wrong world
As of the latest version, %cpvp_border% and the in-game scoreboard
Border: line both auto-track world.target-world from
config.yml. If you're on an older build and seeing a hardcoded world name,
update the plugin.
RevFights does nothing
Check the console for [RevFights] No world templates found in .... That means you haven't put any arenas in plugins/CPVPEvent+/RevFights-Worlds/. Each subfolder in there counts as one arena template.
Placeholders don't expand
Make sure PlaceholderAPI is installed. On startup you should see PlaceholderAPI register result: true in the console. If you don't see it, the plugin will warn you.
Common questions.
Stuff people ask a lot. Short answers first.
How do I set up my license key? +
Open plugins/CPVPEvent+/config.yml, replace PASTE-YOUR-KEY-HERE on the license.key line with your BuiltByBit key, keep the single quotes, and fully restart the server.
A /reload won't trigger the check. See License Activation for the step-by-step.
How do I set up the world for /regen? +
Make a clean copy of each event world folder you want resettable, and drop them inside plugins/CPVPEvent+/regen-templates/. One subfolder per world. Subfolder names must match the live world names exactly.
So for a server with world + world_minecraft_plains, you'd end up with:
plugins/CPVPEvent+/regen-templates/world/level.datplugins/CPVPEvent+/regen-templates/world_minecraft_plains/level.dat
All listed worlds get reset in parallel on the next boot. Full walkthrough in Setting Up /regen.
Can /regen reset multiple worlds at once? +
Yes. Drop one subfolder per world into plugins/CPVPEvent+/regen-templates/ and the plugin spawns one thread per template, runs them in parallel, and waits for all of them before booting. Same approach as the MultiReset plugin.
Single-world legacy setups (one folder directly inside plugins/CPVPEvent+/ matching regen.backup-folder) still work as a fallback.
My /regen is bugging out / terrain looks weird after regen +
You probably didn't pre-generate the world with Chunky before capturing the template. This is the #1 cause of weird regen behaviour.
What happens: when you copy a world folder, you only copy the chunks that were actually loaded on disk. Any chunk that was never visited stays empty in the template. After /regen, those empty areas get freshly generated by Minecraft the first time a player walks into them, which means the seed and biome data might not match the rest of the world, players can spawn in mid-generation chunks, and the border can push people into ungenerated terrain.
Fix: install Chunky, then before capturing your template:
/chunky world <your-world>
/chunky radius 200 # a bit larger than your event border
/chunky start
# wait for it to finish (can take a while on big radii)
Then stop the server, copy the world folder into plugins/CPVPEvent+/regen-templates/, and you're good. Re-run Chunky if you ever expand the border.
What's the difference between target-world and spawn-world? +
target-world is your event world: the one with the border, where fights happen, the one /regen rebuilds.
spawn-world is your lobby: where /tpspawn sends players, and where the "back to spawn" flows lead. They are usually two different worlds.
How do I set up RevFights arenas? +
Build each arena as a normal Minecraft world, then drop the entire world folder into plugins/CPVPEvent+/RevFights-Worlds/. You can have as many as you want, and the plugin picks one at random per fight.
Each arena folder must contain a valid level.dat. The level.dat spawn point is where fighters drop in. See RevFights Arenas.
Why does /regen need a server restart? +
Bukkit holds open file handles on a loaded world, so you can't safely delete and replace the folder while the server is running. The plugin gets around this by writing a flag file, kicking everyone, and restarting. On the next boot, before any world loads, the swap happens cleanly.
It's the same trick MultiReset uses, just built in.
How do I enable a daily event? +
In config.yml, find the daily-event block and set enabled: true, then choose a time: in 24-hour format (server timezone) and a mode. Reload with /cepreload.
Example: time: '21:00' + mode: HighPlayers + waiting-time: 10 = announce at 21:00, start at 21:10. See Daily Events.
How do I disable Storm Sickness? +
Set storm-sickness.enabled to false in config.yml and reload with /cepreload. Players outside the border will then only take normal world-border damage.
How do I block extra commands during events? +
Add the command name (no leading slash) to the blocked-commands.commands list in config.yml. Defaults already block spawn, rtp, heal, repair, clear, etc. Reload with /cepreload.
Op players are never affected.
How do I add custom kit commands to the rekit-disabled list? +
Add them to the rekit-commands list in config.yml, without the leading slash. Entries can be either bare command names (k1) or full command + first argument (publickit kit1) to block only that exact usage.
Placeholders aren't expanding. what's wrong? +
Three things to check, in order:
- PlaceholderAPI is installed and enabled (it's a soft-dep, not bundled).
- On startup, the console says
PlaceholderAPI register result: true. - You are using the
cpvp_prefix, for example%cpvp_players_alive%, not%players_alive%.
Can I change the border size mid-event? +
Yes. /border <new-radius> <seconds> animates the border to the new size over the given duration. Use /stopborder to freeze, /resumeborder to keep going.
The action bar reflects the live size automatically.
How does the auto-rekit death system work? +
You set a death threshold via /rekitset <n>. After n total event deaths, rekits enable themselves for a configurable window (with chat broadcast). The action bar shows progress as you approach the threshold. Set with /rekitset disable to turn the system off.
Manual /rekit enable|disable overrides the system temporarily.
What's the new Automatic mode? +
It's a fully pre-built event sequence. You start it with /startevent <min> Automatic <announce> (or pick it in the GUI) and the plugin runs the whole thing for you: countdown, border phases, drops, revives, kit broadcasts, winner announce. You don't need to touch anything mid-event.
While it's running, /eventstatus shows you exactly where the sequence is: past steps, current step, time until the next one. See Event Status.
How do I turn on the border action bar? +
In config.yml, find border-action-bar and set enabled: true, then reload with /cepreload. The action bar pops in any time the border is animating to a new size and disappears once it stops.
Customize the format string with <current_border_size> and <border_final_size> placeholders. Both & color codes and &#RRGGBB hex codes work.
How do I disable the "You died!" title? +
Set titles.you-died.enabled to false in config.yml and reload with /cepreload. You can also rewrite the text and timing under the same block. See Configuration.
Players spawn on weird blocks (water, lava, leaves) at event start +
Adjust the allowed-spawn-blocks list in config.yml. The plugin tries 60 random spots looking for one of these blocks before falling back to "any solid surface". If the list is too restrictive, increase it; if it's too loose, narrow it down.
Default list includes grass, mycelium, sand, red sand, and snow types. Add any Bukkit Material name (case-insensitive).
What if my problem isn't listed here? +
Open a ticket on Discord. When you do, include: server software (Paper, Spigot, etc.) + version, plugin version, the relevant config block, and any error lines from the console.
Need help?
Open a ticket on Discord and I'll get back to you. When you do, please include your server software (Paper, Spigot, etc.), the plugin version, and any error lines from the console. Saves a ton of back and forth.
Thanks for using CPVPEvent+. Bug reports, feature ideas, weird questions, all welcome.