Content generated with AI — it may contain mistakes.

Modules

Kits and crates

Kits with cooldowns and previews, crates with keys, tiers, pity and ten animations, refilling loot chests and item spawners.

Kits

A kit is a database row, built entirely from /kitadmin. There is no kit file.

/kit lists them, /kit preview <id> shows one without claiming, /kit claim <id> takes it.

FieldWhat it does
Icon, name, descriptionHow it looks in the list
PermissionWho may see and claim it
EnabledWhether it exists for players at all
ItemsEdited with ExyliaLib's loadout editor
CommandsRun alongside the items
CooldownPer player, in milliseconds. Default 24 hours
Max uses-1 for unlimited
First-join kitGiven automatically the first time a player joins
Auto-equip armourArmour goes on rather than into the bag
Drop when fullOn, a claim goes through and what does not fit is kept for the player's next join. Off, a claim that would not fit is refused before anything is given
Sort orderWhere it sits in the list

The list draws a kit in one of four states — ready, on cooldown, used up, or locked — each with its own template in modules/kits/menus/list.yml.

The preview is worth knowing about: a shulker box or a bundle inside a kit is openable in the preview, so a player can see what is inside before claiming. settings.preview.container-hint is the lore appended to those containers, with %items%.

SettingDefault
default-cooldown-ms86400000 — 24 hours
default-max-uses-1
show-locked-kitstrue

exyliasurvivalcore.kits.bypass skips cooldowns and use limits. /kitadmin give, reset and resetall handle a player's record; give hands the kit over whether or not the player has waited for it. Another plugin can do the same through the API, with or without the cooldown and the use limit.

Crates

A crate is a block in the world, a key, a reward table and an animation. Right-clicking the block spends a key and plays the animation; /crates opens the list, /crates preview <id> shows the rewards, /crates open <id> [all] opens without the block, and /crates history shows what has been won.

Everything is built from /cratesadmin.

Keys

Keys are physical items by default: a TRIPWIRE_HOOK with the crate's own name, given with /cratesadmin key give. Virtual keys — a counter on the player rather than an item — are given with /cratesadmin key virtual. Keys another plugin gives through the API are virtual.

Those five key subcommands are the only ones that run from the console, which is what a web store needs:

/cratesadmin key give <player> <crate> <amount>
/cratesadmin key giveall <crate> <amount>
/cratesadmin key virtual <player> <crate> <amount>
/cratesadmin key take <player> <crate> <amount>
/cratesadmin key set <player> <crate> <amount>

Physical keys that do not fit are kept for the player's next join rather than dropped at their feet — see Items that do not fit. So are key items handed back when an opening fails.

Tiers

modules/crates/tiers.yml turns a reward's weight into a rarity.

tiers:
  legendary: { display: "…", color: "…", max-weight: 1.0,       broadcast: true,  sound: "…" }
  epic:      { max-weight: 5.0,       broadcast: true }
  rare:      { max-weight: 25.0 }
  common:    { max-weight: 1000000.0 }

A reward belongs to the first tier, in ascending max-weight, whose max-weight it does not exceed. So a reward with weight 3 is epic, and one with weight 0.5 is legendary. broadcast: true announces a win of that tier to the server — one of the seven broadcasts a player can turn off in /settings.

Pity

Each crate has a pityAfter count and a pityTier: after that many openings without hitting the tier, the next opening is guaranteed to. It is per player, per crate.

Animations

modules/crates/animations.yml ships ten, one per style.

AnimationStyle
cosmic_orbitORBIT
nebula_reelREEL
void_slotSLOT
triple_slotsSLOTS
supernovaBURST
singularityVORTEX
gauntletKNOCKOUT
ascensionHELIX
wheel_of_fateSPOTLIGHT
meteor_strikeCOMET

NONE is the eleventh style: no animation, straight to the reward.

Each animation takes duration, radius, height, spins, scale, items, glow, win-hold, tick-sound, and intro and win effect lists. Not every field means the same thing to every style:

  • radius is ignored by SLOT and SLOTS, and read by REEL as how far in front of the player the strip is drawn.
  • spins is ignored by KNOCKOUT and COMET, and read by SPOTLIGHT as how many laps it takes.
  • items is rounded down to 4, 8 or 16 by KNOCKOUT, so its bracket divides evenly.
  • height needs to stay above the hologram, which sits at 1.6.
  • tick-sound rises in pitch as the spin slows. An empty string is a silent spin.

The winning reward appears throughout the reel like any other, so the outcome is not visible before the animation lands, and the block reappears when the opening ends.

The idle animation

A crate can play something on a loop while nobody is opening it:

SettingDefault
idle-animation""
idle-interval-seconds8
idle-radius24.0

idle-interval-seconds: 0 turns the whole idle loop off, floating icon included.

history-retention-days defaults to 30; 0 keeps everything.

Loot chests

A template is a loot table with a name. A chest is a template placed in the world with its own cooldown.

/lootchestsadmin opens the template list. Place gives you a wand — a BLAZE_ROD by default — and clicking a chest with it binds that template to it.

SettingDefaultWhat it does
wand-materialBLAZE_RODWhat the placement wand is
allow-open-on-cooldownfalseWhether a chest on cooldown opens empty rather than refusing
hologram-enabledtrueThe floating text above a chest
hologram-offset-y1.5How high above it

The hologram has three states — ready, on cooldown with %time%, and disabled.

A chest may be dispersed, which spreads its loot across the container rather than filling it from the first slot. exyliasurvivalcore.lootchests.bypass ignores the cooldown.

Item spawners

A block that drops a glowing item on a random interval, under a countdown hologram. Built from /spawnersadmin: a spawner has a loot table, a minimum and maximum interval, and a list of locations.

SettingDefaultWhat it does
detection-radius2.0How far to look for an item already lying there
hologram-offset-y2Height of the countdown
glow-enabled, glow-colortrue, goldThe dropped item's outline. The colour must be one of the sixteen named text colours
particle-typeEND_RODDrawn at the spawner
sound-radius16.0How far the spawn sound carries
There is no chest-import button

Both the item spawners and the loot-chest templates carry a complete "click a chest to import its contents as the loot table" flow in the code, but no menu button anywhere calls it. Build loot tables in the loot editor.

On a network

When several servers share one database, crate blocks, placed loot chests and item spawners each belong to the server they were placed on, and each server loads only its own. Loot chests and item spawners placed before the server was recorded load on every server that reads them.

Items that do not fit

Items these modules hand out are no longer dropped at a player's feet when their inventory is full. What does not fit goes into ExyliaLib's pending-reward table and is handed over the next time the player joins, with the rewards.claimed line from messages.yml — "Delivered N rewards that were waiting for you." That covers:

  • the overflow of a kit whose Drop when full is on;
  • physical keys from /cratesadmin key give and giveall;
  • key items handed back when a crate opening fails;
  • the crate placement wand.

Nothing is handed over while the player stays online: the table is drained on join.

Counters

These modules count into the stats counters, which leaderboards, missions and seasons read — see Statistics.

CounterWhat it counts
kits.claimedKits claimed
kits.<kit>.claimedThe same, for one kit
crates.openedCrates opened, one per key spent — a bulk opening of ten counts ten
crates.<crate>.openedThe same, for one crate
lootchests.openedLoot chests opened while ready
lootchests.<chest>.openedThe same, for one placed chest by its id

Something missing on this page? Tell us on Discord