Content generated with AI — it may contain mistakes.

Reference

Database

The seventy-two tables, which module owns each, what they hold, and the schema quirks worth knowing.

Every module that stores anything opens its own tables, and a module that is off creates none. All of them go through one connection, configured in database.yml.

Tables are created from the record definitions with CREATE TABLE IF NOT EXISTS, the first time each repository is opened. There is no schema file to apply and no migration to run.

Movement

TableKeyHolds
spawn_dataidThe spawn location. One row
homesid = a UUIDThe owner (indexed), name, location and icon
sc_warpsidDisplay name, enabled, cost, permission, icon, location
sc_warp_cooldowns<playerUuid>:<warpId>When the player last used that warp
tpa_settingsplayeruuidWhether they accept requests, auto-accept and confirm
rtp_cooldownsidPlayer (indexed), world, when it was used
sc_backthe player UUIDWhere they last left from, and when

/back and the warp cooldowns are rows rather than memory because a warp can put the player on another server, and the server they arrive on has to know both.

Combat

TableKeyHolds
player_statsplayeruuidName, kills, deaths, best kill streak
stat_cache<uuid>:<statId>One cached stat value per player, for the leaderboards
sc_stat_counters<uuid>:<key>Every counter a module keeps: player name, counter key, amount
sc_bountiesidTarget, placer, amount, when it was placed, when it expires, anonymous
sc_gravesidOwner, killer, location, the block the grave replaced, the items, the experience, when it expires and until when it is protected

player_stats carries three descending indexes — on kills, deaths and best streak — so a leaderboard is a bounded read. sc_stat_counters is what a COUNTER stat in stats.yml, a mission and a season all read, so counting something new never needs a table of its own.

A grave's items live in its row and nowhere else: collecting it deletes the row, and only the collection whose delete removed something pays out.

Duel rooms

TableKeyHolds
sc_duel_roomsidServer, display name, region, exit location, players required, border material, effects, rewards, enabled
sc_duel_room_bordersthe room idThe world, material and blocks of the border

Progression

TableKeyHolds
rankup_dataplayeruuidCurrent rank, completed ranks, prestige level
playtime_dataplayeruuidTotal playtime and the claimed rewards
farming_dataplayeruuidPer-category counts and claimed milestones
reclaim_dataplayeruuidWhat has been claimed once, and the last claim per section
player_join_dataid = the player UUIDFirst join, join number, total joins

Missions and seasons

TableKeyHolds
sc_missions<uuid>|<pool>|<period>|<missionId>One mission a player was dealt: pool, period, mission, the counter value it started from, the target, claimed
sc_seasons<track>:<period>The season a track is counting right now, and when it started
sc_season_results<seasonId>:<position>A closed season's board: track, period, position, player, score, when it closed

Rewards and votes

TableKeyHolds
sc_rewardsidDisplay name, description, permission, type, cooldown, maximum claims, enabled, items, commands, icon, order
sc_reward_claims<playerId>:<rewardId>Last claim, claim count, streak, the last period claimed
sc_votersthe player UUIDName, total votes, streak, best streak, the last day voted, the last vote's time
sc_votesidA vote not yet paid: username, service, when, the party it counts towards
sc_vote_logidEvery vote received: username, service, when, party number
sc_vote_partythe party numberWhen the party being filled started

Kits and crates

TableKeyHolds
sc_kitsidThe whole kit: items, commands, cooldown, uses, icon, order, flags
sc_kit_player_data<playerId>:<kitId>Last claim and use count. Player indexed
sc_cratesidRewards, animation, key icon and name, pity, the icon and hologram offsets
sc_crate_blocksidWhich crate a placed block is
sc_crate_players<uuid>:<crateId>Keys held, openings since pity, total opened. Player indexed
sc_crate_openingsidThe history: who, which crate, which reward, which tier, when. Player indexed
sc_loot_chest_templatesidThe loot table and who made it
sc_loot_chestsidA placed chest: server, template, location, cooldown, last refill
sc_item_spawnersidServer, locations, the interval range and the loot table

Zones

TableKeyHolds
sc_minesidServer, the region, type, composition, levels, reset settings, teleports, flags
sc_mine_broken_blocksidOne row per block mid-regeneration in a realistic mine. Mine indexed
sc_regen_zonesidServer, the region, mode, intervals and flags
sc_afk_zonesidServer, the region, reward interval and reward list
survival_portalsidThe region, the destination and the command list
sc_jumpadsidServer, power, direction, glide, and the block locations
sc_powerup_zonesidServer, mode, area or locations, timings and the power-up entries

survival_portals is the one table with the survival_ prefix rather than sc_.

Economy

