DUXPLIMA Documentation

Guide

How uxmCosmetics works, how to set it up and what each file holds.

uxmCosmetics gives players a wardrobe of cosmetics in twelve categories: trails, halos, cloaks, balloons, pets, mounts, morphs, hats, suits, banners, emotes and gadgets. A player wears one cosmetic per category. Cosmetics are bought with the server's currency, won from mystery boxes, granted by staff, or unlocked by a permission.

Install

Put uxmCosmetics-<version>.jar in plugins/ and start the server. The first start writes config.conf, boxes.conf, stations.conf, one file per category under categories/, the menus under menus/ and the message files into plugins/uxmCosmetics/. The shipped prices are in experience points, so buying works with nothing else installed. Players open the wardrobe with /cosmetics or the nether star in hotbar slot 8.

/uxmcosmetics reload reads every file again. A cosmetic or box that does not parse is dropped with its name in the console; the rest load. storage, animation, permissions.wildcard and commands.conf are read once, so a change to them needs a restart.

How a player gets a cosmetic

A player may wear a cosmetic they own or one whose permission they hold. A cosmetic's permission is uxmcosmetics.<category>.<id> unless its entry names another. uxmcosmetics.* unlocks every cosmetic while permissions.wildcard is on.

  • Buying. A cosmetic with a price above 0 is for sale. The price is taken, then the cosmetic is added; if the save fails, the money goes back. A player who already owns it, or holds its permission, is not charged.
  • Mystery boxes. Opening a box takes its price and draws one entry from its weighted table. A new cosmetic is added to the wardrobe. A cosmetic the player already owns pays coins back instead: the entry's duplicate-coins, or economy.duplicate-refund-fraction of the cosmetic's own price. A table entry that names a cosmetic that does not exist refunds the box.
  • Staff. /uxmcosmetics grant <player> <cosmetic> and revoke. Revoking also takes the cosmetic off.

Content files

Each categories/<category>.conf holds a cosmetics list. Every entry has an id, name, description, rarity (common, uncommon, rare, epic or legendary), price, icon, an optional permission, and the keys of its kind: an item or pieces for worn cosmetics, a particle pattern for trails, halos and cloaks, an entity for followers. The comments at the top of each file list them.

boxes.conf holds the mystery boxes:

KeyMeaning
idThe box's name, used in its permission and in a station.
tiercommon, uncommon, rare, epic or legendary.
icon, priceThe menu item and the cost of one opening.
permissionWho may open it. Default uxmcosmetics.box.<id>.
rewardsEntries of cosmetic, weight and optional duplicate-coins. A weight of 0 is never drawn.

A box with no entries, or whose weights are all 0, is refused when the file is read.

stations.conf binds blocks in the world to boxes. Stand in front of the block and run /uxmcosmetics station add <box> or station add all; the entry is written for you.

Configuration

KeyDefaultMeaning
permissions.wildcardtrueWhether uxmcosmetics.* alone unlocks every cosmetic and box.
animation.tick-ms100How often the one animation task runs. Raise it on a busy server.
animation.follower-speed0.35How fast pets, balloons and mounts catch up; 1.0 snaps.
animation.max-particles-per-frame64The most particle points one player may cost per frame.
economy.purchase-enabledtrueWhether cosmetics can be bought. The wardrobe still works without it.
economy.currency"exp"exp, levels, vault, vault-unlocked, playerpoints, ecobits:<currency> or treasury.
economy.format"#,##0.## 'exp'"How an amount is written.
economy.duplicate-refund-fraction0.25The share of a cosmetic's price a duplicate pays back.
openerslot 8, nether starThe hotbar item that opens the wardrobe: enabled, give-on-join, slot, material, keep-on-death.
gadget.slot5The hotbar slot a worn gadget takes.
cleanup.sweep-on-starttrueRemoves followers left behind by a crash when the server starts.
menu.rouletteThe spin shown when a box opens: spins, intervals and sounds.
stationHow close a click opens a station, its particle effect and its hologram.
effectsa message and a soundWhat happens on equipped, unequipped, unequipped-all, bought and box-won.

Commands

CommandPermissionWhat it does
/uxmcosmeticsAdminister the plugin.
/uxmcosmetics grant <player> <cosmetic>uxmcosmetics.admin.grantGive a cosmetic to a player, online or not.
/uxmcosmetics revoke <player> <cosmetic>uxmcosmetics.admin.revokeTake a cosmetic away again.
/uxmcosmetics reloaduxmcosmetics.admin.reloadRead the configuration and the content again.
/uxmcosmetics cleanupuxmcosmetics.admin.cleanupRemove a follower that outlived its owner.
/uxmcosmetics versionuxmcosmetics.admin.versionRead the version this server runs.
/uxmcosmetics station add <box> [block]uxmcosmetics.admin.stationBind a box station to a block.
/uxmcosmetics station set <station> <piece> <value>uxmcosmetics.admin.stationSet one piece of one station.
/uxmcosmetics station show <station>uxmcosmetics.admin.stationPrint every piece of one station.
/uxmcosmetics station remove <station>uxmcosmetics.admin.stationTake a box station away again.
/uxmcosmetics stationuxmcosmetics.admin.stationThe bare word lists them.
/uxmcosmetics station listuxmcosmetics.admin.stationEvery box station this server has.
/uxmcosmetics doctoruxmcosmetics.admin.doctorSay how this plugin is, in one line per thing that can be wrong.
/cosmeticsOpen your wardrobe.
/cosmetics open <category>Open one category straight away. Players only.
/cosmetics boxesOpen the mystery boxes. Players only.
/cosmetics equip <cosmetic>Wear one cosmetic. Players only.
/cosmetics unequip <category>Take off whatever is worn in one category. Players only.
/cosmetics unequip allTake everything off in one go. Players only.
/cosmetics languxmcosmetics.languageSay what language this player reads, and what else this server has. Players only.
/cosmetics lang set <language>uxmcosmetics.languageRead this plugin in one language, whatever the client is set to. Players only.
/cosmetics lang resetuxmcosmetics.languageFollow the client again, as a player who never chose anything does. Players only.
/cosmetics lang set-player <player> <language>uxmcosmetics.admin.languageSet the language another player reads.
/cosmetics lang reset-player <player>uxmcosmetics.admin.languageClear the language another player chose.

The /cosmetics subcommands need uxmcosmetics.use, which every player has. All nodes and their defaults are in reference.md.

Placeholders

PlaceholderValue
%uxmcosmetics_equipped_<category>%The name of what the player wears in a category, or empty.
%uxmcosmetics_equipped_id_<category>%Its id, or empty.
%uxmcosmetics_owned%How many cosmetics the player owns.
%uxmcosmetics_owned_<category>%How many they own in one category.
%uxmcosmetics_total%How many cosmetics the server has.
%uxmcosmetics_total_<category>%How many in one category.

Examples

Sell with the server economy. Set economy.currency = "vault" and economy.format = "'$'#,##0", then adjust the prices in the category files and boxes.conf.

A box only donors can open. Add a box with permission = "rank.donor" and grant that node to the donor group.

A box in the lobby. Place a chest, look at it and run /uxmcosmetics station add common.