HardcoreMP
One world. One group. One shared pool of lives.
What is HardcoreMP?
HardcoreMP turns your server into a shared hardcore run. Everybody plays the same world and everybody shares the same lives. When the group runs out of them, the overworld, the nether and the end are wiped and a brand new world is generated with a random seed.
No Multiverse. No world manager. No manual setup. The plugin creates, links, backs up and deletes its own worlds.
Features
- Shared hardcore mode — one world, one group of players, one run for everyone.
- Lives system — decide how many deaths the group gets before the world resets. Lives survive server restarts.
- Random world generation — every run gets a brand new random seed.
- Async generation — worlds are prepared in the background, the server never freezes.
- Limbo world — while the new world is generated, players wait in an internal void world in spectator mode instead of being kicked.
- Built-in dimension linking — nether and end portals (players and entities) are routed to the session worlds. Multiverse is not needed.
- World backups — old worlds are zipped into
plugins/HardcoreMP/old_worlds/before being removed, or deleted straight away if you prefer. - Crash-safe state — the run (seed, lives, reset counter) is stored in
data.yml, so a restart is never mistaken for a world reset. - Offline player handling — players who were offline during a reset are detected and optionally cleaned up when they return.
- MOTD integration — the server list shows whether the world is ready.
- Fully translatable — every single message lives in
lang.yml. - Developer API — force resets and listen to
GameWorldResetEvent.
How a run works
- Startup. The plugin loads the recorded run from disk. If there is none, the worlds are generated in the background while players wait in the lobby.
- Playing. Once the worlds are ready, everyone is moved into the shared hardcore session: overworld, nether and end, all linked to each other.
- A death. The group loses one life. Players in the bypass list do not cost a life, and deaths in the lobby never count.
- No lives left. Everyone goes to spectator mode in the limbo, the worlds are archived, a new world is generated with a random seed, and everybody is teleported into it with fresh stats.
Commands & permissions
Aliases: /hcmp, /hardcoremp, /hmp — all of them require hardcoremp.command.
/hcmp help— show the command list./hcmp info— seed, difficulty, your position, spawn, time, weather, world type and remaining lives./hcmp reload— reloadconfig.ymlandlang.ymlwithout restarting.
Configuration
setting:
# Name of the lobby-world
lobby-world: "world"
# Delete old worlds folder after reset (false = keep a zipped backup)
remove-old-worlds: true
# Change motd of the server
motd: true
# The list of players whose deaths do not cost a life.
user-bypass-list: []
# If this is set to true, players who were offline while the world was reset
# lose their inventory when they join again
offline-player-inventory-clear: true
# Lives a new game starts with
max-lives: 3
Every message, title, MOTD and help line is editable in lang.yml, with colour codes and placeholders such as {player}, {lives}, {max-lives} and {seed}.
Your data is safe
HardcoreMP is deliberately conservative about deleting things:
- If the world on disk does not match the recorded seed, it refuses to regenerate and tells you how to fix it, instead of silently starting a new game and emptying everybody's inventory.
- Folders that are not the world being reset — your world container, your lobby world — are never touched.
- Old world folders are moved aside atomically before being zipped or deleted, so a failed cleanup can never leave a "reset" that reloads the old world.
- Inventories are only cleared using the reset counter stored on the player, never using timestamps.
Requirements
- Spigot / Paper 1.20+
- Java 8 or newer
- No dependencies
Developer API
// Current session (overworld, nether, end, lives, creation time)
GameSession session = HardcoreWorldControl.getGameSession();
// Status of the game world: READY, GENERATING, REGENERATING, ...
WorldStatus status = HardcoreWorldControl.getStatus();
// Force a world reset
HardcoreWorldControl.regenGameWorld();
// React to the end of a reset
@EventHandler
public void onReset(GameWorldResetEvent event) {
World newWorld = event.getGameWorld();
}
Available through JitPack: https://jitpack.io/#cykvta/HardcoreMP
Links & support
- Source code: https://github.com/cykvta/HardcoreMP
- Bugs & feature requests: GitHub issues
- Metrics: bStats (anonymous, can be disabled in
plugins/bStats/config.yml)
Enjoying the plugin? Leave a review — it really helps.
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta