Mixed
Mixed is a public website for your PGM (minigame-style) servers - think capture-the-flag, skywars, and similar rotating-map game modes. A companion server plugin called zander-pgm sends match results and live game data to your website as they happen, and Mixed turns that into a full stats site for your players: a live "what's happening right now" dashboard, match history, a browsable list of maps (kept in sync automatically from your map files on GitHub), player profiles, leaderboards, achievements, in-game map voting, after-match map ratings, and a store where players spend Map Tokens to nominate, boost, or sponsor maps they want to see played.
📸 Screenshot: The Mixed live match dashboard showing an in-progress match with player stats
Mixed is just for stats, maps, voting, and player engagement - it doesn't handle moderation, punishments, bans, or chat tags. Those are managed elsewhere in Zander.
Public Pages​
| Page | What It Shows |
|---|---|
/mixed | Landing/overview |
/mixed/live | Live match dashboard (real-time via Server-Sent Events) |
/mixed/matches | Match history and match detail |
/mixed/maps | Map browser and map detail - ratings, feedback, win-rates, vote/token history |
/mixed/players | Player browser and profiles |
/mixed/leaderboards | Leaderboards by category |
/mixed/achievements | Achievement list |
/mixed/servers | Live PGM server status |
/mixed/vote | Current map vote |
/mixed/map-tokens, /mixed/store | Map Token balance/history and the Stripe-powered token store |
/mixed/servers is not the same as the site-wide Servers directory - this page shows live PGM match-server status, while Servers is a static list of connect addresses for /play.
Any player who has linked their Minecraft account can vote for the next map from the website (if you've turned on web voting), leave one rating per match with optional feedback after playing, and earn or spend Map Tokens in the store. When a player spends a token to nominate, queue up, or sponsor a map, that request is carried out on the actual server by the plugin - and if it doesn't go through for any reason, the player automatically gets their token back.
For Staff​
Dashboard root: /dashboard/mixed, gated behind the zander.web.mixed permission node.
📸 Screenshot: The Mixed admin dashboard overview with map-sync status and recent match activity
From the admin section, staff can:
- Edit map metadata/overrides and upload thumbnails
- Start, end, or cancel votes, and tune duration, cost, and cooldown
- Review, hide, delete, or reset map ratings and feedback
- Grant or remove Map Tokens, and refund or cancel pending requests
- Trigger or inspect map-repository syncs, including per-source runs and error detail
- Manage rank sync and entitlements
You don't need to enter map details by hand - Zander automatically pulls map information from your configured GitHub repositories once an hour, and you can also trigger a sync manually whenever you want.
Architecture Notes​
This section is technical background for developers, not something admins need to configure. Mixed is built the same way as other Zander modules: a data layer, public web pages, an admin dashboard section, and a set of behind-the-scenes data endpoints. What's unique to Mixed is how it receives data - the zander-pgm plugin sends match info to your website using the same site-wide API key every other server plugin uses (there's no separate key just for Mixed, and it's never visible to players in their browser). Match events (server status, match start/end, kills, objectives, votes, ratings, and map requests) get saved and instantly pushed out to live-update the /mixed/live and /mixed/vote pages as they happen.
Map Token purchases and Supporter perks go through the same Stripe payment processing used elsewhere on the site, built so that a payment notification that gets delivered twice by accident can never grant a player double tokens.
Mixed's rank-sync feature writes into the same LuckPerms tables covered in Permissions - see that page for the LuckPerms side of rank management.
Feature Toggle​
"mixed": true
Disabling features.mixed (setting it to false) gates the entire public section, the dashboard section, and the ingestion/public API.