/
mc-node.net →
Minecraft

How do I run a hardcore SMP event: rules, start and finale?

Updated 07/10/202611 min read
In this article
  1. Set the rules before the start
  2. Get everyone to start at the same moment
  3. Handle deaths fairly
  4. Preventing cheating: the basics
  5. Performance with lots of players and during streams
  6. Build up to a finale with a shrinking border
  7. Wrap up the season and save the world
  8. Need help?

The server is ready, the world is generated and your group is waiting. Now the real work begins: making sure the season is fair, runs smoothly and wraps up properly. In this article you'll find a rules template to copy, the commands to get everyone starting at exactly the same moment, a fair approach to deaths and revives, the basics against cheating, tips for lots of players and streams, a finale with a shrinking world border and how to save the world afterwards. Haven't set up the server yet? Start with setting up a hardcore SMP server.

Set the rules before the start

The tech is the easy part. Arguments are almost always about rules nobody thought of beforehand. So put the rules in your Discord, have everyone agree to them and don't change them halfway through. You can copy this template; fill in the parts in brackets yourself:

  1. One life. Anyone who dies is eliminated and stays a spectator until the end of the season, unless the revive rule applies.
  2. Revives. [No revives / one revive per player per season in exchange for an agreed sacrifice / automatically back after a set number of days.]
  3. Logging out in danger counts as a death. Anyone who logs out in the middle of a fight, a fall or while in lava is treated as dead by the admin.
  4. No cheats or exploits. No x-ray, no hacked clients, no dupes. Not sure if something's allowed? Ask first.
  5. Allowed client mods. Performance mods, shaders and Simple Voice Chat are fine. Minimaps that show caves or mobs through walls, x-ray texture packs and autoclickers are not.
  6. PvP. [Allowed from day X / only in agreed areas / not allowed.]
  7. Bases. [Raiding allowed or not; never with lava or TNT in someone else's base.]
  8. Spectators stay quiet. Eliminated players don't pass on any information to living players, not through Discord or a stream either.
  9. No lag machines. Big farms and long hopper lines only after checking with the admin; the admin can shut down a farm if the server is suffering from it.
  10. Server problems. In case of a provable crash or server lag, the admin decides on a revive based on the logs. That decision is final.
  11. End. The season ends on [date and time]. Whoever's still alive by then [wins together / plays the finale].

Get everyone to start at the same moment

A fair start means nobody's already chopping wood while the rest are still logging in. The simplest approach: everyone appears in a waiting area at spawn in adventure mode, where you can't break blocks, and at the start time you switch everyone to survival at once.

Getting ready

  1. Build a closed-off glass room around the world spawn. If you set respawn_radius to 0 in the setup guide, everyone appears exactly there.
  2. Type defaultgamemode adventure in the console. Players joining for the first time will now spawn in adventure mode.
  3. Check with whitelist list that everyone is on the list and make one more backup of the starting world from the Backups tab.

The moment of the start

Once everyone is online, run these in the console one after the other:

defaultgamemode survival
clear @a
effect clear @a
time set day
weather clear
gamemode survival @a
title @a title "GO!"

Everyone is now in survival and can smash the glass. For a countdown, use the same title line with the text "3", "2" and "1". Admins who aren't playing can be switched back afterwards with gamemode spectator Name.

Want to spread the group across the map instead? Then use this command after gamemode survival @a:

spreadplayers 0 0 200 2500 false @a

That puts all players at random spots within 2500 blocks of the center (0, 0), with at least 200 blocks between them. Keep the maximum range inside your world border.

Someone running late? Agree beforehand until when people can still join. After defaultgamemode survival, a latecomer simply joins in survival at spawn.

Handle deaths fairly

When someone dies, everything happens automatically on the technical side: the player becomes a spectator and the death message shows up in chat and in the console. What you handle as the admin is what happens next.

Check what happened

  • Every death is in the server log with a timestamp. Open logs/latest.log from the Files tab; older days are stored as compressed files in the same folder.
  • If someone says they died because of lag, check the TPS and tick times of the last few minutes right away with spark tps. If the TPS is locked at 20, it wasn't the server. How to read Spark is explained in fixing server lag with the Spark profiler.
  • If the server really stuttered or crashed, follow the rule you agreed on beforehand. Without an extra plugin, you can't restore a dead player's items on their own; restoring a backup rolls the world back for everyone.

Revives without arguments

  • Decide beforehand how many revives there are, what they cost and whether a revived player starts with an empty inventory.
  • Have the admin only carry out a revive once the group has seen the sacrifice, for example in voice chat or on Discord.
  • Technically it's a single command: gamemode survival Name, optionally followed by a tp to a safe spot. All variants, including with a revive or deathban plugin, are in reviving a dead player on a hardcore server.

When the admin is playing too

If the admin is playing as well, the group needs to be able to trust that they won't abuse their powers. Paper writes every command a player runs to logs/latest.log, and with the gamerule log_admin_commands (on by default; logAdminCommands on 1.21.10 and older) the results of OP commands end up in the log as well. Agree that every admin action gets reported in a Discord channel, and ideally have someone run the server who isn't playing.

Want death messages in Discord automatically? Link up DiscordSRV; then every death becomes a moment for the whole group.

Preventing cheating: the basics

On a server with friends, trust is your most important anti-cheat. These measures do make life a lot harder for cheaters:

  • Whitelist and online-mode. Keep white-list, enforce-whitelist and online-mode set to true. That way only real accounts from your group can get in.
  • As little OP as possible. Don't give anyone OP "to quickly fix something" without taking it away again afterwards with deop Name.
  • Block flying. Leave allow-flight=false (the default) in server.properties: survival players who keep hovering get kicked automatically.
  • Look into suspicious mining. With CoreProtect, /co lookup u:Name t:2d a:-block shows which blocks someone has broken in the last two days. A striking amount of diamond ore with little other stone mined says more than a gut feeling. See installing CoreProtect.
  • Anti-cheat plugins. If you're thinking about using one, test it with a few players before the season. A false alarm that kicks an honest player in the middle of a fight can cost a life in hardcore.

Paper's built-in anti-xray

Paper can hide ores from players until they're actually visible, so x-ray texture packs and mods don't get them very far. Set this in config/paper-world-defaults.yml:

anticheat:
  anti-xray:
    enabled: true
    engine-mode: 1

Then restart the server. Engine-mode 1 replaces hidden ores with plain stone and is the lightest setting for your server.

Performance with lots of players and during streams

On launch night and during the finale, everyone is online at once, often while a few players are streaming or recording. That's exactly when you want the server to stay locked at 20 TPS.

  1. Pre-generate the world. The biggest win, see step 5 of the setup guide. Players who explore then only load existing chunks.
  2. Choose your distances on purpose. In server.properties, view-distance determines how far players can see the world and simulation-distance how far out mobs, farms and redstone keep running. Good-looking recordings call for a decent view distance: start at 10 with simulation-distance 6, and drop view-distance to 8 if MSPT regularly goes above 40.
  3. Measure instead of guessing. spark tps shows TPS and MSPT; spark profiler start --timeout 300 records a five-minute profile while the lag is happening.
  4. Don't let spectators generate chunks. Set spectators_generate_chunks to false, as in the setup guide.
  5. Restart daily. Schedule a restart via schedules at a time when nobody's playing, and give a warning a few minutes beforehand with a say command in the same schedule.
  6. Keep farms in check. Lots of mobs and long hopper lines are the best-known causes of lag. Concrete settings are in the Spark article.

Recording and streaming

  • Never show the server address on screen. The whitelist keeps viewers out, but a known address can still attract unwanted attention.
  • Set hide-online-players=true in server.properties if you don't want outsiders to see who's online in the server list.
  • Agree that living players don't watch each other's live streams during the season, or that streamers broadcast with a delay.
  • Teams that want to talk privately can use a group in Simple Voice Chat.
  • A live map like BlueMap gives viewers and spectators an overview. By default it shows where players are, so be careful who you share the link with.

Build up to a finale with a shrinking border

Without a finale, a hardcore season often quietly fizzles out: the last players avoid each other and nobody logs in anymore. A shrinking world border forces them together, using nothing but vanilla commands. On Java 1.21.11 and newer (so 26.x too):

worldborder set 1000 259200s

This shrinks the border to a diameter of 1000 blocks over 259200 seconds, which is three real days. Note the s after the number: since 1.21.11 the command counts in ticks when there's no suffix, and the suffix d means in-game days of twenty minutes, not real days. On 1.21.10 and older you give the time in seconds without a suffix: worldborder set 1000 259200.

Announce the shrink well in advance so players can get their stuff out of the outer edge; outside the border they take damage. For the last night, an announced time and an arena around spawn work best. More options are in setting a world border.

Wrap up the season and save the world

  1. Announce the end. Post the date and time of the finale in Discord well in advance.
  2. Record the final standings. Write down who's still alive and take screenshots of the bases, or let BlueMap fully update the map one last time.
  3. Stop the server and make a backup from the Backups tab, with a name like end of season 1. With the server stopped, you know for sure everything has been saved. See creating a backup.
  4. Download the backup to your own computer or cloud storage, see downloading your backup. Only want the world? Then download the world folder via SFTP (on Paper 1.21.x and older, also world_nether and world_the_end).
  5. Free play (optional). Lots of groups keep the world open for a few more days afterwards without season rules, so the players who were eliminated early can still build. Take everyone out of spectator with gamemode survival @a.

Opening the world again later

Want to run the world again later? Restore the backup on a server with restoring a backup or upload it with uploading a world. Want to open the world in singleplayer? On Paper 1.21.x and older, the Nether and the End are stored in the separate world_nether and world_the_end folders; those won't automatically be part of your singleplayer world.

Starting a new season

  • Start with a fresh world: stop the server and delete the world folders, see resetting your world. That also wipes every player's inventory, spawn point and progress.
  • Pick a new seed via changing your world seed and leave hardcore=true on, so the new world is created as hardcore too.
  • If you use CoreProtect, also delete plugins/CoreProtect/database.db while the server is stopped. Otherwise the old log entries point to coordinates in a world that no longer exists.
  • Then set the world border again, pre-generate the world and make a starting backup, as in the setup guide.

Looking for a server for your next season or a bigger package for a bigger group? Check out start a hardcore SMP, or our page for a regular SMP server if you want a season without permadeath.

Need help?

Ask Noddy first, the AI assistant in the game panel. Noddy can help with things like an error message in the console, a plugin that won't load or a command that doesn't do what you expect. If you can't figure it out together, open a ticket via our support page and include a link to your Spark report if it's about lag.