Sueta

HardcoreMP | Hardcore Together | Coop

1.0.4

If one player dies, the entire world is deleted

·Plugin

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

  1. 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.
  2. Playing. Once the worlds are ready, everyone is moved into the shared hardcore session: overworld, nether and end, all linked to each other.
  3. A death. The group loses one life. Players in the bypass list do not cost a life, and deaths in the lobby never count.
  4. 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 — reload config.yml and lang.yml without 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

Enjoying the plugin? Leave a review — it really helps.

Similar projects

Plugin →