Skip to content

messages.yml

Edit, disable and translate every message OptimalCosmetics sends, add titles and action bars, and set the type labels.

Every message lives in messages.yml. Each supports legacy & codes, &#hex, MiniMessage, [center] and (with PlaceholderAPI) %...% for the receiving player. After editing, run /cosmeticsadmin reload.

Messages:
CASE-WON:
Message:
Enabled: true
Value:
- '&5[&d&lCosmetics&5] &7You won &f{cosmetic} &7({cosmetic-type}) and unlocked it!'
  • Enabled: false silences a message.
  • Value is a string or a list; every line is sent.
  • Keep the {tokens} and the message keys as they are.

Missing keys are written back with their defaults the next time the file loads, so deleting a block resets it. Two keys are not in the shipped file and appear after the first start: PROFILE-LOAD-FAILED and MARKET-ALREADY-LISTED.

Any message can also show a title, an action bar, or both. Add the blocks next to Message::

Messages:
CASE-WON-LIMITED:
Message:
Enabled: true
Value:
- '&5[&d&lCosmetics&5] &7You won the &c&lLIMITED &f{cosmetic} &7as the &f{position} &7of &f{max} &7winners!'
Title:
Enabled: true
Title: '&5&m━━&r &c&lLIMITED &f&l{cosmetic} &5&m━━&r'
Sub-Title: '&7You are the &f{position} &7of &f{max} &7winners!'
Fade-In: 10
Stay: 60
Fade-Out: 10
Action-Bar:
Enabled: true
Value: '&c&lLIMITED &7win!'
  • Title is the large line, Sub-Title the smaller one under it. Either can be ''.
  • Fade-In, Stay and Fade-Out are ticks (defaults 10, 60, 10).
  • The same tokens as the chat message work in the title, subtitle and action bar.
  • Each block has its own Enabled, independent of the chat message.

CASE-WON-LIMITED ships with a title. Add one to any other key the same way.

General: PLAYER-ONLY, NO-PERMISSION, INVALID-PLAYER, INVALID-COSMETIC, PROFILE-LOAD-FAILED (the kick text when a player’s cosmetics cannot be loaded at login), AMOUNT-TOO-LARGE, RELOAD, COSMETICS-ADMIN-HELP.

Cosmetics: COSMETIC-LOCKED, ALREADY-HAVE-COSMETIC, COSMETIC-EQUIPPED, COSMETIC-UNEQUIPPED.

Admin: COSMETIC-GIVEN, COSMETIC-REMOVED, COSMETIC-GIVEALL, COSMETIC-REMOVEALL, COSMETIC-ALREADY-UNLOCKED, COSMETIC-NOT-UNLOCKED, COSMETIC-LISTED, MAX-LISTINGS-SET, MAX-LISTINGS-RESET.

Market: MARKET-SELL-PROMPT, MARKET-SELL-CANCELLED, MARKET-SELL-INVALID-NUMBER, MARKET-SELL-INVALID-PRICE, MARKET-SELL-NOT-OWNED, MARKET-SELL-LISTED, MARKET-PRICE-TOO-LOW, MARKET-PRICE-TOO-HIGH, MARKET-TOO-MANY-LISTINGS, MARKET-LISTING-FEE-INSUFFICIENT, MARKET-LISTING-REMOVED, MARKET-LISTING-EXPIRED, MARKET-ECONOMY-UNAVAILABLE, MARKET-INSUFFICIENT-FUNDS, MARKET-ALREADY-SOLD, MARKET-ALREADY-LISTED, MARKET-BOUGHT, MARKET-SOLD, MARKET-PAYOUT-RECEIVED, MARKET-SEARCH-PROMPT, MARKET-SEARCH-CANCELLED.

Vouchers: VOUCHER-GIVEN, VOUCHER-RECEIVED, VOUCHER-REDEEMED, VOUCHER-ALREADY-OWNED, VOUCHER-LISTED, VOUCHER-INVALID, VOUCHER-NOT-CONFIGURED.

Cases: CASE-INVALID, CASE-GIVEN, CASE-PLACED, CASE-REMOVED, CASE-WON, CASE-WON-LIMITED, CASE-WON-VOUCHER, CASE-SOLD-OUT, CASE-INSUFFICIENT, CASE-ECONOMY-UNAVAILABLE, CASE-EMPTY.

Message Tokens
INVALID-PLAYER, COSMETIC-ALREADY-UNLOCKED, COSMETIC-NOT-UNLOCKED, COSMETIC-GIVEALL, COSMETIC-REMOVEALL, MAX-LISTINGS-RESET {player}
INVALID-COSMETIC {cosmetic} (what was typed)
COSMETIC-LISTED {player}, {cosmetic}
COSMETIC-GIVEN, COSMETIC-REMOVED {player}, {cosmetic}, {cosmetic-type}
COSMETIC-EQUIPPED, COSMETIC-UNEQUIPPED, VOUCHER-REDEEMED, CASE-WON, CASE-WON-VOUCHER {cosmetic}, {cosmetic-type}
MAX-LISTINGS-SET {player}, {amount}
MARKET-SELL-LISTED, MARKET-BOUGHT {cosmetic}, {price}
MARKET-SOLD {buyer}, {cosmetic}, {price} (what the seller receives after tax)
MARKET-INSUFFICIENT-FUNDS, MARKET-PAYOUT-RECEIVED, CASE-INSUFFICIENT {price}
MARKET-PRICE-TOO-LOW {min}
MARKET-PRICE-TOO-HIGH, MARKET-TOO-MANY-LISTINGS, AMOUNT-TOO-LARGE {max}
MARKET-LISTING-FEE-INSUFFICIENT {fee}
MARKET-LISTING-EXPIRED, VOUCHER-ALREADY-OWNED, VOUCHER-LISTED, VOUCHER-NOT-CONFIGURED {cosmetic}
VOUCHER-GIVEN {amount}, {cosmetic}, {player}
VOUCHER-RECEIVED {amount}, {cosmetic}
CASE-WON-LIMITED {cosmetic}, {cosmetic-type}, {position} (1st, 2nd, …), {max}
CASE-INVALID, CASE-PLACED, CASE-REMOVED {case}
CASE-GIVEN {case}, {player}
RELOAD {ms} (reload time in milliseconds)

Prices, fees and payouts are formatted with the provider’s Currency-Formats entry. A token only resolves in the messages listed for it.

Next to Messages, the file holds the labels the plugin prints itself. Keep this section: if a key is missing from both your file and the built-in copy, the load fails and names the path.

Cosmetic-Format:
Type-Labels:
Chat-Colors: "Chat Color"
Tags: "Tag"
Name-Paints: "Name Paint"
Rank-Colors: "Rank Color"
Glow: "Glow"
Tab-Icon: "Tab Icon"
Join-Message: "Join Message"
Leave-Message: "Leave Message"
Never: "Never"
Missing-Cosmetic: "&cMissing cosmetic"
Key Used for
Type-Labels.<type> The singular type name behind {type} and {cosmetic-type} in icons, vouchers, case lore, the case reveal and messages. (The plural filter names are Types.<type>.Name in config.yml.)
Never {expires} of a listing when Expiry-Days is 0, and {reshuffle} of a case that never reshuffles.
Missing-Cosmetic The name of the barrier shown for a listing whose cosmetic no longer exists in the config.
  • The sell and search prompts end on cancel or an empty line. A wrong price keeps the sell prompt open and sends the matching error, so the player can type again.
  • COSMETICS-ADMIN-HELP is shown for /cosmeticsadmin with no or wrong arguments.