TableKeyHolds
sc_currenciesidOne currency as set up in game: kind, order, names, symbol, icon, decimals, formats, aliases, item, starting and maximum balance, permission, transfer and exchange rules, leaderboard, networked, commands
sc_economy_settingsone rowExperience as a currency, the currency published to Vault and whether it is forced, whether the ledger is on
exylia_balances<uuid>|<currency>One player's balance in one stored currency: player, name, currency, amount
exylia_balance_pendinga generated numberA change another server could not apply itself: player, currency, amount, whether it replaces the balance, reason, who made it
exylia_ledgera generated numberEvery stored operation: player, currency, change, the balance after it, reason, who made it, server, when
sc_boostersidOwner (empty for a global booster), type, source, multiplier, duration, when it expires (0 while not started), who granted it

An empty sc_economy_settings is a server whose currencies have not been set up yet. A balance row is written only by the server its player is on; every other server leaves a pending row, which that server folds in and deletes. See Economy.

Shop

TableKeyHolds
sc_shop_categoriesidDisplay name, description, icon, position, permission, currency, rotation, discount, enabled
sc_shop_productsidCategory, position, type, item or commands, currency, buy and sell prices, dynamic pricing, stock and restock, buy and sell limits, permission, discount, enabled
sc_shop_limitsidHow much one player bought and sold of one product in the current limit period
sc_shop_logidEvery purchase and sale: player, product, category, action, amount, unit price, total, currency, when

Market

TableKeyHolds
sc_market_listingsidSeller, item, amount, price, material, currency, when it expires
sc_auctionsidSeller, item, amount, material, currency, starting price, buyout, top bid and bidder, bids, when it ends
sc_ordersidBuyer, item, material, amount wanted, delivered, collected, price, currency, closed, when it expires
sc_order_locksthe order idAn empty row. Whoever deletes it may change the order, then writes it back

Trade and vaults

TableKeyHolds
sc_vaults<uuid>|<number>One vault of one player: owner, its number (the vault_number column), contents

A trade keeps nothing: it lives in memory until it completes or is cancelled.

Protections

TableKeyHolds
sc_protectionsidServer, owner, name, tier, world, bounds, core block, hidden, home, and in one data column its roles, members, clan grants, per-player overrides, flags, access, raid state, subregions and rents
sc_protection_accountsthe protection idBank balance, when the next upkeep payment is due, when it was abandoned
sc_protection_account_locksthe protection idAn empty row. Whoever deletes it may change the account
sc_protection_listingsthe protection idA protection for sale: seller, price, currency
sc_protection_rent_offers<protectionId>:<target>A plot, or the whole protection, offered for rent: owner, price, currency, period, maximum periods
sc_protection_logsidWhat happened inside a protection: server, who, action (the log_action column), detail, where, the day and time
sc_protection_warpsthe protection idThe warp a protection publishes: name, icon, description, location
sc_protection_warp_ratings<warpId>:<player>One player's stars for one warp
sc_protection_warp_visits<warpId>:<player>:<day>One visit per player per day
sc_protection_seenthe player UUIDWhen they last joined or left any server — how upkeep tells an abandoned protection from a quiet one

See Protections and Protection economy.

Quality of life

TableKeyHolds
player_utils_dataplayeruuidWhether flight and night vision are on
sc_player_settingsplayeruuidThe preferences the player has turned off

Optimization

TableKeyHolds
sc_item_updatesthe group nameThe item that is replaced and the item it becomes

Modules that store nothing

blocked-items, death, enchantments, kill-rewards, near, optimization, repair, scheduled-commands, sell-wands and trade. Kill streaks are counted in memory and lost on a restart.

Things worth knowing before you touch a table by hand

A stored location can name another server

Homes, warps, portals and crate blocks store server,world,x,y,z,yaw,pitch, where - means "this server". That is what makes /home and /warp work across a network. A row naming a server that is not this one has no local location at all — which is why the API offers a teleport method rather than coordinates.

Two tables have both `createdat` and `created_at`

sc_bounties and sc_loot_chest_templates each carry two timestamp columns differing only by an underscore, holding different things: the domain timestamp — when the bounty was placed, when the template was made — and the row's own creation time. Read the right one.

Some rows are claimed by deleting them

A vote is paid, a season is closed, a vote party is started, a grave is collected, a protection is bought or rented, and an order or a protection account is changed by whichever server manages to delete the row first — only one delete succeeds, which is what makes each of those happen once across a network. Deleting such a row by hand is not a clean-up: it pays nothing, closes nothing, or destroys what the row held — and a deleted sc_order_locks row leaves its order unchangeable until the next start writes the lock again.

The tables the plugin has had the longest also carry created_at and updated_at; the newer ones carry only the columns above. Nothing has a unique constraint beyond its primary key.

Sharing across servers

Point every server at the same database and homes, warps, kits, ranks, statistics, crates, balances, protections and the rest are shared.

Something missing on this page? Tell us on Discord