โจFeatures
Modern BedWars is a horizontally scalable BedWars core. Everything player-facing โ GUIs, prices, timings, physics constants, cosmetics and every string โ is YAML/properties, not compiled into the jar.
Why it's different
Horizontally scalable โ add lobby or game servers without touching the rest of the network's config.
Fully config-driven โ reskin GUIs and retune the whole game without a rebuild.
Multi-language out of the box โ per-player locale detection with automatic English fallback; add a language by dropping in a file.
Multi-version โ the game plugin runs on both Minecraft 1.8 and 26.1+.
Admin console included โ a live shell on the matchmaking service for queue / server / match inspection and map reloads.
Gameplay systems (game server)
Match lifecycle
Each game runs through WAITING โ STARTING โ PLAYING โ RESTARTING phases. Game modes are Solo, Duo, Trio and Squad, each with independently tunable shop prices, upgrade prices and generator schedules.
Teams & beds
Each team has a colour, a shared shop inventory, a base region and its own bed.
Breaking a team's bed eliminates it โ remaining members become spectators, and a configurable bed-break cosmetic and message fire. The breaker is credited with a final kill on the last elimination.
The post-respawn invulnerability window is configurable (default ~3s).
Shop
Categorised GUI (blocks, swords, armor, tools, bows, potions, special) driven by
shop.yml, with per-game-mode pricing (solo/duo vs trio/squad tiers).Team-shared resource counters (iron, gold, diamond, emerald).
An armor-hierarchy guard prevents accidentally buying a downgrade.
Hotbar quick-buy for instant re-purchase without opening the GUI, plus a shop reset confirmation dialog.
Generators
Resource types: Iron, Gold, Diamond, Emerald, plus the team-upgraded Emerald Forge.
Spawn delay, cap and batch size are configured per game mode and per upgrade level in
generators.yml.
Team upgrades
Single-purchase upgrades (Sharpened Swords, Reinforced Armor, Heal Pool / Beacon) and multi-level ones (armor IโIV, haste pickaxe IโII, forge), priced per game mode.
Grants persistent team-wide enchantments and effects for the rest of the match.
Traps
Configurable trap catalogue โ shipped defaults include Tripwire (blind + slow attackers), Feather (speed + jump for defenders), Alarm / Redstone Torch (reveals invisible intruders) and Mining Fatigue.
Each trap has a configurable potion effect, duration and target (attacking team vs defending base).
A magic-milk cooldown (default ~30s) grants temporary trap immunity after triggering one.
Cosmetics
Categories: arrow trail, fireball trail, victory dance, final-kill effect, kill message, bed-break effect, bed-break message, wood skin.
Players unlock/purchase cosmetics with in-game currency; unlocks and active selections persist in MariaDB.
A master on/off toggle plus global particle-count and effect-duration multipliers let admins tune visual load without touching individual cosmetics.
Paginated selector GUI.
Disguise
/disguise(game + lobby) backed by a disguise service, tracked in Redis so state follows the player across servers.
Scoreboard
Configurable per-phase sidebar; refresh rate is tunable to trade live-ness for tick performance on loaded game servers.
Lobby systems
Queueing โ players join a mode queue; the matchmaking service does the actual matchmaking and tells the lobby to connect them.
Private games โ
/privateto host a custom match,/jointo enter one by code.Rejoin โ
/rejoinreturns a disconnected player to their in-progress match, tracked via Redis rejoin keys with a TTL.Spectate โ
/spectateto watch a running match.Profile & stats โ
/profileand/statsshow win/loss/kill/final-kill records from MariaDB.Leaderboards โ cached and periodically refreshed, with a reset job for seasonal resets.
Configurable GUI layout โ slot positions, page size and strings for the lobby GUIs are de-hardcoded; reskinning doesn't require a rebuild.
PlaceholderAPI โ optional soft dependency exposes
bedwars_*placeholders (rank, coins, level, stats).
Proxy systems
Routing โ recognises lobby vs game servers by configurable name prefixes and returns players to the lobby (or their match, via rejoin) on disconnect.
Party system โ
/partywithchat,invite,join,kick,leader,leave,list, built on a Redis-backed party model shared across the network.Multiplier admin โ an XP/coin multiplier command for events and promotions.
Spectate โ cross-server
/spectateentry point.
Matchmaking brain (service)
A standalone Spring Boot process โ no Minecraft server required, just a JVM with network access to Redis and MariaDB.
Queue processing โ one queue per game mode; runs a matchmaking pass on a tunable interval, steals players from under-filled queues, and times out players who wait too long.
Server rancher โ tracks live game servers, recomputes player load on an interval, and enforces a max-matches-per-server cap so no single instance gets overloaded.
Play-again cooldown โ a short cooldown + cache to stop
/playagainabuse from hammering the queue.Map distribution โ loads and broadcasts the map list to all game servers over Redis.
Admin console โ a Spring Shell prompt (
status queues,list matches,list servers,maps reload,log,stop) plus an Actuator health endpoint.
Party system
Two layers, selected automatically:
Built-in โ Redis-backed, managed on the proxy via
/party, with GUI support on the lobby.External plugin adapters โ if Party and Friends or Parties (AlessioDP) is installed, it's detected at startup and takes over as the read-only source of truth for party membership; the built-in
/partycommand is automatically suppressed so there's no conflict. Queueing and party-follow-on-server-switch keep working either way.
Last updated