Configuration
ShadowGames
Thirty-two minigames on one engine, fourteen arenas playable tonight.
Where the files are
plugins/ShadowGames/ The plugin creates them on first start and updates them by itself on new versions, keeping your changes.
Applying changes
/sg reload [what] Reloads the files without restarting the server.
No setting found
Try another word, or search every plugin.
Settings
The files that decide how the plugin behaves. Start here.
config.yml
General settings 199 settings
config.ymlplugins/ShadowGames/config.yml File notes
Only the server-wide settings live here. Everything else has its own file:
games/<game>.yml the rules of one game arenas/<game>/<id>.yml one map kits/<game>/<id>.yml one kit shops/<game>.yml one shop lang/<locale>.yml the translations chatgames.yml the chat games: questions, words, prizes schematics/ your builds
THE THREE-LEVEL RULE
Almost every value can be written in three places, and the most specific one wins:
config.yml (here, under "defaults") -> every game games/<game>.yml -> that game arenas/<game>/<arena>.yml -> that map
A value left out does NOT mean zero: it means "inherit". /sg config <key> tells you where a value actually comes from.
COLOURS - written the Minecraft way, with &
&0-&9 &a-&f colours &l bold &o italic &n underline &#ff8800 an exact colour &r back to normal && a literal ampersand
The richer tags are still there for what & cannot do:
<gradient:#FFD700:#FFA500>GOLD</gradient> <click:run_command:'/play skywars'>play</click>
UPDATES: when a new version changes this file, chatgames.yml, or one in lang/, games/, kits/, shops/, cosmetics/, achievements/, music/, import/ or parkour/, it is moved to the new version for you. Everything you changed or added is carried over; the settings you never touched take the new defaults. Your previous file is kept in backup/<date>/, and if something could not be carried over (an option that no longer exists, a value of a different kind) you find it in PORTING-<version>.txt, with what to do. Arena files are not updated: they stay as they are.
Full documentation: docs/
config-version1core5 keysserver-id"games-1"Identifies this server when several servers share one database.
server-ip""Shown at the bottom of the sidebar through %server_ip%.
Empty on purpose. The alternative was shipping a made-up address and letting it be read by the players of everybody who installs this: a sidebar that advertises somebody else's server. While it is empty the line is not drawn at all, so nothing looks broken - write yours in and it appears.
language"en_US"The language used when no better one is known. The plugin ships en_US and it_IT; add a file to lang/ for any other.
follow-client-localetrueEvery player sees their own client language, when that file exists.
update-checktrueStorage
Nothing to do: on first start a local H2 database appears in data/shadowgames.mv.db. No user, no password, nothing to install.
If you have a MySQL and prefer it, set enabled: true and fill the fields. The tables create themselves on the first connection.
storage5 keysstorage.mysql7 keysenabledfalsehost"127.0.0.1"port3306database"shadowgames"username""password""storage.mysql.properties3 keysuseSSLfalsecharacterEncoding"utf8mb4"serverTimezone"UTC"storagetable-prefix"sg_"Table prefix. Useful when several servers share one database.
fallback-to-localtruetrue -> if MySQL does not answer, fall back to H2 and say so in the console.
A server that plays without saving beats a server that will not start.
false -> if MySQL does not answer, the plugin refuses to start.use-suite-databasefalseIf ShadowEssentials is installed and uses a database, we can share it: one pool, one backup, and the prefix keeps the tables apart.
storage.pool6 keysmaximum-size10Rule of thumb: (CPU cores * 2) + 1, never above 20.
minimum-idle2connection-timeout10sidle-timeout10mmax-lifetime30mleak-detection0sAbove 0 it logs connections that never come back to the pool.
Lobby
lobby6 keyslocation""Where a player lands when they leave a match. Empty = the main world spawn. /sg lobby sets it where you stand.
use-shadowessentials-spawntrueWhen ShadowEssentials is present we ask it for the spawn instead of repeating it here.
locations{ }Several lobbies, each with a name. A server outgrows a single spawn point fast: one lobby with a parkour in it, a plain one for events, one per game so that leaving BedWars puts you back among the BedWars signs and not in the middle of the hub.
You set them by standing there: /sg lobby set <name> "main" is the one everything falls back to when nothing else is said.
per-game{ }Which lobby someone leaving a given game returns to. With no line here, "main" is used.
lobby.parkour3 keysThe lobby parkour courses: something to do while the countdown runs. They are not matches, they are furniture -- always there, and stepping off one costs nothing.
You build them by walking them, not by typing coordinates:
/sg parkour set <id> start /sg parkour set <id> checkpoint (at every landing) /sg parkour set <id> finish
enabledtruefolder"parkour"particlestruelobby.waiting-items4 keysWhat a player holds while waiting for the start.
lobby.waiting-items.02 keysmaterialCOMPASSname"lang:lobby.item.team"lobby.waiting-items.12 keysmaterialCHESTname"lang:lobby.item.kit"lobby.waiting-items.72 keysmaterialPAPERname"lang:lobby.item.vote"lobby.waiting-items.82 keysmaterialRED_BEDname"lang:lobby.item.leave"Values every game inherits
Every game and every arena can override them.
defaults11 keyscountdown30scountdown-full10sWhen the arena is full the countdown drops to this.
grace-period10sNo PvP for the first seconds: a bad spawn landing should not lose the game.
max-duration20mA hard ceiling. A match that never ends is worse than one that ends badly.
end-duration10sHow long the end screen stays up.
allow-rejoin60sReconnect within this and you are back where you were.
respawn-delay3sassist-window10sFor how many seconds after a hit a death still counts for whoever landed it. This is how "knocked into the void" becomes a kill.
friendly-firefalsebuildtruelives1Match worlds
Every match gets its own world, created empty and filled from schematics. A reset is deleting a folder, not rolling anything back.
worlds10 keysprefix"sg_"Prefix for match worlds. Do not use it for worlds of your own.
max-concurrent-matches20How many matches may run at once across the whole server.
max-instances-per-arena4How many instances of the same arena may run at once.
preload-instances1With 1, the world for the next match is ready in advance: nobody ever waits for a paste.
delete-on-closetrueclean-orphans-on-starttrueIf the server crashed leaving sg_* worlds behind, delete them at startup.
difficultyNORMALview-distance8An arena fits in a few hundred blocks: 12 chunks of view distance would be wasted.
simulation-distance5worlds.gamerules9 keysThe gamerules of the match world.
Keep reading
In Minecraft 26.2 they were ALL renamed: doDaylightCycle became advance_time, doMobSpawning is spawn_mobs, announceAdvancements is show_advancement_messages, and so on. Here you may write the old name or the new one: the engine translates, and if it truly does not know a name it says so in the console instead of ignoring it in silence.
Silence would be the worst outcome: it would mean mobs spawning in the middle of a SkyWars and the sun moving, with no log line explaining why.
doDaylightCyclefalsedoWeatherCyclefalsedoMobSpawningfalsedoFireTickfalsemobGriefingfalseannounceAdvancementsfalsenaturalRegenerationtruekeepInventoryfalsedoImmediateRespawntrueSchematics
schematics6 keysfolder"schematics"paste-budget4000Blocks placed per tick during a paste. Higher = faster and heavier. Look at /sg profile before pushing it above 8000.
slow-down-below-tps18.0If the server drops below these TPS the budget halves itself, and goes back to normal once the server breathes again.
cachetrueSchematics stay in memory once read: twenty matches, one read.
cache-size32cache-ttl30mIn-game setup
setup2 keyswandEND_RODparticle-range48How far the marker particles are visible. Only somebody in a setup session sees them, and only within this radius.
HUD
hud3 keyshud.scoreboard3 keysenabledtrueonly-in-matchestrueA player has one sidebar. With true we only use it inside matches and leave the lobby to ShadowEssentials.
update-ticks10hud.bossbar1 keyenabledtruehud.tablist5 keysenabledtrueheader["&b&lSHADOW&f&lGAMES", "&7%game_name% &8| &f%arena_name%"]+1
group-by-teamtruespectators-lasttrueQueues and map choice
matchmaking4 keysarena-selectionLEAST_PLAYEDWEIGHTED_RANDOM | LEAST_PLAYED | ROTATION | VOTE
LEAST_PLAYED is the one to pick: it is the only one that makes the work of your map builders visible. Weighted random will happily show the same three maps all evening.
prefer-emptyfalseOn a small server it pays to fill one match at a time.
min-fill-before-new-instance0.5Do not open a new instance while one sits below this percentage.
merge-waitingtrueMerges two waiting matches when they fit together.
vote3 keysenabledtruecandidates4change-allowedtruequeue3 keysenabledtrueshow-progresstruemax-wait10mauto3 keysrejoin-same-gametrueWhen a match ends another starts on its own: that is what keeps a server alive.
rejoin-delay5sback-to-lobby-on-quittrueParties
If the server already has a party plugin, AUTO uses that one.
party7 keysproviderAUTOmax-size8invite-timeout60sall-or-nothingtrueA party joins as one block: everyone, or nobody.
keep-togethertrueAnd stays on the same team, when it fits.
offline-grace2mA client crash must not break the group up.
chat-prefix"&d[PARTY] "Spectators
spectator5 keysgamemodeSPECTATORSPECTATOR | ADVENTURE_INVISIBLE ADVENTURE_INVISIBLE is for servers where seeing through walls counts as too much of an advantage even for a dead player.
night-visiontrueconfinedtruemax-distance300spectator-chattrueRewards
Game coins are kept apart from the server economy, on purpose.
rewards8 keysenabledtrueeconomy-bridgefalseWith true, every game coin also mints real currency.
economy-bridge-rate0.1currency"default"vip-multiplier-perk"games.reward-multiplier"Perk read from ShadowEssentials; without it, from the shadowgames.perk.* nodes
global-multiplier1.0A permanent multiplier, for servers that want fast progression.
announce-multipliertrueforfeit-on-quitfalseDoes leaving early lose what you earned? No: punishing somebody whose client crashed is unfair.
economy1 keyfree-when-missingtrueWith no economy installed: true = paid kits become free, false = they stay locked.
progression3 keysenabledtruexp-curve"500 * level ^ 1.15"How much experience level N costs.
max-level200Mobs and bosses in arenas
An arena can have creatures: place the MOB_SPAWN markers and write here, or in the game file, or in the arena file, what they are. The parameter written on the marker is the key.
Keep reading
The id can come from any installed plugin:
mythicmobs:SkeletalKnight MythicMobs elitemobs:BossName EliteMobs zombie vanilla
LevelledMobs, InfernalMobs and the like need no call: they listen for a vanilla mob spawn and dress it themselves. Spawning "zombie" is enough.
mobs2 keysenabledtruespawns{ }The real entries usually live in the game or the arena file. Below is a commented example of the shape.
guardian:
id: "mythicmobs:SkeletalKnight"
amount: 1
level: 1
name: "&cGuardian"
glowing: true
respawn: 30s # 0 or absent = never comes back
reward: { coins: 25, xp: 10, commands: [] }
boss:
id: "mythicmobs:BlackDragon"
name: "&4&lTHE DRAGON"
glowing: true
boss-bar: true
boss-bar-color: PURPLE
reward: { coins: 500, xp: 250 }Music
Tracks live in music/<name>.yml. There are two kinds and they live together, because each solves what the other cannot:
Keep reading
- NOTE BLOCK MELODY: the notes written in the file, played with the sounds every client already has. No resource pack, nothing to download, works straight away for everyone.
- RESOURCE PACK SOUND: real audio, any length. But a plugin cannot send audio to a client: the file has to sit in a pack the server hands out. See music/custom-pack-example.yml.
Everything goes through the RECORDS channel, so somebody who turns the "music" slider down turns ours down and not the game sounds they need in order to play.
music2 keysenabledtruefolder"music"Cosmetics
Effects you can see and nothing more. The rule is strict on purpose: a cosmetic cannot give damage, speed, invisibility or any advantage at all, and the parser gives it no way to even write one. They are files like kits, in cosmetics/<type>/, with the same unlock rule.
cosmetics3 keysenabledtruefolder"cosmetics"trail-every-ticks2How often a walking trail is drawn, in ticks. 2 is smooth, 4 is half the cost and nobody notices. A trail is never drawn for a player standing still.
Network (several servers)
Only needed to split the minigames across servers: SkyWars on one, BedWars on another, a lobby in front of them all.
Keep reading
The ONLY thing the servers share is the database. There is no master, no socket, nothing to keep in sync: every server writes what it is and what it is doing every few seconds, and reads what the others wrote. A server that dies stops writing and drops off the list, and nobody has to notice.
REQUIRED: a shared storage.mysql. H2 is a file opened by one process only: two servers pointing at it share nothing, they break it. Turn the network on with H2 and the plugin says so and turns it off.
The proxy (Velocity or BungeeCord) is only there to move players. Without one the network still works: stats, leaderboards and tournaments stay shared, but /play cannot send you elsewhere.
network7 keysenabledfalseroleGAMESGAMES = hosts matches (the default) LOBBY = selector, signs and NPCs only: every /play starts here NONE = shares the stats only
display-name"server-1"What this server is called IN THE PROXY. It has to match the name written in velocity.toml or the Bungee config.yml, or the transfer arrives nowhere. The real id is core.server-id.
capacity00 = use the server's max-players
heartbeat5sstale-after20show long a silent server waits before it counts as dead
ticket-life60show long a transfer "ticket" stays valid
Ranked
An Elo rating per game, with divisions and seasons. Turned on one game at a time (ranked.enabled inside games/<game>.yml), because it only makes sense where skill decides the result: a ranked Block Party is a lottery with a number attached.
ranked9 keysenabledtruestart-rating1000k-factor24How much one match weighs. Higher = you climb and fall quickly. For the first 10 matches it is tripled, so the initial placement is fast; above 1600 points it drops, because the population at the top is thin and the climb must not come down to luck.
min-players2match-window150How far apart two players may be and still share a match. The window widens by 50 points every 10 seconds of waiting: a perfect match that never starts is worse than a slightly uneven one.
match-window-max800decay-grace14dDecay for inactivity: without it the top of the leaderboard fills up with people who stopped playing.
decay-per-day2ranked.divisions8 keysbronze{ display-name: "lang:content.division.bronze", minimum: 0, icon: COPPER_INGOT, color: "&8" }+3
silver{ display-name: "lang:content.division.silver", minimum: 900, icon: IRON_INGOT, color: "&7" }+3
gold{ display-name: "lang:content.division.gold", minimum: 1100, icon: GOLD_INGOT, color: "&6" }+3
platinum{ display-name: "lang:content.division.platinum", minimum: 1300, icon: DIAMOND, color: "&b" }+3
diamond{ display-name: "lang:content.division.diamond", minimum: 1500, icon: DIAMOND_BLOCK, color: "&3" }+3
master{ display-name: "lang:content.division.master", minimum: 1750, icon: NETHERITE_INGOT, color: "&5" }+3
champion{ display-name: "lang:content.division.champion", minimum: 2000, icon: NETHERITE_BLOCK, color: "&c" }+3
legend{ display-name: "lang:content.division.legend", minimum: 2300, icon: NETHER_STAR, color: "&e" }+3
Tournaments
A tournament match is an ordinary match: same arenas, same games, same rules. The tournament only decides who is in it and what to do with the result -- which is why all 32 games can be played as a tournament without any of them knowing what a tournament is.
tournaments4 keysenabledtruemin-entrants4between-rounds30stournaments.reward3 keyscoins5000xp2000commands[ ]Achievements
Thresholds on stats that already exist. Files in achievements/<game>/, or achievements/global/ for the ones that count across every game.
achievements3 keysenabledtruefolder"achievements"broadcasttrueAnnounces to the whole server the final tier of an achievement with broadcast: true. The tiers in between are never announced.
Import
The reader maps for other plugins live in import/. They are ordinary files: fix them, add to them, delete them.
import1 keyfolder"import"Stats
The thresholds below exist for one reason: without them two players can farm wins by starting and abandoning a match every twenty seconds, and every leaderboard on the server becomes meaningless.
stats3 keysmin-duration30smin-players2autosave5mPeriodic save: a long match that crashes must not wipe out an hour of play.
leaderboards4 keysrefresh5mhologram-refresh1mHow often the /sg holo holograms are rewritten. They read the cache above, not the database: ten leaderboards cost ten strings.
cache-size64ignore-inactive-after90dProtection
Inside a match world there is nothing to configure: these are engine rules, not region flags.
protection4 keysdeny-outsiderstrueAnyone not in the match touches nothing inside a match world.
original-blocks-unbreakabletrueThe arena's original blocks cannot be broken, the ones players placed can. The engine knows because it records what was placed.
block-external-teleporttrueA player in a match takes no teleport from other plugins.
allowed-commands[/leave, /esci, /games, /giochi, /gstats, /gtop, /party, /p, /pc, /msg, /r, /tell, /spectate, /spec, /gkit, /shop]+13
Every other command is blocked during a match. A whitelist on purpose: there is no way to list every command of every plugin that might heal, hand out items or teleport.
Join signs
A sign with [SG] on the first line and the game name on the second.
signs4 keysenabledtrueWhen off they do not update and right-clicking does not join.
update1sHow often they are rewritten. A sign is only rewritten when something changed, so even 10t on a wall of signs costs nothing.
signs.lines6 keysThe four lines, one list per match state. A sign line holds about fifteen characters: these fit.
Keep reading
%game_name% game name %players% players in it right now %game_short% short game name %max% total slots %game_id% id (skywars, oitc) %min% how many to start %arena_name% arena name %free% free slots %state% state (WAITING, ...) %alive% still alive %state_name% state in words %spectators% who is watching %countdown% seconds to the start %time_left% time left to the end %time% seconds to the start if starting, play time if running
The full name of some games does not fit ("One in the Chamber" is wider than a line): signs use %game_short%, menus use the whole name.
WAITING["lang:content.sign.waiting.top", "&f%game_short%", "&7%arena_name%", "lang:content.sign.waiting.bottom"]+3
COUNTDOWN["lang:content.sign.countdown.top", "&f%game_short%", "lang:content.sign.countdown.seconds", "lang:content.sign.countdown.bottom"]+3
PREPARING["lang:content.sign.running.top", "&f%game_short%", "&7%arena_name%", "lang:content.sign.preparing.bottom"]+3
RUNNING["lang:content.sign.running.top", "&f%game_short%", "lang:content.sign.running.time", "lang:content.sign.running.bottom"]+3
ENDING["lang:content.sign.ending.top", "&f%game_short%", "&7%arena_name%", "lang:content.sign.ending.bottom"]+3
RESETTING["lang:content.sign.resetting.top", "&f%game_short%", "&7%arena_name%", "lang:content.sign.resetting.bottom"]+3
signs.block-behind6 keysWAITINGLIME_CONCRETECOUNTDOWNYELLOW_CONCRETEPREPARINGRED_CONCRETERUNNINGRED_CONCRETEENDINGGRAY_CONCRETERESETTINGGRAY_CONCRETEPerformance
The guards below protect the server from itself. See docs/22-PERFORMANCE.md
performance3 keysprofilertrueperformance.entities4 keysitem-despawn60sMore aggressive than vanilla, on purpose.
arrow-despawn10smax-per-match400remove-below-y-32performance.guards3 keysslow-tps18.0Below these TPS the engine defends itself.
critical-tps15.0slow-hook-millis50A game hook slower than this gets logged.
bStats (anonymous usage statistics, https://bStats.org)
What is sent, every 30 minutes: a random server id (serverUuid, not derived from anything), the plugin version, the Minecraft/Paper and Java versions, the operating system and core count, the online mode, how many players are online (a number only) and the licence tier (free/premium/creator). NO player data: no names, no UUIDs, no addresses, no stats. Nothing is sent while the plugin waits for a licence. false switches off this plugin only. enabled: false in plugins/bStats/config.yml switches off every bStats plugin on the server at once.
metrics1 keyenabledtrueLicence
With no key the plugin runs the free edition: the whole engine, five games, size limits. A signed key unlocks everything. The key does NOT go here: it goes in license.yml, which appears on first start, so a config shared for support does not carry it along.
license3 keysTHE KEY LIVES IN license.yml (same folder as this file), or in the central plugins/ShadowControl/licenses.yml for the whole suite. The 'key' below is only a fallback for deploy systems that generate config.yml: leave it empty.
The key does NOT live here: it lives in license.yml, in this folder, written at first start (or in plugins/ShadowControl/licenses.yml for the whole suite). Only if you would rather keep it in the config than in license.yml. The SHADOWGAMES_LICENSE environment variable and the system property -Dshadowgames.license=... work as well.
grace-days7Days of grace before falling back to free when a subscription expires or when the server address does not match the licence.
resolve-public-iptrueOne call, at startup, to the licence service (activation-url + /ip) to learn this server's public address: behind NAT it is the only way to recognise it. If you turn it off and the licence is bound to a domain, lean on the grace period. Only when a licence is installed: a server without a key asks nobody. false = never ask.
activation-url'https://shadow-licences.riccardobotins.workers.dev'Activation service, optional. This is the BASE address: the plugin appends /claim and /check itself.
Keep reading
Leave it empty and the check is fully offline, with the key pasted in by hand. If you set it:
/sg license claim <code> the server asks for the licence itself,
already bound to its own addresses
every 15 minutes re-checks that it was not withdrawnIt is also the only way to count seats and to revoke a key the same day. See docs/38-LICENZA-E-VERSIONI.md
chatgames.yml
Chatgames 60 settings
chatgames.ymlplugins/ShadowGames/chatgames.yml File notes
Chat games: every few minutes the chat gets a small contest and the first player to type the right answer wins.
trivia a question, one or more accepted answers
math a sum to work out: + - x /, always a whole result
unscramble a word with its letters shuffled
type-fast a word or a code to copy, first one wins
reverse a word to write backwards
fill-in a word with some letters hidden
guess-number a secret number; each guess is told, privately,
"higher" or "lower"WHAT PLAYERS READ lives in lang/<locale>.yml under "chatgames": the start lines, the winner line, the title and the sound. Empty a key to turn that part off, as with every other message of the plugin.
ONE TEXT, SEVERAL LANGUAGES. A question, an answer or a word can be written once:
question: "Which mob explodes?"
or once per language:
question: { it: "Quale mob esplode?", en: "Which mob explodes?" }Each player reads the language of their client (or the server's), and may answer in ANY of the languages written. A language missing from a text falls back to the server language, then to English.
ANSWERS are compared without caring about capitals, accents, apostrophes, double spaces and a final full stop: "Citta'", "citta" and the accented one are the same answer.
REWARDS are written exactly like the rewards of a game (games/<game>.yml):
rewards:
coins: 25 ShadowGames coins
xp: 50 ShadowGames experience
money: 100 server money: ShadowEconomy or Vault.
Without an economy it is skipped (the
console says so once), the rest is paid.
tokens: ShadowEconomy currencies by id, the event
event_token: 2 token included. Needs ShadowEconomy.
items: the item syntax of kits and shops;
- "DIAMOND:2" custom items too: "itemsadder:ruby",
- { material: "oraxen:ruby", name: "&cRuby" }
"nexo:...", "oraxen:...",
"shadowcustomizer:<id>", ...
A full inventory drops them at the feet.
commands: run by the console, %player% = winner
- "say %player% is quick!"
message: "&aExtra line for the winner"
sound: "entity.player.levelup"The most specific block wins, and replaces the others (no mixing):
a trivia question / a math level > the type > this file.
"rewards: {}" means "nothing" on purpose; no "rewards" key means "inherit".
Commands:
/chatgames the current game again, or when the
next one comes
/chatgames toggle|on|off hide or show chat games (saved)
/sg chatgame start [type] start one now (also /chatgames start)
/sg chatgame stop|list|reload
Permissions: shadowgames.chatgames.play (everybody),
shadowgames.chatgames.admin (op).
Wins: /gtop chatgames chat_wins, %shadowgames_chatgames_wins%,
%shadowgames_chatgames_wins_<type>%.config-version1enabledtrueThe whole feature. False: no game starts, not even by command.
When
schedule5 keysenabledtrueFalse: games start only with /sg chatgame start.
interval10mOne game every interval, give or take the jitter (10m +/- 2m means anywhere between 8 and 12 minutes). Counted from the end of the previous game.
jitter2mfirst-delay3mThe first game after a start or a reload.
min-players2Fewer players than this who can take part: that game is skipped and the next one is tried an interval later. A command start ignores it.
Who takes part
Online, with shadowgames.chatgames.play, not hiding chat games, and in one of these worlds (empty list: every world).
worlds[ ]exclude-in-matchfalseTrue: players inside a ShadowGames match (playing or watching) are not shown chat games and cannot answer. False by default: the chat is shared anyway, and the start has no title, so a fight is not covered by it. Turn it on if your matches are long and busy.
How
answer-time30sTime to answer, unless the type says otherwise with its own "time".
cancel-winning-messagetrueThe line with the right answer is taken out of the chat, so nobody else can copy it. Wrong answers stay visible.
apply-multiplierstrueThe global, event, VIP and booster multipliers of ShadowGames apply to the coins, xp and money of a chat game, as they do to a match.
log-to-consoletrueOne line in the console when a game starts (with the answer) and ends.
rewards2 keysThe reward of every type that does not write its own.
coins25xp50The types
Each one: enabled, weight (how often it is picked: 30 is three times as likely as 10), time (optional), rewards (optional).
types7 keystypes.trivia4 keysenabledtrueweight30time30squestions[{ question: {…}, answers: […] }, { question: {…}, answers: […] }, { question: {…}, answers: […] }, { question: {…}, answers: […] }, { question: {…}, answers: […] }, { question: {…}, answers: […] }, { question: {…}, ans …+26
questionA question can carry its own reward: it replaces the reward of the type for this question only.
types.math5 keysenabledtrueweight25time25sallow-negativefalseFalse: a subtraction never has a negative result.
types.math.difficulties3 keysnumbers: the range of the two numbers of a + or a -.
factors: the range of the two numbers of a x, and of the divisor and
the result of a / (the division always comes out whole).operations: any of "+", "-", "*", "/". A level can have its own "rewards".
types.math.difficulties.easy3 keysweight50operations[+, "-"]numbers[1, 30]types.math.difficulties.medium4 keysweight35operations[+, "-", "*"]numbers[10, 99]factors[2, 12]types.math.difficulties.hard5 keysweight15operations[+, "-", "*", /]numbers[100, 999]factors[3, 20]types.math.difficulties.hard.rewards2 keyscoins50xp100types.unscramble4 keysenabledtrueweight20time40shinttrueAt half time, the first letter of the word.
Its own list of words; without this line, the "words" at the bottom. words: [ ... ]
types.type-fast5 keysenabledtrueweight15time20ssourcebothwords: a word from the list at the bottom, in the reader's language. code: a random code like K7PX2M. both: one or the other, at random.
code-length8types.reverse3 keysA word is shown and has to be written backwards: DIAMOND -> dnomaid.
enabledtrueweight10time30stypes.fill-in4 keysenabledtrueweight15time40stypes.guess-number7 keysenabledtrueweight10time60smin1max100max-guesses5Guesses per player; 0 = no limit.
hide-guessesfalseTrue: every guess leaves the chat, not only the right one.
Words
Used by unscramble, type-fast, reverse and fill-in (a type can have its own "words" list instead). One word per line: a plain word when it is the same in every language, { it: ..., en: ... } otherwise. A word that does not suit a type is left out of that type only: one with a single repeated letter cannot be shuffled, one that reads the same backwards is no game for reverse.
words[{ it: diamante, en: diamond }, { it: smeraldo, en: emerald }, { it: ossidiana, en: obsidian }, creeper, enderman, netherite, ghast, blaze, slime, cactus, { it: scheletro, en: skeleton }, { it: ragno, en: spider }, { it …+45
games/battleroyale.yml
Minigame: Battle Royale 41 settings
games/battleroyale.ymlplugins/ShadowGames/games/battleroyale.yml enabledtruecountdown45smax-duration25mlives1buildtruedrop5 keysenabledtrueheight200elytratrueremove-elytra-on-landtruefree-jumptruezone3 keysThe pause between one shrink and the next is what lets you plan a route; the announced circle is what turns running away into a decision.
particlestrueshow-nexttruephases[{ wait: 3m, shrink: 2m, to: 400, damage: 1 }, { wait: 2m, shrink: 2m, to: 250, damage: 2 }, { wait: 90s, shrink: 90s, to: 150, damage: 4 }, { wait: 60s, shrink: 60s, to: 60, damage: 6 }, { wait: 45s, shrink: 45s, to: 2 …+5
markers4 keysBEACON"CENTER"CHEST"LOOT_CHEST:common"TRAPPED_CHEST"LOOT_CHEST:rare"GOLD_BLOCK"DROP_ZONE"events[{ at: 5m, type: SUPPLY, count: 2 }, { at: 10m, type: SUPPLY, count: 2 }, { at: 15m, type: SUPPLY, count: 3 }]+2
loot2 keysloot.common3 keysmin-stacks3max-stacks6entries[{ item: {…}, weight: 22 }, { item: {…}, weight: 8 }, { item: {…}, weight: 14 }, { item: {…}, weight: 20, amount-range: […] }, { item: {…}, weight: 20 }, { item: {…}, weight: 10 }, { item: {…}, weight: 22, amount-range: …+7
loot.rare3 keysmin-stacks5max-stacks8entries[{ item: {…}, weight: 8, unique: true }, { item: {…}, weight: 6, unique: true }, { item: {…}, weight: 12 }, { item: {…}, weight: 20, amount-range: […] }, { item: {…}, weight: 3, unique: true }, { item: {…}, weight: 10, …+6
downed3 keysenabledtruetime45srevive-time6skits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&6&lBATTLE ROYALE"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.battleroyale.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "", "lang:content.board.next-event", "&7%next_event_time%", "&8 …+11
ENDING["&8&m ", "lang:content.board.battleroyale.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "% …+8
rewards4 keyswin{ coins: 300, xp: 700 }lose{ coins: 20, xp: 40 }kill{ coins: 20, xp: 45 }play{ coins: 8, xp: 15 }Ranked
Plenty of variance, but the average placement says something. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.wither.spawn"kill"entity.player.levelup" games/bedwars.yml
Minigame: BedWars 89 settings
games/bedwars.ymlplugins/ShadowGames/games/bedwars.yml File notes
Defend your bed, break the others, buy everything else. Full reference: docs/giochi/bedwars.md
enabledtruecountdown30scountdown-full10sgrace-period0smax-duration45mend-duration12srespawn-delay5sfriendly-firefalsebuildtrueBeds
beds3 keysrequire-toolfalseA bed breaks bare-handed: demanding a tool only stretches the window in which a defender can arrive, and that is not what makes defence interesting.
own-bed-protectedtruebroadcasttrueFinal kill
Dying with no bed puts you out. It is worth more than a normal kill, and it shows.
final-kill1 keyreward-multiplier2.5Generators
team -> the ones inside the bases, one per team, upgraded at the
upgrade villager
neutral -> the ones in the middle, the same for everyone, levelling
up over timemax-nearby is the rule that keeps the server standing: without it an abandoned base piles up thousands of ingots on the floor.
generators2 keysgenerators.team3 keysgenerators.team.iron6 keysresourceIRON_INGOTinterval1.2samount1max-nearby48generators.team.iron.tiers4 keys1{ interval: 1.2s }2{ interval: 0.8s }3{ interval: 0.5s, amount: 2 }4{ interval: 0.4s, amount: 2 }generators.team.gold6 keysresourceGOLD_INGOTinterval6samount1max-nearby16generators.team.gold.tiers4 keys1{ interval: 6s }2{ interval: 4s }3{ interval: 3s }4{ interval: 2.5s }generators.team.emerald5 keysresourceEMERALDinterval0s0 = off until the forge reaches the level that turns it on.
max-nearby8generators.team.emerald.tiers4 keys1{ interval: 0s }2{ interval: 0s }3{ interval: 45s }4{ interval: 35s }generators.neutral2 keysgenerators.neutral.diamond7 keysresourceDIAMONDinterval30smax-nearby8hologramtruehologram-lines["lang:content.generator.diamond", "lang:hologram.generator.tier", "lang:hologram.generator.in-seconds"]+2
generators.neutral.diamond.spawn-effect2 keysparticleHAPPY_VILLAGERsound"block.note_block.pling"generators.neutral.diamond.tiers3 keys1{ interval: 30s }2{ interval: 23s }3{ interval: 12s }generators.neutral.emerald6 keysresourceEMERALDinterval65smax-nearby4hologramtruehologram-lines["lang:content.generator.emerald", "lang:hologram.generator.tier", "lang:hologram.generator.in-seconds"]+2
generators.neutral.emerald.tiers3 keys1{ interval: 65s }2{ interval: 50s }3{ interval: 30s }Shop
The layout lives in shops/bedwars.yml
shop2 keysfile"shops/bedwars.yml"shop.npc2 keysenabledtruetypeVILLAGERMarkers
One base schematic is enough for every team: the engine recolours wool, glass, terracotta, bed and banner with the colour of the team assigned to that position.
markers8 keysRED_WOOL"TEAM_SPAWN"RED_BED"BED"IRON_BLOCK"GENERATOR:team"DIAMOND_BLOCK"GENERATOR:diamond"EMERALD_BLOCK"GENERATOR:emerald"GOLD_BLOCK"SHOP_NPC"LAPIS_BLOCK"UPGRADE_NPC"BARRIER"NO_BUILD"protection3 keysoriginal-blocks-unbreakabletruegenerator-radius4Put NO_BUILD around the middle generators: without it the first thing players do is wall them in.
build-height-limit25events[{ at: 6m, type: GENERATOR_UPGRADE, kind: diamond, tier: 2 }, { at: 6m, type: GENERATOR_UPGRADE, kind: emerald, tier: 2 }, { at: 12m, type: GENERATOR_UPGRADE, kind: diamond, tier: 3 }, { at: 12m, type: GENERATOR_UPGRADE …+6
kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&c&lBEDWARS"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.bedwars.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "", "lang:content.board.next-e …+11
ENDING["&8&m ", "lang:content.board.bedwars.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%serve …+8
rewards7 keyswin{ coins: 200, xp: 400 }lose{ coins: 20, xp: 40 }kill{ coins: 10, xp: 20 }final-kill{ coins: 25, xp: 50 }bed-broken{ coins: 50, xp: 100 }play{ coins: 5, xp: 10 }per-minute{ coins: 2, xp: 4 }sounds3 keysjoin"entity.experience_orb.pickup"start"entity.ender_dragon.growl"kill"entity.player.levelup"Ranked
Long team matches: the result is far more skill than luck. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/bingo.yml
Minigame: Bingo 32 settings
games/bingo.ymlplugins/ShadowGames/games/bingo.yml enabledtruecountdown30smax-duration45mrespawn-delay5sbuildtrueboard4 keyssize5win-conditionLINELINE | FULL | MOST
seed0A fixed seed makes a match repeatable: tournaments need that.
difficulty3 keyseasy10medium10hard5items3 keyseasy[OAK_LOG, COBBLESTONE, WHEAT, LEATHER, COAL, SAND, CLAY_BALL, EGG, APPLE, RED_MUSHROOM]+7
medium[IRON_INGOT, GOLD_INGOT, BOOK, BUCKET, COOKED_BEEF, BOW, SLIME_BALL, GLASS, PAPER, REDSTONE]+7
hard[DIAMOND, ENDER_PEARL, BLAZE_ROD, GOLDEN_APPLE, OBSIDIAN, NAME_TAG, CAKE, SADDLE]+5
rules3 keysauto-completetruepvpfalseshow-otherstruemarkers2 keysQUARTZ_BLOCK"PLAYER_SPAWN"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&a&lBINGO"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.bingo.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "lang:content.board.completed" …+12
ENDING["&8&m ", "lang:content.board.bingo.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server_ …+8
rewards3 keyswin{ coins: 200, xp: 450 }lose{ coins: 20, xp: 40 }play{ coins: 8, xp: 16 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds2 keysjoin"entity.experience_orb.pickup"start"block.beacon.activate"Ranked
Too much depends on what turns up: not a leaderboard of skill.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledfalse games/blockparty.yml
Minigame: Block Party 32 settings
games/blockparty.ymlplugins/ShadowGames/games/blockparty.yml enabledtruecountdown15smax-duration10mlives1buildfalserounds5 keysA round has three beats, and the middle one is the whole game:
1. DANCE - the music plays and the floor keeps changing
2. STOP - the music stops, the floor freezes, and the colour
appears in your hand
3. COLLAPSE - everything that is not that colour disappearsdance-time5How long the dance lasts before the music stops.
start-time6How long you have to reach the colour, in the first round.
decrease0.4How much shorter each round gets, and the floor it never goes below.
min-time1.5clear-time2music3 keysplaylist[party, chase]The tracks to pick from. Empty = a random one out of everything in music/. The files live in music/<name>.yml and can be note block melodies (no resource pack) or sounds from a pack of your own.
stop-instrumentPLINGThe sharp note the instant the music stops: the silence has to be an event, not an absence.
victoryvictoryfloor5 keysmaterials[RED_WOOL, ORANGE_WOOL, YELLOW_WOOL, LIME_WOOL, LIGHT_BLUE_WOOL, BLUE_WOOL, MAGENTA_WOOL, PINK_WOOL]+5
The called colour also appears as a block in hand, not only as a word: somebody who struggles with colours should not have to guess.
shuffle-each-roundtrueWithout reshuffling, after three rounds everybody knows where to go.
live-shuffletrueThe floor moves DURING the dance too: a few tiles repainted at random now and then, so the ground is never still under your feet and no square is safe for longer than a moment.
It stops dead when the music stops: a tile changing under somebody who already reached their colour would be the game cheating.
shuffle-every4How many ticks apart, and how many tiles each time. A few at a time: repainting everything at intervals would make the floor flash, and a flashing floor cannot be read.
shuffle-blocks12markers2 keysQUARTZ_BLOCK"PLAYER_SPAWN"WHITE_WOOL"PARTY_FLOOR"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&d&lBLOCK PARTY"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.blockparty.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "lang:content.board.round", "lang:content.board.colour", "lang: …+14
ENDING["&8&m ", "lang:content.board.blockparty.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%se …+8
rewards3 keyswin{ coins: 60, xp: 140 }lose{ coins: 8, xp: 16 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds2 keysjoin"entity.experience_orb.pickup"start"block.note_block.pling"Ranked
A game of luck and reflexes, not of measurable skill.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledfalse games/bridge.yml
Minigame: The Bridge 31 settings
games/bridge.ymlplugins/ShadowGames/games/bridge.yml enabledtruecountdown15sgrace-period0smax-duration20mrespawn-delay2sgoals-to-win5friendly-firefalsebuildtruekit3 keysThe kit is fixed on purpose: The Bridge is a game of skill, not of gear.
fixed"bridge/default"infinite-blockstruearrow-regen3sgoal2 keysown-goal-blockedtruecelebration3svoid1 keykill-below40Falling is not a real death: it costs the run and nothing else. That is what keeps the game quick instead of punishing.
markers3 keysRED_WOOL"TEAM_SPAWN"END_PORTAL_FRAME"GOAL"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&9&lTHE BRIDGE"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.bridge.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "", "lang:content.board.next-e …+11
ENDING["&8&m ", "lang:content.board.bridge.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server …+8
rewards4 keyswin{ coins: 80, xp: 200 }lose{ coins: 15, xp: 30 }kill{ coins: 8, xp: 15 }play{ coins: 5, xp: 10 }Ranked
Half fighting skill and half movement, but always 1v1 or 2v2. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.ender_dragon.growl"kill"entity.player.levelup" games/buildbattle.yml
Minigame: Build Battle 35 settings
games/buildbattle.ymlplugins/ShadowGames/games/buildbattle.yml enabledtruecountdown30smax-duration20mbuild-time6mvote-time20smodes3 keysdefaultsolosolo{ players-per-plot: 1 }teams{ players-per-plot: 2 }themes4 keysdifficultymediumeasy["lang:content.game.buildbattle.theme.house", "lang:content.game.buildbattle.theme.tree", "lang:content.game.buildbattle.theme.boat", "lang:content.game.buildbattle.theme.lighthouse", "lang:content.game.buildbattle.them …+7
medium["lang:content.game.buildbattle.theme.castle", "lang:content.game.buildbattle.theme.pirate-ship", "lang:content.game.buildbattle.theme.volcano", "lang:content.game.buildbattle.theme.space-station", "lang:content.game.bu …+7
hard["lang:content.game.buildbattle.theme.industrial-revolution", "lang:content.game.buildbattle.theme.passing-time", "lang:content.game.buildbattle.theme.sea-bed", "lang:content.game.buildbattle.theme.dream", "lang:content …+5
plot4 keysblocksALLflytrueisolatedtrueIf players can see each other, they copy.
voting5 keysscale5anonymoustrueself-votefalseshuffletruereveal-at-endtrueA visible total turns the last plots into a popularity contest.
markers2 keysLIME_WOOL"PLOT"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&b&lBUILD BATTLE"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.buildbattle.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "", "lang:content.board.next-event", "&7%next_event_time%", "&8 …+11
ENDING["&8&m ", "lang:content.board.buildbattle.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%s …+8
rewards3 keyswin{ coins: 300, xp: 600 }lose{ coins: 40, xp: 80 }play{ coins: 10, xp: 20 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds2 keysjoin"entity.experience_orb.pickup"start"block.beacon.activate"Ranked
Players do the voting: that is not a rating to rank.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledfalse games/ctf.yml
Minigame: Capture the Flag 32 settings
games/ctf.ymlplugins/ShadowGames/games/ctf.yml enabledtruecountdown30smax-duration20mrespawn-delay5scaptures-to-win3friendly-firefalsebuildfalseflag6 keyswear-on-headtrueglow-carriertruerequire-own-flag-hometrueYou need your own flag at base to score: that is what makes it a tactical game instead of a race.
ally-touch-returnstruereturn-after30scarrier-effects[{ type: SLOWNESS, amplifier: 0 }]markers3 keysRED_WOOL"TEAM_SPAWN"RED_BANNER"FLAG"BEACON"CENTER"kits2 keysenabledtruefolder"ctf"Sidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&c&lCAPTURE THE FLAG"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "", "lang:content.board.kit", "&8&m …+9
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.ctf.starting", "", "lang:content.board.kit", "&8&m ", "%server_ip%"]+8
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "", "lang:content.board.next-e …+11
ENDING["&8&m ", "lang:content.board.ctf.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server_ip …+8
rewards5 keyswin{ coins: 150, xp: 300 }lose{ coins: 25, xp: 50 }kill{ coins: 8, xp: 15 }capture{ coins: 60, xp: 120 }play{ coins: 5, xp: 10 }Ranked
Balanced teams, a clear objective. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.ender_dragon.growl"kill"entity.player.levelup" games/dropper.yml
Minigame: Dropper 26 settings
games/dropper.ymlplugins/ShadowGames/games/dropper.yml enabledtruecountdown10smax-duration15mbuildfalselevels3 keysauto-detecttruemodeSEQUENTIALtime-limit2mrules4 keysfall-damagefalsetouch-killstrueno-elytratrueno-slow-falltruemarkers3 keysEMERALD_BLOCK"START"GOLD_BLOCK"FINISH"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&9&lDROPPER"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.dropper.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "", "lang:content.board.next-event", "&7%next_event_time%", "&8 …+11
ENDING["&8&m ", "lang:content.board.dropper.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%serve …+8
rewards3 keyslose{ coins: 5, xp: 10 }win{ coins: 70, xp: 160 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds2 keysjoin"entity.experience_orb.pickup"start"entity.bat.takeoff"Ranked
The course never changes: whoever runs it better wins, every time.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/duels.yml
Minigame: Duels 34 settings
games/duels.ymlplugins/ShadowGames/games/duels.yml File notes
Every mode is a kit plus two switches: eight modes cost eight blocks of YAML, not eight classes.
enabledtruecountdown5smax-duration10mrounds1buildfalsemodes9 keysdefaultclassicclassic{ kit: "duels/classic", build: false, natural-regen: true }+1
sumo{ kit: "duels/sumo", build: false, natural-regen: true }+1
bow{ kit: "duels/bow", build: false, natural-regen: true }+1
uhc{ kit: "duels/uhc", build: true, natural-regen: false }+1
nodebuff{ kit: "duels/nodebuff", build: false, natural-regen: true }+1
boxing{ kit: "duels/boxing", build: false, hits-to-win: 100 }+1
bridge{ kit: "duels/bridge", build: true }combo{ kit: "duels/combo", build: false }challenge4 keysenabledtruetimeout60sbettingtrueBets use game coins, never the real economy.
max-bet10000markers2 keysQUARTZ_BLOCK"TEAM_SPAWN"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&e&lDUELS"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.duels.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "", "lang:content.board.next-event", "&7%next_event_time%", "&8 …+11
ENDING["&8&m ", "lang:content.board.duels.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server_ …+8
rewards4 keyskill{ coins: 15, xp: 30 }win{ coins: 60, xp: 140 }lose{ coins: 10, xp: 20 }play{ coins: 5, xp: 10 }Ranked
A one-on-one: the case where Elo tells the exact truth. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"block.note_block.pling"kill"entity.player.levelup" games/eggwars.yml
Minigame: EggWars 59 settings
games/eggwars.ymlplugins/ShadowGames/games/eggwars.yml enabledtruecountdown30smax-duration40mrespawn-delay5sfriendly-firefalsebuildtrueeggs2 keysown-egg-protectedtruebroadcasttruegenerators2 keysThe generators sit on the island and upgrade when you click them with resources in hand: that is what forces you home, and it is the real difference between EggWars and BedWars.
generators.tiers3 keysgenerators.tiers.iron5 keysresourceIRON_INGOTinterval4smax-nearby48hologramtruegenerators.tiers.iron.tiers3 keys1{ interval: 4s }2{ interval: 2s }3{ interval: 1s, amount: 2 }generators.tiers.gold5 keysresourceGOLD_INGOTinterval12smax-nearby24hologramtruegenerators.tiers.gold.tiers3 keys1{ interval: 12s }2{ interval: 8s }3{ interval: 5s }generators.tiers.diamond5 keysresourceDIAMONDinterval60smax-nearby8hologramtruegenerators.tiers.diamond.tiers2 keys1{ interval: 60s }2{ interval: 40s }generators.upgrades3 keysWhat a level costs when you click the generator.
generators.upgrades.iron2 keys2{ cost: { IRON_INGOT: 8 } }3{ cost: { GOLD_INGOT: 12 } }generators.upgrades.gold2 keys2{ cost: { GOLD_INGOT: 8 } }3{ cost: { DIAMOND: 4 } }generators.upgrades.diamond1 key2{ cost: { DIAMOND: 6 } }shop2 keysfile"shops/eggwars.yml"shop.npc2 keysenabledtruetypeVILLAGERmarkers6 keysRED_WOOL"TEAM_SPAWN"DRAGON_EGG"EGG"IRON_BLOCK"GENERATOR:iron"GOLD_BLOCK"GENERATOR:gold"DIAMOND_BLOCK"GENERATOR:diamond"EMERALD_BLOCK"SHOP_NPC"events[{ at: 25m, type: BROADCAST, message: "lang:content.event.sudden-death-soon" }, { at: 30m, type: SUDDEN_DEATH }, { at: 40m, type: END, outcome: DRAW }]+2
kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&e&lEGGWARS"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.eggwars.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "", "lang:content.board.next-e …+11
ENDING["&8&m ", "lang:content.board.eggwars.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%serve …+8
rewards6 keyswin{ coins: 200, xp: 400 }lose{ coins: 20, xp: 40 }kill{ coins: 10, xp: 20 }final-kill{ coins: 25, xp: 50 }egg-broken{ coins: 50, xp: 100 }play{ coins: 5, xp: 10 }Ranked
Same as BedWars. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.ender_dragon.growl"kill"entity.player.levelup" games/gungame.yml
Minigame: Gun Game 29 settings
games/gungame.ymlplugins/ShadowGames/games/gungame.yml enabledtruecountdown15smax-duration20mrespawn-delay2sbuildfalserules5 keysdemote-on-deathfalseDropping a level on death drags matches out and frustrates: leave it off unless somebody asks for it.
any-weapon-countstruefinal-level-winstrueheal-on-level-uptrueWithout it the leader is also the most battered: the game punishes whoever is winning it.
announce-level-uptrueladder[{ item: {…}, name: "lang:content.game.gungame.wooden-sword" }, { item: {…}, name: "lang:content.game.gungame.stone-sword" }, { item: {…}, name: "lang:content.game.gungame.iron-sword" }, { item: {…}, name: "lang:content …+9
The hard levels go last: finishing bare-handed is the tradition, and it is what makes a comeback possible.
spawn2 keyssafe-distance10protection2smarkers2 keysQUARTZ_BLOCK"PLAYER_SPAWN"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&f&lGUN GAME"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.gungame.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "lang:content.board.level", "lang:content.board.weapon", "", "l …+13
ENDING["&8&m ", "lang:content.board.gungame.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%serve …+8
rewards4 keyslose{ coins: 10, xp: 20 }win{ coins: 120, xp: 260 }kill{ coins: 6, xp: 12 }play{ coins: 5, xp: 10 }Ranked
The same progression for everyone. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"block.note_block.pling"kill"entity.player.levelup" games/hideandseek.yml
Minigame: Hide and Seek 38 settings
games/hideandseek.ymlplugins/ShadowGames/games/hideandseek.yml enabledtruecountdown20smax-duration10mbuildfalsehide7 keystime45sblind-seekerstruedisguiseBLOCKblocks[ ]Empty = the engine samples the map: a garden offers bushes, a castle offers bricks, and nobody ends up the only cactus indoors.
allow-changetruechange-cooldown10ssnap-to-gridtrueseekers6 keysratio0.2minimum1kit"hideandseek/seeker"respawn-delay5sradartrueradar-range20anticamp4 keysNot optional: without it a match ends with three people inside a wall and twenty minutes of nobody finding them.
enabledtrueidle-time45ssound"block.note_block.pling"reveal-after90smarkers3 keysLIME_WOOL"TEAM_SPAWN:HIDERS"RED_WOOL"TEAM_SPAWN:SEEKERS"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"lang:content.board.hideandseek.title"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.hideandseek.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "", "lang:content.board.next-e …+11
ENDING["&8&m ", "lang:content.board.hideandseek.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%s …+8
rewards4 keyskill{ coins: 12, xp: 25 }win{ coins: 90, xp: 200 }lose{ coins: 12, xp: 24 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"block.note_block.bell"kill"entity.player.levelup"Ranked
It leans too much on the map and on how many are playing.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledfalse games/hungergames.yml
Minigame: HungerGames 40 settings
games/hungergames.ymlplugins/ShadowGames/games/hungergames.yml enabledtruecountdown60smax-duration30mlives1buildtruestart3 keysfreeze30sThirty seconds standing on a pedestal staring at the cornucopia: that is where all the tension of the match comes from.
invulnerable-during-freezetrueremove-pedestalstruechests2 keysfill-on-starttrueone-timetruemarkers5 keysQUARTZ_BLOCK"PLAYER_SPAWN"BEACON"CENTER"CHEST"LOOT_CHEST:tier1"TRAPPED_CHEST"LOOT_CHEST:tier2"RED_WOOL"SPECTATOR_SPAWN"events[{ at: 8m, type: CHEST_REFILL }, { at: 12m, type: FEAST, chests: 4 }, { at: 16m, type: CHEST_REFILL }, { at: 18m, type: BORDER_SHRINK, to: 120, over: 5m }, { at: 24m, type: BROADCAST, message: "lang:content.event.deathm …+6
loot3 keysloot.tier13 keysmin-stacks2max-stacks5entries[{ item: {…}, weight: 20 }, { item: {…}, weight: 24 }, { item: {…}, weight: 10 }, { item: {…}, weight: 18, amount-range: […] }, { item: {…}, weight: 18 }, { item: {…}, weight: 18 }, { item: {…}, weight: 26, amount-range …+10
loot.tier23 keysmin-stacks4max-stacks7entries[{ item: {…}, weight: 18 }, { item: {…}, weight: 4, unique: true }, { item: {…}, weight: 12 }, { item: {…}, weight: 20, amount-range: […] }, { item: {…}, weight: 12 }, { item: {…}, weight: 3, unique: true }, { item: {…} …+8
loot.feast3 keysmin-stacks6max-stacks9inherittier2kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&6&lHUNGER GAMES"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.hungergames.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "", "lang:content.board.next-event", "&7%next_event_time%", "&8 …+11
ENDING["&8&m ", "lang:content.board.hungergames.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%s …+8
rewards5 keyswin{ coins: 200, xp: 450 }lose{ coins: 15, xp: 30 }kill{ coins: 15, xp: 35 }play{ coins: 5, xp: 10 }per-minute{ coins: 2, xp: 5 }Ranked
Loot matters, but placement over many matches is honest. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.wither.spawn"kill"entity.player.levelup" games/infection.yml
Minigame: Infection 37 settings
games/infection.ymlplugins/ShadowGames/games/infection.yml enabledtruecountdown20smax-duration8mrespawn-delay3sbuildtrueinfection4 keysdelay20sinitial-ratio0.150.15 out of twenty players makes three zombies: the amount that makes tense without being lost already.
minimum-initial1patient-zero-buff[{ type: SPEED, amplifier: 1 }, { type: STRENGTH, amplifier: 0 }]+1
Without this bonus the first zombie never catches anyone.
zombies4 keysrespawn-delay3skit"infection/zombie"glowtrueeffects[{ type: SPEED, amplifier: 0 }]survivors3 keyskit"infection/survivor"buildtruebuild-blocks[OAK_PLANKS, IRON_BARS]last-survivor3 keysglow-alltruebroadcasttruebuff[{ type: SPEED, amplifier: 1 }, { type: REGENERATION, amplifier: 0 }]+1
markers3 keysLIME_WOOL"TEAM_SPAWN:SURVIVORS"GREEN_WOOL"TEAM_SPAWN:ZOMBIES"BEACON"CENTER"kits2 keysenabledtruefolder"infection"Sidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&2&lINFECTION"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "", "lang:content.board.kit", "&8&m …+9
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.infection.starting", "", "lang:content.board.kit", "&8&m ", "%server_ip …+8
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "", "lang:content.board.next-e …+11
ENDING["&8&m ", "lang:content.board.infection.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%ser …+8
rewards4 keyswin{ coins: 100, xp: 220 }lose{ coins: 20, xp: 40 }kill{ coins: 10, xp: 20 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.zombie.ambient"kill"entity.player.levelup"Ranked
Surviving is skill, and the matches run long enough.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/kitpvp.yml
Minigame: KitPvP 38 settings
games/kitpvp.ymlplugins/ShadowGames/games/kitpvp.yml enabledtruecountdown10smax-duration10mrespawn-delay2skills-to-win0buildfalsefriendly-firetruespawn4 keyssmarttrueWithout this the game turns into spawn camping in two minutes.
safe-distance12protection3sbreak-on-attacktruestreaks3 keysenabledtrueshutdown-bonus2.0Ending a long streak is worth more than the kill: it is what turns "that player is winning" into "let us go and get them".
streaks.rewards3 keysstreaks.rewards.31 keyeffects[{ type: SPEED, amplifier: 0, duration: 30s }]streaks.rewards.52 keysbroadcasttrueeffects[{ type: REGENERATION, amplifier: 0, duration:…]streaks.rewards.103 keysbroadcasttrueglowtrueitems[{ material: GOLDEN_APPLE, amount: 2 }]markers3 keysQUARTZ_BLOCK"PLAYER_SPAWN"BARRIER"NO_BUILD"BEACON"CENTER"kits3 keysenabledtruefolder"kitpvp"default"warrior"Sidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&c&lKITPVP"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "", "lang:content.board.kit", "&8&m …+9
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.kitpvp.starting", "", "lang:content.board.kit", "&8&m ", "%server_ip%"]+8
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "lang:content.board.streak", "", "lang:content.board.next-event …+12
ENDING["&8&m ", "lang:content.board.kitpvp.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server …+8
rewards4 keyslose{ coins: 10, xp: 20 }win{ coins: 80, xp: 180 }kill{ coins: 6, xp: 12 }play{ coins: 5, xp: 10 }Ranked
The same kits for everyone. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"block.note_block.pling"kill"entity.player.levelup" games/koth.yml
Minigame: King of the Hill 30 settings
games/koth.ymlplugins/ShadowGames/games/koth.yml enabledtruecountdown20smax-duration15mrespawn-delay5spoints-to-win300buildfalsehill7 keysradius8height6capture-time10spoints-per-second1contest-modePAUSEContesting pauses the capture instead of resetting it: resetting punishes the attacker twice and makes a defended hill untakeable.
multiplefalseparticlestruemarkers2 keysRED_WOOL"TEAM_SPAWN"BEACON"CAPTURE_POINT"kits2 keysenabledtruefolder"koth"Sidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&6&lKING OF THE HILL"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "", "lang:content.board.kit", "&8&m …+9
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.koth.starting", "", "lang:content.board.kit", "&8&m ", "%server_ip%"]+8
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "lang:content.board.hill", "la …+13
ENDING["&8&m ", "lang:content.board.koth.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server_i …+8
rewards4 keyswin{ coins: 130, xp: 280 }lose{ coins: 20, xp: 40 }kill{ coins: 6, xp: 12 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"block.beacon.activate"kill"entity.player.levelup"Ranked
Holding a hill against others is pure skill.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/luckywars.yml
Minigame: LuckyWars 31 settings
games/luckywars.ymlplugins/ShadowGames/games/luckywars.yml File notes
SkyWars where every block can save you or kill you.
enabledtruecountdown20sgrace-period10smax-duration20mlives1buildtruevoid1 keykill-below0markers4 keysBLUE_WOOL"TEAM_SPAWN"BEACON"CENTER"CHEST"LOOT_CHEST:island"RED_WOOL"SPECTATOR_SPAWN"Lucky blocks
Balance rule: the bad outcomes have to stay under 25% of the total weight. Above that players stop breaking them and the game stops existing.
lucky2 keysblockYELLOW_TERRACOTTAoutcomes[{ weight: 20, type: ITEMS, items: […] }, { weight: 18, type: ITEMS, items: […] }, { weight: 16, type: ITEMS, items: […] }, { weight: 14, type: ITEMS, items: […] }, { weight: 12, type: MOB, mob: ZOMBIE, amount: 3 }, { w …+13
loot1 keyloot.island3 keysmin-stacks2max-stacks4entries[{ item: {…}, weight: 20 }, { item: {…}, weight: 20, amount-range: […] }, { item: {…}, weight: 20, amount-range: […] }]+2
events[{ at: 10m, type: BORDER_SHRINK, to: 100, over: 60s }, { at: 20m, type: END, outcome: DRAW }]+1
kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&a&lLUCKYWARS"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.luckywars.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "", "lang:content.board.next-e …+11
ENDING["&8&m ", "lang:content.board.luckywars.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%ser …+8
rewards4 keyslose{ coins: 10, xp: 20 }win{ coins: 100, xp: 250 }kill{ coins: 10, xp: 25 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.ender_dragon.growl"kill"entity.player.levelup"Ranked
Lucky blocks are half the match: it would be a leaderboard of luck.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledfalse games/manhunt.yml
Minigame: Manhunt 32 settings
games/manhunt.ymlplugins/ShadowGames/games/manhunt.yml enabledtruecountdown20smax-duration60mbuildtrueobjectiveSURVIVEhead-start3mhunters3 keysrespawn-delay10skit"manhunt/hunter"hunters.compass5 keysenabledtrueupdate5sThe two dials that decide whether the runner has a chance. Rare updates and low accuracy = an interesting hunt.
inaccuracy0cross-dimensiontrueproximity-soundtruerunner3 keyskit"manhunt/runner"max-health24radartruemarkers2 keysLIME_WOOL"TEAM_SPAWN:RUNNER"RED_WOOL"TEAM_SPAWN:HUNTERS"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&5&lMANHUNT"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.manhunt.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "", "lang:content.board.next-e …+11
ENDING["&8&m ", "lang:content.board.manhunt.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%serve …+8
rewards4 keyswin{ coins: 250, xp: 500 }lose{ coins: 30, xp: 60 }kill{ coins: 20, xp: 40 }play{ coins: 10, xp: 20 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.ender_dragon.growl"kill"entity.player.levelup"Ranked
True for the runner and for the hunters alike.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/murdermystery.yml
Minigame: Murder Mystery 35 settings
games/murdermystery.ymlplugins/ShadowGames/games/murdermystery.yml enabledtruecountdown20smax-duration8mlives1buildfalseroles3 keysmurderers1detectives1roles.scale2 keysOne murderer in sixteen never catches anybody; two in six close the round in thirty seconds.
12{ murderers: 2, detectives: 1 }16{ murderers: 2, detectives: 2 }murderer2 keysthrowabletruethrow-cooldown5sdetective1 keydrop-on-deathtrueinnocent1 keygold-needed10gold2 keysspawn-interval10smax-on-ground20rules3 keysfriendly-fire-penaltytrueWith no penalty the armed innocent shoots everyone until they hit the murderer, and the guessing game evaporates.
penaltyBOW_LOSTmurder-trail5smarkers3 keysQUARTZ_BLOCK"PLAYER_SPAWN"GOLD_BLOCK"GOLD_SPAWN"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&5&lMURDER MYSTERY"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.murdermystery.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "lang:content.board.role", "", "lang:content.board.next-event", …+12
ENDING["&8&m ", "lang:content.board.murdermystery.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", " …+8
rewards4 keyswin{ coins: 90, xp: 200 }lose{ coins: 10, xp: 20 }kill{ coins: 15, xp: 30 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"ambient.cave"kill"entity.player.levelup"Ranked
Chance hands out the role, and the role changes everything.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledfalse games/oitc.yml
Minigame: One in the Chamber 29 settings
games/oitc.ymlplugins/ShadowGames/games/oitc.yml enabledtruecountdown15smax-duration10mrespawn-delay3slives3buildfalserules5 keysone-hit-killtruesword-instant-killtruepickup-arrowstruearrows-per-kill1arrow-despawn5sWithout this, after three minutes the floor is full of arrows and whoever picks them up becomes unbeatable.
spawn2 keyssafe-distance10protection2smarkers2 keysQUARTZ_BLOCK"PLAYER_SPAWN"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&6&lONE IN THE CHAMBER"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.oitc.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "", "lang:content.board.next-event", "&7%next_event_time%", "&8 …+11
ENDING["&8&m ", "lang:content.board.oitc.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server_i …+8
rewards4 keyslose{ coins: 10, xp: 20 }win{ coins: 90, xp: 200 }kill{ coins: 8, xp: 16 }play{ coins: 5, xp: 10 }Ranked
One arrow, one hit: luck counts for little. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"block.note_block.pling"kill"entity.player.levelup" games/paintball.yml
Minigame: Paintball 59 settings
games/paintball.ymlplugins/ShadowGames/games/paintball.yml enabledtruecountdown20smax-duration10mrespawn-delay5sbuildfalsefriendly-firefalsemodeKILLSHow you win.
KILLS - first team to 'kills-to-win' hits
COVERAGE - most floor painted wins. It changes what people do:
a shot at a wall is worth something, and hiding in a
corner is worth nothing.kills-to-win50coverage-to-win70COVERAGE only: the share of paint that ends the match early, and how many blocks have to be painted before it counts (so nobody wins on the first shot of the round).
coverage-minimum200streak-announce5How many kills in a row before the streak is announced.
The guns
The difference between paintball and a snowball fight is right here, and it is four numbers: how many pellets leave the barrel, how far they spread, how long before you can fire again, and how big the splat is. The rest is decoration.
Keep reading
Everyone gets EVERY gun they may use and switches with the wheel: it is an arcade game, and swapping guns mid-fight is half the fun.
The cooldown is per PLAYER, not per gun: swapping guns to dodge the wait is the first thing everybody tries, and it would make every gun as fast as the fastest one.
weapons4 keysweapons.rifle11 keysdisplay-name"lang:content.game.paintball.rifle.name"description["lang:content.game.paintball.rifle.lore"]itemSNOWBALLslot0pellets1spread0.0speed1.8cooldown-ticks6ammo-cost1splat-radius1sound"entity.snowball.throw"rifle:
shotgun, sniperweapons.grenade11 keysdisplay-name"lang:content.game.paintball.grenade.name"description["lang:content.game.paintball.grenade.lore"]itemFIRE_CHARGEslot3pellets1spread0.0speed1.1cooldown-ticks60ammo-cost6splat-radius4sound"entity.witch.throw"Reserve it for VIPs by uncommenting: permission: "shadowgames.paintball.grenade"
gun7 keysammo16The ammo you start a round with, and the ceiling.
max-ammo32regen2sSlow regeneration everywhere, so you are never dry forever.
trailstrueThe coloured trail of a pellet in flight: you can see where a shot came from, and that is what makes a firefight readable.
splattrueSplats are cosmetic in KILLS and are the score in COVERAGE.
splat-duration30ssplat-radius1ammo-stations2 keysRefill stations are marker blocks you place on the map yourself. Where you put them is a design choice: a safe station is a station nobody fights over.
radius3per-tick4markers3 keysRED_WOOL"TEAM_SPAWN"DISPENSER"AMMO_STATION"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&d&lPAINTBALL"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.paintball.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "lang:content.board.ammo", "la …+13
ENDING["&8&m ", "lang:content.board.paintball.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%ser …+8
rewards4 keyslose{ coins: 12, xp: 24 }win{ coins: 100, xp: 220 }kill{ coins: 5, xp: 10 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"block.note_block.pling"kill"entity.slime.squish"Ranked
Aim and movement, nothing else.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/parkour.yml
Minigame: Parkour 37 settings
games/parkour.ymlplugins/ShadowGames/games/parkour.yml enabledtruecountdown5smax-duration30mbuildfalsemodeFREEFREE = the arena stays open and the leaderboard is the race. RACE = everyone starts together and first across wins.
checkpoints4 keysradius2strict-ordertrueBlocks the shortcuts: almost always what you want.
sound"entity.experience_orb.pickup"beam-nexttruerules5 keysinvulnerabletruefall-damagefalsereset-below0no-flytrueno-collisiontrueWith more than two players it is essential: without it people shove each other off on the first jump.
records3 keysenabledtrueshow-on-finishtruerecords.medals3 keysgold45ssilver60sbronze90smarkers3 keysEMERALD_BLOCK"START"LIGHT_BLUE_WOOL"CHECKPOINT"GOLD_BLOCK"FINISH"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&a&lPARKOUR"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.parkour.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "lang:content.board.checkpoint", "", "lang:content.board.next-e …+12
ENDING["&8&m ", "lang:content.board.parkour.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%serve …+8
rewards6 keyslose{ coins: 5, xp: 10 }win{ coins: 50, xp: 120 }finish{ coins: 50, xp: 100 }personal-best{ coins: 100, xp: 200 }map-record{ coins: 500, xp: 1000 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds2 keysjoin"entity.experience_orb.pickup"start"entity.firework_rocket.launch"Ranked
A time on a fixed course is the definition of skill.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/quake.yml
Minigame: Quake 32 settings
games/quake.ymlplugins/ShadowGames/games/quake.yml enabledtruecountdown15smax-duration10mrespawn-delay1skills-to-win25buildfalserailgun6 keysreload1.2spiercingtrueThe beam goes through players: lining two of them up and taking both is the best moment of the match.
max-range100sound-fire"entity.firework_rocket.blast"sound-hit"entity.player.levelup"knockback0.4movement1 keyspeed0.16Quake is a game of movement, not of fighting.
powerups2 keysenabledtruerespawn30smarkers3 keysQUARTZ_BLOCK"PLAYER_SPAWN"GOLD_BLOCK"POWERUP"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&b&lQUAKE"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.quake.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "lang:content.board.kills-to-win", "lang:content.board.reload", …+13
ENDING["&8&m ", "lang:content.board.quake.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server_ …+8
rewards4 keyslose{ coins: 10, xp: 20 }win{ coins: 100, xp: 220 }kill{ coins: 5, xp: 10 }play{ coins: 5, xp: 10 }Ranked
Pure aim. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.blaze.shoot"kill"entity.firework_rocket.blast" games/race.yml
Minigame: Race 32 settings
games/race.ymlplugins/ShadowGames/games/race.yml enabledtruecountdown20smax-duration10mlaps3buildfalsemodeFOOTFOOT | BOAT | ELYTRA | HORSE
vehicle4 keysboat-typeOAKhorse-speed0.35rocket-regen3srocket-max8checkpoints4 keysradius4strict-ordertrueWithout strict order every course has a shortcut, and the shortcut is always more efficient than the course.
sound"entity.experience_orb.pickup"beam-nexttruerules3 keyspvpfalseoff-track-respawntruerecord-timestruemarkers3 keysEMERALD_BLOCK"START"LIGHT_BLUE_WOOL"CHECKPOINT"GOLD_BLOCK"FINISH"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&e&lRACE"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.race.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "lang:content.board.lap", "lang:content.board.position", "", "l …+13
ENDING["&8&m ", "lang:content.board.race.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server_i …+8
rewards3 keyswin{ coins: 90, xp: 200 }lose{ coins: 12, xp: 24 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds2 keysjoin"entity.experience_orb.pickup"start"entity.firework_rocket.launch"Ranked
The same track for everyone.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/skywars.yml
Minigame: SkyWars 50 settings
games/skywars.ymlplugins/ShadowGames/games/skywars.yml File notes
Islands in the void, chests to loot, last one standing wins. Full reference: docs/giochi/skywars.md
Every value here applies to EVERY SkyWars arena. To change one on a single map, write it again in that arena's file.
enabledtruecountdown20scountdown-full10sgrace-period10smax-duration20mend-duration10slives1No respawns: whoever dies becomes a spectator.
friendly-firefalsebuildtrueCages
A glass cube around each spawn during the countdown. Not decoration: without it half the lobby walks off the island while the other half waits, and that half takes a free kill.
cages3 keysenabledtruematerial"%team%_STAINED_GLASS"%team% becomes the team colour: one cage per colour.
remove-on-starttrueThe void
void1 keykill-below0Below this height you die.
assist-window10sWhoever landed a hit in the last N seconds takes the kill even when the void did the killing. In SkyWars those are most of the kills: crediting them to nobody would make the stat useless.
Markers
Which block means what. Place them in the schematic as you build: the engine reads them, records the position and removes them. /sg marker list skywars shows them in game.
markers5 keysBLUE_WOOL"TEAM_SPAWN"BEACON"CENTER"CHEST"LOOT_CHEST:island"TRAPPED_CHEST"LOOT_CHEST:middle"RED_WOOL"SPECTATOR_SPAWN"Scheduled events
They are what gives a match its shape. Changing them here changes the pace of every map; changing them in an arena file changes only that one.
events[{ at: 5m, type: CHEST_REFILL }, { at: 10m, type: CHEST_REFILL }, { at: 12m, type: BORDER_SHRINK, to: 120, over: 60s }, { at: 16m, type: SUDDEN_DEATH }, { at: 20m, type: END, outcome: DRAW }]+4
Loot
A weighted table. "unique" stops one chest from holding three diamond swords.
loot3 keysloot.island4 keysmin-stacks4max-stacks7clear-firsttrueentries[{ item: {…}, weight: 30 }, { item: {…}, weight: 8 }, { item: {…}, weight: 1, unique: true }, { item: {…}, weight: 12 }, { item: {…}, weight: 20, amount-range: […] }, { item: {…}, weight: 20 }, { item: {…}, weight: 10 } …+19
loot.middle4 keysmin-stacks6max-stacks10clear-firsttrueentries[{ item: {…}, weight: 20 }, { item: {…}, weight: 6, unique: true }, { item: {…}, weight: 12 }, { item: {…}, weight: 20, amount-range: […] }, { item: {…}, weight: 14 }, { item: {…}, weight: 3, unique: true }, { item: {…} …+13
loot.refill2 keysThe refill uses the middle table again, without repeating it.
inheritmiddleclear-firsttrueKits
They live in kits/skywars/. With enabled: false everyone starts the same, which is the classic version of the game.
kits5 keysenabledtruefolder"skywars"include-commontruedefault"warrior"remember-last-choicetrueSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&b&lSKYWARS"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "", "lang:content.board.kit", "&8&m …+9
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.skywars.starting", "", "lang:content.board.kit", "&8&m ", "%server_ip%"]+8
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "lang:content.board.chests", "", "lang:content.board.next-event …+12
ENDING["&8&m ", "lang:content.board.skywars.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%serve …+8
Rewards
rewards5 keyswin{ coins: 100, xp: 250 }lose{ coins: 10, xp: 25 }kill{ coins: 10, xp: 25 }play{ coins: 5, xp: 10 }per-minute{ coins: 2, xp: 4 }Sounds
Empty a value to turn it off.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.ender_dragon.growl"kill"entity.player.levelup"protection1 keyoriginal-blocks-unbreakabletrueRanked
Loot adds variance, but across a hundred matches skill wins out. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/speedbuilders.yml
Minigame: Speed Builders 32 settings
games/speedbuilders.ymlplugins/ShadowGames/games/speedbuilders.yml enabledtruecountdown20smax-duration20mrounds8lives5round4 keyspreview-time10sbuild-time60stime-decrease5smin-time20sbuilds4 keysfolder"speedbuilders"orderBY_SIZEexact-materialstruedecoys2The blocks that do nothing are what makes the game hard without stretching the time.
scoring4 keyscorrect1wrong-1pass-threshold0.9perfect-bonus50markers3 keysLIME_WOOL"PLOT"WHITE_WOOL"PREVIEW"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&e&lSPEED BUILDERS"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.speedbuilders.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "", "lang:content.board.next-event", "&7%next_event_time%", "&8 …+11
ENDING["&8&m ", "lang:content.board.speedbuilders.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", " …+8
rewards3 keyswin{ coins: 200, xp: 420 }lose{ coins: 25, xp: 50 }play{ coins: 8, xp: 16 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds2 keysjoin"entity.experience_orb.pickup"start"block.beacon.activate"Ranked
Speed and memory, both measurable.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/spleef.yml
Minigame: Spleef 30 settings
games/spleef.ymlplugins/ShadowGames/games/spleef.yml enabledtruecountdown15smax-duration8mlives1buildfalsefloor3 keysmaterialSNOW_BLOCKinstant-breaktruedropsfalsemodes5 keysdefaultclassicclassic{ kit: "spleef/shovel" }bow{ kit: "spleef/bow", arrows-break-floor: true }ender{ kit: "spleef/ender", pearl-breaks-floor: true }splegg{ kit: "spleef/splegg", egg-breaks-floor: true }rules3 keyspvpfalsekill-below0only-floor-materialtrueStops people digging the arena walls, which is the most common mistake when building a new map.
markers2 keysQUARTZ_BLOCK"PLAYER_SPAWN"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&f&lSPLEEF"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.spleef.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "", "lang:content.board.next-event", "&7%next_event_time%", "&8 …+11
ENDING["&8&m ", "lang:content.board.spleef.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server …+8
rewards3 keyswin{ coins: 60, xp: 140 }lose{ coins: 8, xp: 16 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds2 keysjoin"entity.experience_orb.pickup"start"block.snow.break"Ranked
No items, no chance: movement only.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/sumo.yml
Minigame: Sumo 28 settings
games/sumo.ymlplugins/ShadowGames/games/sumo.yml enabledtruecountdown5smax-duration5mrounds3round-duration90sbuildfalserules3 keysknockback-multiplier1.4The only real dial: 1.0 makes very long matches, 2.0 makes three-minute ones. 1.4 is where the game works.
kill-below0kit"sumo/default"shrink3 keysenabledtruestart-at30severy15smarkers2 keysQUARTZ_BLOCK"TEAM_SPAWN"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&e&lSUMO"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.sumo.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "", "lang:content.board.next-event", "&7%next_event_time%", "&8 …+11
ENDING["&8&m ", "lang:content.board.sumo.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server_i …+8
rewards4 keyskill{ coins: 15, xp: 30 }win{ coins: 50, xp: 120 }lose{ coins: 10, xp: 20 }play{ coins: 5, xp: 10 }Ranked
No gear, no randomness: just who pushes better. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"block.note_block.bell"kill"entity.player.levelup" games/tdm.yml
Minigame: Team Deathmatch 30 settings
games/tdm.ymlplugins/ShadowGames/games/tdm.yml enabledtruecountdown20smax-duration12mrespawn-delay3skills-to-win50buildfalsefriendly-firefalserules2 keysspawn-camp-penaltytruespawn-camp-radius15spawn3 keyssmarttrueThe difference between a playable game and one where you die every three seconds right after respawning.
protection3sbreak-on-attacktruemarkers3 keysRED_WOOL"TEAM_SPAWN"BARRIER"NO_BUILD"BEACON"CENTER"kits2 keysenabledtruefolder"tdm"Sidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&c&lTEAM DEATHMATCH"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "", "lang:content.board.kit", "&8&m …+9
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.tdm.starting", "", "lang:content.board.kit", "&8&m ", "%server_ip%"]+8
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_status%", "", "lang:content.board.kills", "", "lang:content.board.next-e …+11
ENDING["&8&m ", "lang:content.board.tdm.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server_ip …+8
rewards4 keyswin{ coins: 120, xp: 250 }lose{ coins: 20, xp: 40 }kill{ coins: 6, xp: 12 }play{ coins: 5, xp: 10 }Ranked
Balanced teams, a clear objective. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.ender_dragon.growl"kill"entity.player.levelup" games/tntrun.yml
Minigame: TNT Run 24 settings
games/tntrun.ymlplugins/ShadowGames/games/tntrun.yml enabledtruecountdown15smax-duration8mlives1buildfalsefloor2 keysfall-delay0.5sHalf a second: instant would mean dying on the first step.
sound"block.sand.break"rules3 keyspvpfalsekill-below0double-jumpfalsemarkers2 keysQUARTZ_BLOCK"PLAYER_SPAWN"BEACON"CENTER"kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&c&lTNT RUN"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.tntrun.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "", "lang:content.board.next-event", "&7%next_event_time%", "&8 …+11
ENDING["&8&m ", "lang:content.board.tntrun.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server …+8
rewards3 keyswin{ coins: 60, xp: 140 }lose{ coins: 8, xp: 16 }play{ coins: 5, xp: 10 }Sounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds2 keysjoin"entity.experience_orb.pickup"start"entity.tnt.primed"Ranked
No items, no chance: movement only.
Starting rating, divisions and decay live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrue games/uhc.yml
Minigame: UHC 45 settings
games/uhc.ymlplugins/ShadowGames/games/uhc.yml enabledtruecountdown60smax-duration120mlives1buildtruepvp-at20mscatter4 keysradius800min-distance150safe-surfacetrueNever inside rock, never in a lake, never above lava.
team-togethertruerules7 keysnatural-regenerationfalsegolden-apple-heal4enchanted-applesfalsenethertruestrength-nerftrueextra-dropstrueapple-drop-chance0.05scenarios10 keysThe classic scenarios. Each one is a switch, not a class.
cutcleanfalsetimberfalsebleedingfalsefirelessfalserodlessfalsegoldlessfalsebowlessfalsevanilla-plustruehastey-boysfalsediamondlessfalsemarkers2 keysBEACON"CENTER"RED_WOOL"SPECTATOR_SPAWN"events[{ at: 0m, type: BROADCAST, message: "lang:content.event.uhc-pvp-in-20" }, { at: 20m, type: PVP_ON }, { at: 40m, type: BORDER_SHRINK, to: 400, over: 10m }, { at: 60m, type: BORDER_SHRINK, to: 150, over: 10m }, { at: 80m …+6
The timeline is what makes one UHC match different from another: changing it does more than changing the map.
kits1 keyenabledfalseSidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&4&lUHC"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "&8&m ", "%server_ip%"]+7
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.uhc.starting", "&8&m ", "%server_ip%"]+6
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "lang:content.board.alive", "", "lang:content.board.kills", "", "lang:content.board.next-event", "&7%next_event_time%", "&8 …+11
ENDING["&8&m ", "lang:content.board.uhc.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%server_ip …+8
rewards5 keyswin{ coins: 400, xp: 900 }lose{ coins: 25, xp: 50 }kill{ coins: 30, xp: 70 }play{ coins: 10, xp: 20 }per-minute{ coins: 3, xp: 6 }Ranked
Long and hard, but decided by choices. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"entity.wither.spawn"kill"entity.player.levelup" games/woolwars.yml
Minigame: Wool Wars 29 settings
games/woolwars.ymlplugins/ShadowGames/games/woolwars.yml enabledtruecountdown20smax-duration15mrespawn-delay5srounds3friendly-firefalsebuildtruewool3 keysinfinitetruebreak-enemytruebreak-ownfalseYou cannot break your own wool: nobody can undo their own work by accident, and what is yours stays yours until somebody comes to take it.
markers3 keysRED_WOOL"TEAM_SPAWN"WHITE_WOOL"WOOL_AREA"BEACON"CENTER"kits3 keysenabledtruefolder"woolwars"default"warrior"Sidebar
Ready as it is. Change it freely: what you write here beats the game's built-in layout, and deleting a section brings that back. The full placeholder list is in docs/11-HUD.md A line lang:<key> is read from lang/, in the language of each player.
scoreboard2 keystitle"&d&lWOOL WARS"scoreboard.lines4 keysWAITING["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.waiting", "lang:content.board.needed", "", "lang:content.board.kit", "&8&m …+9
COUNTDOWN["&8&m ", "lang:content.board.map", "lang:content.board.players", "", "lang:content.board.woolwars.starting", "", "lang:content.board.kit", "&8&m ", "%server_ip% …+8
RUNNING["&8&m ", "lang:content.board.map", "lang:content.board.time", "", "%repeat_teams%%team_color%%team_name% &8» &f%team_extra% &8(&f%team_score%&8)", "", "lang:content.board.kills", "", "lang: …+11
ENDING["&8&m ", "lang:content.board.woolwars.winner", "", "lang:content.board.your-kills", "lang:content.board.place", "", "lang:content.board.thanks", "&8&m ", "%serv …+8
rewards4 keyswin{ coins: 120, xp: 260 }lose{ coins: 20, xp: 40 }kill{ coins: 6, xp: 12 }play{ coins: 5, xp: 10 }Ranked
Teams, an objective, no random loot. The general settings (starting rating, divisions, decay) live in config.yml under 'ranked'. All that is decided here is whether this game hands out a rating.
ranked1 keyenabledtrueSounds
Three moments only. Empty a value to turn it off, or point it at a sound from your own resource pack.
sounds3 keysjoin"entity.experience_orb.pickup"start"block.note_block.pling"kill"entity.player.levelup"Languages
The texts the plugin shows to players, one file per language.
lang/
Texts and messages 2 files
lang/plugins/ShadowGames/lang/ File notes
ShadowGames - English Every key can have four independent variants:
key -> chat key@title -> title key@subtitle -> subtitle key@actionbar -> action bar key@sound -> sound
Emptying one turns it off. That is how you silence a message without touching any code: match.player-joined: ""
Colours use the familiar ampersand codes. The richer tags still work:
<gradient:#FFD700:#FFA500>GOLD</gradient>
A key missing here is read from the copy of this language inside the plugin jar, then from the default language, then from English; only a key missing everywhere shows in braces, so the gap is obvious.
Every message the plugin shows to players, one file per language. The keys are not listed one by one: here are the files, how many texts they hold and the placeholders they use.
| File | Language | Texts |
|---|---|---|
lang/en_US.yml reference | — | 1,847 |
lang/it_IT.yml | — | 1,847 |
Most used placeholders
The plugin replaces them with the right value: leave them written as they are.
%prefix%%count%%player%%time%%id%%game%%winner%%countdown%%arena%%name%%total%%team%%max%%type%
Message groups
prefix1command21play16match52death11hud93kit11shop4spectator6party19queue6vote2reward21progression2top3stats1stat134gui115lobby4sign10setup31arena86admin292games7category5game195cosmetic24common4state6leaderboard1ranked10achievement5tournament38network14parkour43license49locked4hologram5chatgames73content423
Other
Ready-made content, examples, imports: the files you copy and edit as a model.
import/bedwars1058.yml
Import from: bedwars1058 21 settings
import/bedwars1058.ymlplugins/ShadowGames/import/bedwars1058.yml File notes
An import is not a perfect conversion and cannot be: every plugin saves different things and none of them saves what our marker system needs. What this file does is say EXACTLY where we read from: if a new version renames a key, you fix it here instead of waiting for a plugin update.
Every imported arena arrives DISABLED, with a list of what could not be carried over. Check it with /sg check and turn it on with /sg enable.
Usage: /sg import bedwars1058 "plugins/BedWars1058"
formatbedwars1058gamebedwarsdescription"lang:content.import.bedwars1058"detect[Arenas, arenas]If one of these exists inside the given folder, the format is recognised on its own by /sg import auto <folder>.
source"Arenas/*.yml"The files to read, relative to the folder given.
fields7 keysWhere each value sits in the source file.
id"name"world"worldName"min-players"minPlayers"max-players"maxPlayers"team-size"maxInTeam"lobby"waitingLocation"spectator"spectatorLocation"teams7 keyspath"Team"The section whose keys are the team names.
color"Color"spawn"Spawn"bed"Bed"shop"Shop"upgrade"Upgrade"teams.generators2 keysTeam generators: resource name -> key in the source file.
IRON"Iron"GOLD"Gold"generators1 keyShared generators: every key is a resource, every value a list of positions.
path"generator" import/bedwars2023.yml
Import from: bedwars2023 21 settings
import/bedwars2023.ymlplugins/ShadowGames/import/bedwars2023.yml File notes
An import is not a perfect conversion and cannot be: every plugin saves different things and none of them saves what our marker system needs. What this file does is say EXACTLY where we read from: if a new version renames a key, you fix it here instead of waiting for a plugin update.
Every imported arena arrives DISABLED, with a list of what could not be carried over. Check it with /sg check and turn it on with /sg enable.
Usage: /sg import bedwars2023 "plugins/BedWars2023"
formatbedwars2023gamebedwarsdescription"lang:content.import.bedwars2023"detect[Arenas, arenas]If one of these exists inside the given folder, the format is recognised on its own by /sg import auto <folder>.
source"Arenas/*.yml"The files to read, relative to the folder given.
fields7 keysWhere each value sits in the source file.
id"name"world"worldName"min-players"minPlayers"max-players"maxPlayers"team-size"maxInTeam"lobby"waitingLocation"spectator"spectatorLocation"teams7 keyspath"Team"The section whose keys are the team names.
color"Color"spawn"Spawn"bed"Bed"shop"Shop"upgrade"Upgrade"teams.generators2 keysTeam generators: resource name -> key in the source file.
IRON"Iron"GOLD"Gold"generators1 keyShared generators: every key is a resource, every value a list of positions.
path"generator" import/mbedwars.yml
Import from: mbedwars 21 settings
import/mbedwars.ymlplugins/ShadowGames/import/mbedwars.yml File notes
MBedwars keeps its arenas in plugins/MBedwars/arenas/<name>.yml with a flatter structure than 1058. The keys below are the 5.x ones: if your version uses others, open them and fix them, the rest of the mechanism does not change.
Usage: /sg import mbedwars "plugins/MBedwars"
formatmbedwarsgamebedwarsdescription"lang:content.import.mbedwars"detect[arenas, arena]source"arenas/*.yml"fields7 keysid"name"world"world"min-players"min-players"max-players"max-players"team-size"players-per-team"lobby"lobby"spectator"spectator-spawn"teams7 keyspath"teams"color"color"spawn"spawn"bed"bed"shop"shop-villager"upgrade"upgrade-villager"teams.generators2 keysIRON"iron-spawner"GOLD"gold-spawner"generators1 keypath"spawners" import/skywarsreloaded.yml
Import from: skywarsreloaded 16 settings
import/skywarsreloaded.ymlplugins/ShadowGames/import/skywarsreloaded.yml File notes
SkyWars is both the easiest and the most incomplete case: the island spawns carry over well, the chests do not, because in the source format they are blocks in the world and not coordinates in a file.
The right way to finish an arena imported from here is to open the world with /sg setup <id> and place the LOOT_CHEST markers with the wand; if instead you want the real advantage of schematics (different islands every match) it pays to cut an island with /sg schem save and rebuild the arena with /sg build.
Usage: /sg import skywarsreloaded "plugins/SkyWarsReloaded"
formatskywarsreloadedgameskywarsdescription"lang:content.import.skywarsreloaded"detect[maps, arenas]source"maps/*.yml"fields8 keysid"displayname"world"world"min-players"minplayers"max-players"maxplayers"team-size"teamsize"lobby"waitingroom"spectator"spectatorspawn"center"center"teams3 keyspath"spawns"color"color"spawn"spawn" achievements/
Achievements 15 files
achievements/plugins/ShadowGames/achievements/ 15 files with the same structure. Below, the most commented one in full, as a model; the others are listed by name.
bedwars/bed-breaker.ymlbedwars/finisher.ymlbridge/scorer.ymlglobal/champion.ymlglobal/marksman.ymlglobal/persistent.ymlglobal/rich.ymlglobal/slayer.ymlglobal/streaker.ymlglobal/veteran.ymlmurdermystery/detective.ymlparkour/runner.ymlskywars/island-hopper.ymlskywars/void-hunter.ymltntrun/survivor.yml
Example achievements/global/veteran.yml
File notes
An achievement is a threshold on a stat that already exists: that is the whole idea, and it is what makes them nearly free. Nothing new is counted, nothing new is saved, and any stat the engine already keeps can become a milestone in eight lines of YAML.
The folder is the game. "global" counts across every game at once.
The names say lang:<key>: the text is in lang/, in the language of each player. Your own text instead is shown as it is, to everybody.
idveterandisplay-name"lang:content.achievement.veteran.name"description["lang:content.achievement.veteran.lore"]iconCLOCKstatplayedbroadcasttruetiers[{ target: 10, name: "lang:content.achievement.veteran.tier-1", coins: 100, xp: 50 }, { target: 100, name: "lang:content.achievement.veteran.tier-2", coins: 500, xp: 250 }, { target: 500, name: "lang:content.achievement …+3
arenas/
The shipped arenas 14 files
arenas/plugins/ShadowGames/arenas/ 14 files with the same structure. Below, 2 of them in full, one for each different shape; the others are listed by name.
battleroyale/highlands.ymlbedwars/fortini.ymlbingo/outback.ymlduels/piazzale.ymlgungame/chiostro.ymlkitpvp/cortile.ymloitc/loggia.ymlparkour/scala.ymlquake/atrio.ymlskywars/orbita.ymlspleef/disco.ymlsumo/pedana.ymltntrun/torre.ymluhc/wildlands.yml
The folder’s README
Arenas live here, one folder per game:
arenas/skywars/ruins.yml arenas/bedwars/castle.yml
The file name is the arena's id. Deleting the file deletes the arena; copying it to another server, together with its schematics, recreates it exactly. Keeping it in git is the right way to work on it with someone else.
You do not need to write these files by hand:
/sg create <game> <id>
opens a setup session that writes them for you, with comments. They are still normal YAML files, and editing them by hand is expected: after a change, /sg reload arenas is all it takes.
See docs/24-PRIMO-AVVIO.md to create your first arena in ten minutes.
THE FOURTEEN ARENAS THAT ARE ALREADY HERE
Right after installation this folder is not empty. Fourteen of the thirty-two games can be played without building anything, and they get here in two different ways.
Three do not need any map, because they have the server generate their world:
arenas/uhc/wildlands.yml arenas/bingo/outback.yml arenas/battleroyale/highlands.yml
UHC scatters the players on its own, Battle Royale drops them in on elytra, Bingo goes hunting in normal terrain.
The other eleven do have a floor, and it comes with them as a schematic inside schematics/:
arenas/skywars/orbita.yml four islands and a centre arenas/bedwars/fortini.yml four bases with beds arenas/sumo/pedana.yml quartz disc that shrinks arenas/spleef/disco.yml snow disc arenas/tntrun/torre.yml three floors of sand and TNT arenas/parkour/scala.yml spiral of thirty jumps arenas/duels/piazzale.yml \ arenas/kitpvp/cortile.yml | the same courtyard under five names: arenas/oitc/loggia.yml | all five read the same block arenas/gungame/chiostro.yml | as a spawn point arenas/quake/atrio.yml /
Nobody built those schematics in creative: they are computed by tools/genera_schematic.py, which writes the .schem files directly. An island is a cone of dirt with a marker on top, and four cones in a circle make a SkyWars. You can tell they came out of a calculation, and that is fine: they are there so you can play on day one, not to show off. Open them with /sg schem paste, look at them, then redo them your own way.
That leaves eighteen games that want a map built by hand, and there is no honest way around it: CTF wants two bases with flags, Murder Mystery wants a mansion with blind corners. For those, /play does not leave you stranded, it tells you what to type:
/sg create <game> <name> opens the setup session /sg wand the wand for the markers /sg finish checks the arena and switches it on
The fourteen are normal files and they are yours: open them, change the numbers, rename them. Deleting them is not enough to remove them - like the shipped kits and shops they come back at the next restart - so to switch one off, set enabled: false in it.
THE WORLD SEED (world.seed)
Only applies to arenas that have the server generate their world:
world: mode: GENERATED generator: NORMAL # or the name of a world generator plugin seed: 0
seed: 0 (or no line) a new world for every match. seed: 1234567890 always that same world.
Zero is not the seed zero: it means "no seed", and it is the default because a UHC or a Bingo lives on having a different map every time. With a fixed seed the second match is identical to the first, same village and same caves, and whoever has already played it goes straight there.
A number written there pins the map down: that is for a tournament, where every group has to play the same terrain, and for someone who is measuring a border and wants to find yesterday's spot again.
On world.generator: VOID there is nothing to generate and the seed is not looked at; on FLAT the world is flat anyway.
Example arenas/battleroyale/highlands.yml
Battle Royale - Highlands
File notes
Arena shipped with the plugin. There is nothing to build: the server generates the world, players come down from above on elytra and land wherever they like, and the shrinking zone brings them back together on its own. It is the only one of the thirty-two games that places its players by itself, from the air, and that is why it can ship without a map.
It is a normal YAML file: change it, then /sg reload arenas.
idhighlandsgamebattleroyaledisplay-name"lang:content.arena.battleroyale.highlands.name"description"lang:content.arena.battleroyale.highlands.description"author"ShadowMC"enabledtrueiconELYTRAplayers3 keysmin4max20team-size1world6 keysmodeGENERATEDenvironmentNORMALgeneratorNORMALNORMAL, not VOID: people land here. There has to be ground below, and there has to be wood and stone, because this map has no placed chests (the reason is explained below).
No world.seed, and on purpose: without that line the engine rolls a new one for every match, so the ground under the drop is never the same. A number there pins it down, for a tournament.
border500The zone starts from here: BattleRoyaleMatch reads world.border and falls back to 500 only if it is zero. The phases in games/battleroyale.yml go down 400 -> 250 -> 150 -> 60 -> 20 -> 0, so starting from 500 gives a first squeeze you can feel without it being a massacre.
time6000Fixed noon: in match worlds the daylight cycle is off (worlds.gamerules in config.yml). In daylight you can see who is coming down.
weather-stormfalseNo LOOT_CHEST points and no DROP_ZONE, and that is not an oversight. They are fixed coordinates, and here the generator decides the ground: a chest written by hand ends up buried inside a hill or hanging in the air over a lake, and either way the player never finds it. Without DROP_ZONE, BattleRoyaleMatch.dropSupplies() goes to its fallback, which works out the ground height on the spot with getHighestBlockYAt(): the supply chests - 5, 10 and 15 minutes, already in the game file - always land on the ground. Here the fallback is better than the marker. On a built map, on the other hand, markers are the right choice.
points2 keysCENTER[{ at: […] }]Required: BattleRoyaleGame asks for exactly one CENTER, and it is the centre of the zone. Its height is never used to stand anyone on - the drop takes everyone to 200 and the chests settle on the ground - so 64 is as good as any other: it is written like this so that it reads as "sea level, 0 0".
SPECTATOR_SPAWN[{ at: […] }]Spectators stay in the air above the zone (the engine adds 8 blocks by itself). They are in SPECTATOR gamemode: they are fine in the air, and on the ground, on terrain nobody built, they would end up inside a hill.
Example arenas/sumo/pedana.yml
Sumo - Pedana
File notes
A quartz disc above the void, two places, three rounds.
Two things in here are not obvious and are worth explaining.
1. world.region. SumoMatch reads the edge of the platform from
there, and without that block the shrinking never starts: the round reaches 90 seconds and ends in a draw even between two players who have no intention whatsoever of falling.
2. markers. For Sumo QUARTZ_BLOCK means TEAM_SPAWN, but the
platform IS made of quartz_block, because at the end of a round SumoMatch puts back the blocks eaten by the shrinking with setType(QUARTZ_BLOCK), and with any other material the platform would change its look from the second round on. Leaving the rule as it is, the 123 blocks of the platform would be 123 spawn points and the paste would remove them all: only the void would be left. So the rule is emptied and the spawn moves to DIAMOND_BLOCK.
idpedanagamesumodisplay-name"lang:content.arena.sumo.pedana.name"description"lang:content.arena.sumo.pedana.description"author"ShadowMC"enabledtrueiconSLIME_BLOCKplayers3 keysmin2max2team-size1world8 keysmodeGENERATEDenvironmentNORMALgeneratorVOIDspawn-height100border100time6000weather-stormfalseworld.region2 keysmin[-6, 100, -6]max[6, 100, 6]build1 keycomponents[{ id: pedana, layout: {…}, schematic: {…} }]markers2 keysQUARTZ_BLOCK""DIAMOND_BLOCK"TEAM_SPAWN"rules1 keykill-below90 cosmetics/
Cosmetics 29 files
cosmetics/plugins/ShadowGames/cosmetics/ 29 files with the same structure. Below, 2 of them in full, one for each different shape; the others are listed by name.
cage/emerald.ymlcage/glass.ymlcage/gold.ymlcage/ice.ymlcage/obsidian.ymldeath-effect/ashes.ymldeath-effect/farewell.ymldeath-effect/smoke.ymlkill-effect/blood.ymlkill-effect/confetti.ymlkill-effect/explosion.ymlkill-effect/lightning.ymlkill-effect/souls.ymlprojectile-trail/arcane.ymlprojectile-trail/smoke.ymlprojectile-trail/sparks.ymltrail/dripping.ymltrail/ender.ymltrail/flame.ymltrail/hearts.ymltrail/magic.ymltrail/notes.ymltrail/snow.ymlvictory-dance/flames.ymlvictory-dance/hearts.ymlvictory-dance/spiral.ymlwin-effect/fireworks.ymlwin-effect/thunder.ymlwin-effect/totem.yml
Example cosmetics/kill-effect/lightning.yml
File notes
A cosmetic is a file like a kit: id, name, icon, unlock rule. The effects go through the same engine as class abilities, so anything a class can do a cosmetic can do too -- except change a match: there is no way here to give damage, speed or any advantage.
display-name and description say lang:<key>: the text is in lang/, in the language of each player. Your own text instead is shown as it is.
idlightningdisplay-name"lang:content.cosmetic.kill-effect.lightning.name"description["lang:content.cosmetic.kill-effect.lightning.…]iconLIGHTNING_RODunlock1 keycost10000effect[{ type: LIGHTNING, target: VICTIM }, { type: SOUND, value: ENTITY_LIGHTNING_BOLT_THUNDER, target: VICTIM }]+1
Example cosmetics/trail/ender.yml
idenderdisplay-name"lang:content.cosmetic.trail.ender.name"description["lang:content.cosmetic.trail.ender.lore"]iconENDER_PEARLparticlePORTALcount6unlock1 keylevel20 kits/
Kits, one per file 30 files
kits/plugins/ShadowGames/kits/ 30 files with the same structure. Below, 2 of them in full, one for each different shape; the others are listed by name.
bedwars/default.ymlbridge/default.ymlcommon/default.ymlctf/defender.ymlctf/runner.ymlctf/support.ymlduels/classic.ymlduels/sumo.ymlhideandseek/seeker.ymlinfection/survivor.ymlinfection/zombie.ymlkitpvp/archer.ymlkitpvp/warrior.ymlkoth/guardian.ymlkoth/raider.ymlkoth/sniper.ymlmanhunt/hunter.ymlmanhunt/runner.ymlskywars/archer.ymlskywars/builder.ymlskywars/warrior.ymlspleef/bow.ymlspleef/shovel.ymlsumo/default.ymltdm/assault.ymltdm/sniper.ymltdm/soldier.ymlwoolwars/builder.ymlwoolwars/swift.ymlwoolwars/warrior.yml
Example kits/common/default.yml
Default kit
File notes
It lives in kits/common/, so every game that allows kits offers it.
The item syntax is the same everywhere in the plugin: kits, shops, loot, rewards and menu icons. See docs/09-TEAM-KIT-CLASSI.md
display-name and description say lang:<key>: the text is in lang/, in the language of each player. Write your own text instead and that one is shown, the same for everybody.
iddefaultdisplay-name"lang:content.kit.common.default.name"description["lang:content.kit.common.default.lore"]iconSTONE_SWORDslot10unlock1 keydefaulttrueitems2 keys0{ material: STONE_SWORD }1{ material: COOKED_BEEF, amount: 4 }armor2 keyschestplate{ material: LEATHER_CHESTPLATE, unbreakable: true }+1
Leather with no explicit colour takes the team's: that is how a four-team map needs only one kit.
boots{ material: LEATHER_BOOTS, unbreakable: true } Example kits/bridge/default.yml
File notes
The kit is fixed: The Bridge is a game of skill, not of gear. The blocks and the arrows regenerate on their own.
iddefaultdisplay-name"lang:content.kit.bridge.default.name"iconIRON_SWORDunlock{ default: true }items5 keys0{ material: IRON_SWORD, unbreakable: true }1{ material: BOW, enchants: { infinity: 1 }, unbreakable: true }+1
2{ material: DIAMOND_PICKAXE, enchants: { efficiency: 2 }, unbreakable: true }+2
3{ material: GOLDEN_APPLE, amount: 8 }8{ material: ARROW }armor4 keyshelmet{ material: LEATHER_HELMET, unbreakable: true }chestplate{ material: LEATHER_CHESTPLATE, unbreakable: true }+1
leggings{ material: LEATHER_LEGGINGS, unbreakable: true }boots{ material: LEATHER_BOOTS, unbreakable: true } music/
Music 5 files
music/plugins/ShadowGames/music/ 5 files with the same structure. Below, the most commented one in full, as a model; the others are listed by name.
chase.ymlcustom-pack-example.ymlparty.ymltension.ymlvictory.yml
Example music/custom-pack-example.yml
Your own music, the real thing
File notes
A plugin cannot send an audio file to a client: the client has to already have it. So this is the route, and it is three steps:
1. Put your .ogg in a resource pack, under
assets/<yournamespace>/sounds/music/party.ogg
2. Declare it in the pack's sounds.json:
{
"music.party": {
"category": "record",
"sounds": [ { "name": "<yournamespace>:music/party",
"stream": true } ]
}
}
"stream": true matters for long tracks: without it the client
loads it all into memory.3. Write the key below, and make sure the server hands out the pack
(server.properties -> resource-pack).
A player who refuses the pack hears nothing: that is why the other example tracks use note block melodies, which work for everyone, always.
This file is off on purpose: uncomment 'sound' once you really have the pack, or whoever unpacks it ends up with a silent track in the playlist.
idpack_exampledisplay-name"lang:content.music.pack_example.name"sound: "shadowgames:music.party"
length2m30sHow long the track lasts. The engine needs it to know when the track ended by itself, since the server cannot tell otherwise.
volume1.0pitch1.0melody4 keysA fallback that plays for everyone even without the pack: if 'sound' is missing or the player has no pack, this is what they hear.
tempo5instrumentHARPlooptruenotes"C4 E4 G4 E4 F4 A4 C5 A4 G4 B4 D5 B4 C5 . . ." parkour/
Parkour courses 3 files
parkour/plugins/ShadowGames/parkour/ 3 files with the same structure. Below, the most commented one in full, as a model; the others are listed by name.
easy.ymlhard.ymlmarathon.yml
Example parkour/easy.yml
A lobby parkour course
File notes
Not a match: furniture. Always there, anybody can jump on it at any moment, and stepping off costs nothing. It is what people do while waiting for a game to start.
This file is the PROFILE of a course -- name, difficulty, mode, time limit, reward. The route is not in it and cannot be: a route is coordinates in a lobby we have never seen, and a guessed coordinate is a course that drops the player into the void.
So until somebody walks it this course does NOT appear in /parkour, nor in the menu, nor in the tab completion. A course a player can pick that teleports him nowhere is worse than a course that is not there. It does appear in /sg parkour, with the command that finishes it, which is the one place where an unfinished thing is useful.
You do not write the route by hand: you walk it.
/sg parkour set easy start <- where you stand now /sg parkour set easy checkpoint <- at every landing /sg parkour set easy finish <- at the end
Those three write into THIS file: the file is named after the id, so easy.yml is the course "easy". Name, difficulty, level, time and reward you can still change by hand.
ideasyenabledtrueenabled: false switches it off completely: it disappears from /sg parkour too and is never seen again. Use it if you do not want this course: deleting the file is not enough, at the next restart it comes back from the jar like the shipped kits and shops.
display-name"lang:content.parkour.easy.name"description["lang:content.parkour.easy.lore"]difficulty"easy"level1modeCHECKPOINTHow the course behaves:
CHECKPOINT the checkpoints catch you, the attempt restarts when you
leave the course. This one.
PERSISTENT as above, but progress survives: you leave at checkpoint
7, come back tomorrow, restart from 7.
ONESHOT no safety net: one fall and you are back at the start.time-limit0How long you have to finish it.
0 (or no line) = UNLIMITED. The default, and what nearly every lobby course wants: a pastime, not a test. A value (5m, 90s, 1h) turns it into a timed challenge: warnings at one minute, thirty and ten seconds, then back to the start.
You can change it in game too: /sg parkour time easy 5m
/sg parkour time easy 0
The route -- start, finish, checkpoints -- is written by /sg parkour set. You do not find it here as an empty line to fill in: an empty field reads like something somebody forgot, and this one is waiting for a walk instead.
Positions are "world,x,y,z[,yaw,pitch]", should you want to touch them up:
start: "lobby,10,70,10,90,0" finish: "lobby,60,80,10,90,0" checkpoints: - "lobby,20,72,10"
radius1.5How close you have to pass a checkpoint for it to count. 1.5 is generous; below 1.0 it gets frustrating.
Below this height you have fallen and go back to the last checkpoint. Remove the line and "10 blocks below the start" is used. fall-y: 60
effects{ }Effects active while you run: it is what makes one course feel different from another without needing a different engine. The number is the level (1 = I).
checkpoint-commands[ ]Commands run at EVERY checkpoint reached. Placeholders: %player% %course% %checkpoint%
reward3 keysThe reward pays EVERY TIME you finish, not just the first. A course that pays once is a course you run once, and the point of a lobby course is that it gets run for months.
coins50xp25commands[ ]To reserve it: the node needed to run it. permission: "shadowgames.parkour.facile"
shops/
Shops, one per file 2 files
shops/plugins/ShadowGames/shops/ 2 files with the same structure. Below, the most commented one in full, as a model; the others are listed by name.
bedwars.ymleggwars.yml
Example shops/bedwars.yml
BedWars shop
File notes
Two screens: the items (here) and the team upgrades (at the bottom).
TWO PROPERTIES THAT CHANGE EVERYTHING
tier-group + tier
Buying the next tier removes the previous one from the shop and from the inventory. Nobody carries three swords, and the shop does not fill up with useless entries halfway through.
permanent
The item comes back after death. True for armour and tools, not for blocks: dying should cost resources, not the set.
%team% inside a material becomes the team colour, so RED_WOOL, BLUE_WOOL and so on without writing them all out.
title"lang:content.shop.title"rows6categories[{ id: blocks, slot: 1, icon: TERRACOTTA, name: "lang:content.shop.category.blocks" }, { id: melee, slot: 2, icon: GOLDEN_SWORD, name: "lang:content.shop.category.melee" }, { id: armor, slot: 3, icon: CHAINMAIL_BOOTS, n …+6
items7 keysblocks[{ slot: 19, cost: {…}, give: {…} }, { slot: 20, cost: {…}, give: {…} }, { slot: 21, cost: {…}, give: {…} }, { slot: 22, cost: {…}, give: {…}, lore-extra: […] }, { slot: 23, cost: {…}, give: {…} }, { slot: 24, cost: {…} …+5
melee[{ slot: 19, cost: {…}, give: {…}, tier-group: sword, tier: 1 }, { slot: 20, cost: {…}, give: {…}, tier-group: sword, tier: 2 }, { slot: 21, cost: {…}, give: {…}, tier-group: sword, tier: 3 }, { slot: 22, cost: {…}, giv …+3
armor[{ slot: 19, cost: {…}, give-armor: CHAINMAIL, permanent: true, tier-group: armor, tier: 1, lore-extra: […] }, { slot: 20, cost: {…}, give-armor: IRON, permanent: true, tier-group: armor, tier: 2 }, { slot: 21, cost: {… …+2
tools[{ slot: 19, cost: {…}, give: {…}, permanent: true, tier-group: pickaxe, tier: 1 }, { slot: 20, cost: {…}, give: {…}, permanent: true, tier-group: pickaxe, tier: 2 }, { slot: 21, cost: {…}, give: {…}, permanent: true, t …+5
ranged[{ slot: 19, cost: {…}, give: {…} }, { slot: 20, cost: {…}, give: {…} }, { slot: 21, cost: {…}, give: {…} }, { slot: 22, cost: {…}, give: {…} }]+3
potions[{ slot: 19, cost: {…}, give: {…} }, { slot: 20, cost: {…}, give: {…} }, { slot: 21, cost: {…}, give: {…} }]+2
utility[{ slot: 19, cost: {…}, give: {…} }, { slot: 20, cost: {…}, give: {…} }, { slot: 21, cost: {…}, give: {…} }, { slot: 22, cost: {…}, give: {…} }, { slot: 23, cost: {…}, give: {…} }, { slot: 24, cost: {…}, give: {…}, lore …+5
Team upgrades
An upgrade is not an item: it is a property of the team, and it also covers items bought later and players who respawn. Somebody who buys Sharpness and then a new sword expects the sword to be sharp: it is the most reported bug of every BedWars ever written.
upgrades3 keystitle"lang:content.shop.upgrades-title"rows4items