Configuration
On this page(14)
SnTrade ships with the following YAML files. New keys are auto-merged on boot; your edits and comments are preserved.
| File | Holds |
|---|---|
config.yml | Database, currencies, requests, confirmation, amount input, overflow, claims, history, lock, limits, restrictions, blacklist, sounds and live notices |
lang/messages_en.yml | Every line the plugin sends, the cancel and claim reasons, the state words and the chat lists |
lang/messages_es.yml | The Spanish translation. Set lang: es and run /trade reload |
guis/trade.yml | The trade menu both players share |
guis/claims.yml | The claims mailbox (/trade claims) |
guis/history.yml | The trade history (/trade history with presentation.history: gui) |
guis/history-view.yml | The read-only details of one logged trade, opened from the history |
The currencies section is marked # sn:extensible. It is yours: entries you delete there stay deleted, and the updater never inserts new ones. To restore the shipped examples, delete the whole currencies: block and restart.
config.yml
# ============================================================
# SnTrade - configuration
# Managed by SnLib: new keys are auto-merged on boot; your values and
# comments are preserved. Do NOT add a config-version key (retired).
# Set update-configs: false to freeze this file (SnLib only warns about
# missing keys instead of inserting them).
# Sections marked "# sn:extensible" are yours: entries you delete there
# stay deleted.
# ============================================================
# Active language code; loads lang/messages_<code>.yml (falls back to en).
lang: en
# Master switch of the SnLib auto-updater for this plugin's managed files.
update-configs: true
# Runtime debug output (also toggleable live via /trade debug).
debug:
# Master toggle of the debug output.
enabled: false
# Verbosity threshold: OFF, INFO, DEBUG or TRACE.
level: DEBUG
# Category filter; an empty list lets every category through.
categories: []
# ------------------------------------------------------------
# Main command.
# ------------------------------------------------------------
command:
# Aliases of /trade. Re-read on /trade reload.
aliases: [sntrade]
# ------------------------------------------------------------
# Database. type=sqlite needs nothing else; type=mysql reads host/port/etc.
# ------------------------------------------------------------
database:
# sqlite or mysql
type: sqlite
# MySQL connection (ignored when type is sqlite).
host: localhost
port: 3306
database: sntrade
username: root
password: ""
# ------------------------------------------------------------
# Presentation. gui opens the menu; chat prints the text view.
# ------------------------------------------------------------
presentation:
# /trade history: gui opens the history menu, chat prints the text list.
history: gui
# ------------------------------------------------------------
# Trade model: this server's identity and the currencies players
# can add to a trade next to their items.
# ------------------------------------------------------------
# Name of this server in trade logs, the /trade lock scope, the claims mailbox and the crash
# journal; empty uses "default" on SQLite. MySQL requires a unique explicit name. A reload
# cannot change this name; migrate stored rows and restart when renaming a server.
server-name: ""
# Currencies players can offer. The map key is the currency id.
# vault: true reads and writes the Vault economy; edtoolapi: true reads and
# writes the EdTools currency named by currency-id. An entry whose backend is
# missing is skipped with a console error, and item trades keep working.
# Entries you delete stay deleted. To restore the shipped examples, delete the
# whole currencies: block and let the plugin write it back on the next boot.
# sn:extensible
currencies:
# Vault currency: works on a fresh install once an economy plugin is present.
money:
# Offer this currency in trades; false hides it without deleting the entry.
enabled: true
# Name shown in the trade menu and in messages.
display-name: "&aMoney"
# Item of this currency's button in the trade menu.
material: GOLD_INGOT
# Read and write balances through the Vault economy.
vault: true
# Permission needed to offer this currency; empty lets everyone offer it.
permission: ""
# Smallest amount of this currency per trade.
min: 1
# Largest amount of this currency per trade; -1 for no limit.
max: -1
# Percent withheld from the amount the receiver gets (0-99).
tax-percent: 0.0
# Highest balance a receiver may reach through a trade; -1 for no limit.
max-balance: -1
# EdTools currency example: copy this block for every other EdTools currency.
gems:
# Set currency-id to your EdTools currency id, then set this to true.
enabled: false
# Name shown in the trade menu and in messages.
display-name: "&bGems"
# Item of this currency's button in the trade menu.
material: EMERALD
# Read and write balances through the EdTools API (its own maximum balance applies).
edtoolapi: true
# EdTools currency id.
currency-id: gems
# Permission needed to offer this currency; empty lets everyone offer it.
permission: ""
# Smallest amount of this currency per trade.
min: 1
# Largest amount of this currency per trade; -1 for no limit.
max: -1
# Percent withheld from the amount the receiver gets (0-99).
tax-percent: 0.0
# ------------------------------------------------------------
# Trade features: requests, confirmation, amount input, overflow,
# claims, history and the post-trade summary.
# ------------------------------------------------------------
# Trade requests sent with /trade <player>.
requests:
# Seconds before an unanswered request expires.
timeout-seconds: 60
# Requests a player may have pending at the same time.
max-outgoing: 1
# Sending a request by right-clicking a player.
interact-to-request:
# Right-clicking a player sends them a trade request.
enabled: false
# Only while sneaking, so ordinary clicks on players keep working.
require-sneak: true
# Final confirmation once both players are ready.
confirmation:
# Seconds from both players ready to the trade completing; 0 completes at once.
countdown-seconds: 5
# How players enter a currency amount.
currency-input:
# anvil (rename an item to the amount) or chat (type the amount in chat).
mode: anvil
# Seconds to enter an amount before returning to the trade menu.
timeout-seconds: 30
# Anvil prompt. {amount}, {currency}, {min} and {max} are filled in every text below;
# in invalid-item, {amount} is what was typed (letters and digits only).
anvil:
# Title of the anvil window.
title: "₢f2&lEnter an amount"
# Item placed in the anvil; its name is the text the player edits.
input-item:
# Material of the item.
material: PAPER
# Starting text of the input box; keep it without colors so it edits as a plain number.
name: "{amount}"
# Lore of the item.
lore:
- "&7Rename this paper to the amount"
- "&7of &f{currency} &7you want to offer."
# Result item shown while the typed amount is valid; clicking it confirms.
confirm-item:
# Material of the item.
material: LIME_DYE
# Name of the item.
name: "&a&lConfirm"
# Lore of the item.
lore:
- "&7Offer &f{amount} {currency}&7."
- "&eClick to confirm."
# Result item shown while the typed amount is not valid.
invalid-item:
# Material of the item.
material: BARRIER
# Name of the item.
name: "&c&lInvalid amount"
# Lore of the item.
lore:
- "&7Type a whole number of &f{currency}&7."
# Chat prompt.
chat:
# Answers that cancel the input, case-insensitive. Quote yes/no/on/off or YAML reads them as true/false.
cancel-words: [cancel, cancelar]
# Invalid answers allowed before the input is cancelled.
max-attempts: 3
# Closing the trade menu with ESC: cancel ends the trade, reopen opens the menu again.
close-behavior: cancel
# Items that do not fit in the receiving inventory.
overflow:
# Items a completed trade delivers: claim (claims mailbox), drop (at the feet) or cancel (refuse the trade).
settlement: claim
# Offered items handed back when a trade is cancelled: claim or drop.
returns: claim
# Claims mailbox: items and currencies a player could not receive, collected with /trade claims.
claims:
# Deliver pending claims automatically when the player joins.
auto-deliver-on-join: true
# Ticks after joining before delivering or notifying (20 ticks = 1 second).
join-delay-ticks: 40
# Tell a joining player that claims are waiting.
notify-on-join: true
# A trader who dies mid-trade.
death:
# vanilla adds their offered items to the death drops (to claims with keepInventory); claim always uses claims.
escrow-policy: vanilla
# Trade log behind /trade history.
history:
# Log trades and allow /trade history.
enabled: true
# Also log cancelled trades, not only completed ones.
log-cancelled: false
# Days a logged trade of THIS server-name is kept; 0 keeps them forever.
retention-days: 90
# Trades per page in the chat view of /trade history.
chat-page-size: 8
# Emergency lock set with /trade lock (stored in the database, so it survives restarts).
lock:
# Seconds between checks for a network lock set by another server sharing the MySQL database; at least 1 on MySQL. Not used with sqlite.
network-refresh-seconds: 30
# review journals offered items so /trade recover can inspect a trade cut by a crash; off disables it.
crash-journal: review
# Save both traders' player data right after a completed trade, so a crash cannot undo it.
save-player-data-on-complete: true
# Chat summary after a completed trade.
summary:
# Send both traders a summary of what they gave and received.
enabled: true
# ------------------------------------------------------------
# Limits: cooldowns, anti-scam delays, timeouts, distance,
# cancel triggers, restrictions and the item blacklist.
# ------------------------------------------------------------
# Cooldowns against spam and click macros.
cooldowns:
# Seconds before a player may send another request to the same player.
request-seconds: 10
# Milliseconds between two clicks on the ready button.
ready-click-millis: 250
# Milliseconds between two item offers or take-backs of one trader (minimum 50).
offer-click-millis: 100
# Protection against last-second offer swaps.
anti-scam:
# Seconds a player must wait after the partner changes the offer before clicking ready.
ready-delay-after-change-seconds: 3
# Trade length limits.
timeouts:
# Longest a trade may stay open, in seconds; 0 disables the limit.
trade-max-seconds: 300
# Seconds without any offer change before the trade is cancelled; 0 disables it.
idle-seconds: 120
# Distance between the two players.
distance:
# Largest distance in blocks to send a request; -1 for no limit.
request-max: -1
# Largest distance in blocks while trading, checked every second; -1 for no limit.
trade-max: -1
# Both players must be in the same world to request and to trade.
same-world-only: false
# Events that cancel a running trade.
cancel-on:
# A trader takes damage.
damage: true
# Count only damage dealt by another player (needs damage: true).
pvp-only: false
# A trader teleports.
teleport: true
# A trader changes world.
world-change: true
# Who may trade, and where.
restrictions:
# Worlds where trading is disabled, case-insensitive.
blocked-worlds: []
# Game modes that cannot trade; switching into one cancels the trade.
blocked-gamemodes: [CREATIVE, SPECTATOR]
# Refuse trades between players connected from the same IP address.
block-same-ip: false
# Minutes of playtime needed to trade; 0 disables the check.
min-playtime-minutes: 0
# Traders cannot pick up items, so nobody can fill their inventory mid-trade.
block-item-pickup: true
# Commands typed while trading.
commands-while-trading:
# block refuses every command except the whitelist; allow lets every command through.
mode: block
# Commands allowed in block mode, without the slash.
whitelist: [msg, tell, r, w]
# Items that can never be offered, also checked inside shulker boxes and bundles.
blacklist:
# Material names, e.g. BEDROCK.
materials: []
# Text that blocks an item whose custom or item name contains it (case-insensitive; the item's
# colors are ignored, so write the text itself without color codes). Items without either
# name are not matched.
name-contains: []
# Text that blocks an item whose lore contains it (case-insensitive; the item's colors are
# ignored, so write the text itself without color codes).
lore-contains: []
# Custom model data values to block.
custom-model-data: []
# Persistent data keys to block, written namespace:key.
pdc-keys: []
# ------------------------------------------------------------
# Feedback: sounds and where live trade updates are shown.
# ------------------------------------------------------------
# Sounds, written "SOUND_ID volume pitch"; an empty value disables that sound.
sounds:
# A request was sent.
request-sent: "ENTITY_EXPERIENCE_ORB_PICKUP 1 1.2"
# A request arrived.
request-received: "BLOCK_NOTE_BLOCK_PLING 1 1.5"
# The trade menu opened.
trade-open: "BLOCK_CHEST_OPEN 0.8 1.2"
# The partner changed the offer.
offer-changed: "UI_BUTTON_CLICK 0.6 1.4"
# A player clicked ready.
ready: "BLOCK_NOTE_BLOCK_PLING 1 2"
# A player took back their ready.
unready: "BLOCK_NOTE_BLOCK_BASS 1 0.8"
# Every second of the confirmation countdown.
countdown-tick: "BLOCK_NOTE_BLOCK_HAT 1 1.5"
# A trade completed.
complete: "ENTITY_PLAYER_LEVELUP 1 1.2"
# A trade was cancelled.
cancel: "ENTITY_VILLAGER_NO 1 1"
# An action was refused.
error: "BLOCK_NOTE_BLOCK_BASS 1 0.5"
# Where live trade updates are shown: chat, actionbar, title or none.
notify:
# The partner changed their offer.
partner-changed: actionbar
# Seconds left in the confirmation countdown.
countdown: actionbarCurrencies
Each entry under currencies: is one currency players can add to a trade, and its key is the currency id. The trade menu shows one button per enabled currency, in the order of the file. A currency takes one of two backends:
- Vault (
vault: true): reads and writes your Vault economy. An economy plugin that registers late is picked up without a restart. - EdTools (
edtoolapi: true): reads and writes the EdTools currency named bycurrency-id. EdTools credits never apply server boosters.
| Key | Default | Description |
|---|---|---|
enabled | true | false hides the currency without deleting the entry. |
display-name | &7<id> | Name shown in the trade menu and in messages. |
material | GOLD_NUGGET | Item of the currency's button. An unusable material falls back to the default with a warning. |
vault | false | Uses the Vault economy. |
edtoolapi | false | Uses the EdTools API. |
currency-id | the entry id | EdTools only. The EdTools currency id. |
permission | "" | Node needed to offer this currency. Empty lets everyone offer it. |
min | 1 | Smallest amount per trade. Amounts are whole units, so values below 1 become 1. |
max | -1 | Largest amount per trade. -1 means no limit. A max below min skips the currency. |
tax-percent | 0 | Percent withheld from what the receiver gets, from 0 to 99. |
max-balance | -1 | Vault only. Highest balance a receiver may reach through a trade. EdTools applies its own maximum instead. |
Every field has a default, so an entry written for an older version keeps working.
- Tax. The receiver gets the amount minus the tax, rounded down, and the remainder is withheld.
sntrade.bypass.taxreceives the full amount. - Skipped entries. An entry with neither backend flag, a missing backend, an unknown EdTools id or an invalid id is skipped with one SEVERE console line that names it. Ids use 1 to 64 characters out of
a-z,0-9,_and-. - Both flags. An entry with
vault: trueandedtoolapi: trueuses Vault and warns in the console.
Requests and confirmation
requests.timeout-secondsexpires an unanswered request, andrequests.max-outgoingcaps how many a player may have pending.cooldowns.request-secondsis the wait before a player may send another request to the same player.confirmation.countdown-secondsruns once both players are ready. Offers are locked during it, and0completes the trade at once.anti-scam.ready-delay-after-change-secondsrefuses a ready click for that long after the partner changed the offer.cooldowns.ready-click-millisandcooldowns.offer-click-millisstop click macros. The offer gap is at least50.timeouts.trade-max-secondsends a trade that stays open too long, andtimeouts.idle-secondsone where nobody changes the offer.0disables either.close-behavior: cancelends the trade when a player closes the menu with ESC.reopenopens the menu again.
Amount input
currency-input.mode: anvil opens an anvil where the player renames a paper to the amount. chat asks for the amount in chat instead, where cancel-words go back to the trade and max-attempts limits invalid answers. Both modes return to the trade menu after currency-input.timeout-seconds. Entering 0 removes the currency from the offer.
Overflow, claims and death
overflow.settlementhandles items a completed trade delivers that do not fit:claim(the claims mailbox),drop(at the player's feet) orcancel(the trade is refused).overflow.returnshandles offered items handed back on a cancel:claimordrop.claims.auto-deliver-on-joindelivers pending claimsclaims.join-delay-ticksafter joining.claims.notify-on-jointells the player that claims are waiting.death.escrow-policy: vanillaadds a dead trader's offered items to the death drops, or to claims with keepInventory.claimalways uses the claims mailbox. Useclaimwith graves or keep-inventory plugins.
History, lock and crash safety
history.enabledlogs trades and allows/trade history.history.log-cancelledalso logs cancelled trades.history.retention-daysis how long thisserver-namekeeps its logged trades.0keeps them forever, and the log of a trade with an open crash incident is never deleted.lock.network-refresh-secondsis how often a network lock set on another server is picked up. MySQL only, at least1.crash-journal: reviewwrites the escrow of every live trade to the database, so staff can inspect a trade cut by a crash with/trade recover.offdisables it. Nothing is restored automatically.save-player-data-on-complete: truesaves both traders right after a completed trade, so a crash cannot undo it.
Restrictions and blacklist
distance.request-maxanddistance.trade-maxlimit the distance in blocks, checked every second while trading.-1means no limit.distance.same-world-onlyrequires the same world.cancel-onends a running trade on damage (only player damage withpvp-only: true), teleport or world change.restrictions.blocked-worldsandrestrictions.blocked-gamemodesblock trading there. Switching into a blocked game mode cancels the trade.restrictions.block-same-ipandrestrictions.min-playtime-minutesstop alt-account trades.restrictions.block-item-pickupstops traders from picking up items mid-trade.commands-while-trading.mode: blockrefuses every command except thewhitelist.allowlets every command through.blacklistrefuses items by material, name text, lore text, custom model data or persistent data key. It also looks inside shulker boxes and bundles. Name and lore checks ignore case and colors, so write the plain text.
Feedback
soundsare writtenSOUND_ID volume pitch. An empty value disables that sound.notify.partner-changedandnotify.countdownshow the live updates inchat,actionbar,titleornone.summary.enabledsends both traders a chat summary of what they gave and received.
guis/*.yml
Every menu ships with strict-clicks: true: only plain left and right clicks, with or without shift, act on it. Move or resize any element by editing its letter in layout:. The [sntrade-...] entries are the plugin's own click actions; keep each one as shipped.
In the trade menu, a side may offer as many stacks as the smaller of the own-offer and partner-offer regions has cells, so both players always see every stack. To remove an element, take its letter out of the layout and keep its regions: and templates: entries.
guis/trade.yml
<details> <summary>Show guis/trade.yml</summary># ============================================================
# SnTrade - trade menu
# Managed by SnLib: new keys are auto-merged on boot; your values and
# comments are preserved.
# ============================================================
# Both traders see this menu: their own side on the left, the partner's on the right.
# Offered items leave the inventory while the trade runs and come back on a cancel; the
# cells only ever show copies. Move or resize any element by editing its letter in
# layout:. Every dynamic element is a region below, painted with the keyless template of
# its current state. To remove an element, take its letter out of the layout; keep the
# regions: and templates: entries themselves.
# Window title. {partner} is the other trader; the title never changes during a trade.
title: "₢f2&lTrade with {partner}"
# Your own inventory stays usable: click or shift-click a stack to offer it.
player-inventory: open
# Only plain left and right clicks (with or without shift) act on this menu.
strict-clicks: true
# Cell map, 6 rows of 9. f filler, | divider, Y / P the two heads, o / p the offered
# stacks, c / d the currency buttons, t the countdown, R your ready button, S the
# partner status, x the cancel button.
layout:
- "ffYfffPff"
- "fooo|pppf"
- "fooo|pppf"
- "fooo|pppf"
- "fccctdddf"
- "ffRfxfSff"
# Named groups of cells the plugin paints.
regions:
# Your offered stacks, one per cell. A side may offer as many stacks as the smaller of
# own-offer and partner-offer has cells, so both menus always show every stack.
own-offer: o
# The partner's offered stacks.
partner-offer: p
# Your currency buttons, one per enabled currency in config order.
own-currencies: c
# The partner's currency amounts, in the same order.
partner-currencies: d
# Your ready button.
own-status: R
# The partner's status.
partner-status: S
# The countdown indicator.
countdown: t
items:
# Border and background.
filler:
material: GRAY_STAINED_GLASS_PANE
display-name: " "
key: f
# Line between the two sides.
divider:
material: BLACK_STAINED_GLASS_PANE
display-name: " "
key: "|"
# Cancels the trade; every offered item goes back to its owner.
cancel:
material: BARRIER
display-name: "&c&lCancel trade"
key: x
lore:
- "&7Ends the trade. Everything you"
- "&7offered comes back to you."
click-actions:
- "[sntrade-cancel]"
templates:
# Your head. {player} is your name, {uuid} your UUID.
own-head:
material: PLAYER_HEAD
skull-owner: "{uuid}"
display-name: "₢f2&lYour offer"
key: "Y"
lore:
- "&7Put items on this side."
# The partner's head. {player} is their name, {uuid} their UUID.
partner-head:
material: PLAYER_HEAD
skull-owner: "{uuid}"
display-name: "₢f2&l{player}'s offer"
key: P
lore:
- "&7What you get."
# One of your offered stacks, shown as a copy. The lore is added under the item's own.
# {amount} is its amount, {entry} its id; clicking takes it back. Keep input: true so a
# stack held on the cursor still merges into it.
own-item:
input: true
lore:
- ""
- "&eClick to take it back."
click-actions:
- "[sntrade-take] {entry}"
# An empty cell of your side; place a stack here to offer it.
own-empty:
material: AIR
input: true
# One of the partner's offered stacks, shown as a copy. {player} is the partner.
partner-item:
lore:
- ""
- "&7Offered by &f{player}&7."
# An empty cell of the partner's side.
partner-empty:
material: AIR
# A currency you do not offer yet. {material} is the icon of the currency in config.yml,
# {currency} its name, {amount} the amount, {min} and {max} its limits.
own-currency:
material: "{material}"
display-name: "{currency}"
lore:
- "&7You offer: &f{amount}"
- "&7Min &f{min} &8| &7Max &f{max}"
- ""
- "&eClick to enter an amount."
click-actions:
- "[sntrade-currency] {currency_id}"
# A currency you offer. Same placeholders as own-currency.
own-currency-offered:
material: "{material}"
display-name: "{currency}"
glow: true
lore:
- "&7You offer: &a{amount}"
- "&7Min &f{min} &8| &7Max &f{max}"
- ""
- "&eClick to change the amount."
- "&eEnter 0 to remove it."
click-actions:
- "[sntrade-currency] {currency_id}"
# A currency the partner does not offer. {player} is the partner.
partner-currency:
material: "{material}"
display-name: "{currency}"
lore:
- "&f{player} &7offers: &f{amount}"
# A currency the partner offers.
partner-currency-offered:
material: "{material}"
display-name: "{currency}"
glow: true
lore:
- "&f{player} &7offers: &a{amount}"
# A currency cell with no currency (fewer enabled currencies than cells).
no-currency:
material: GRAY_STAINED_GLASS_PANE
display-name: " "
# Your button while you are ready. {status} is the state word.
own-ready:
material: LIME_DYE
display-name: "{status}"
lore:
- "&7You accept this trade."
- ""
- "&eClick to take back your ready."
click-actions:
- "[sntrade-ready]"
# Your button while you are not ready.
own-not-ready:
material: GRAY_DYE
display-name: "{status}"
lore:
- "&7Check both sides, then confirm."
- ""
- "&eClick when you accept this trade."
click-actions:
- "[sntrade-ready]"
# The partner while ready. {player} is the partner, {status} the state word.
partner-ready:
material: LIME_STAINED_GLASS_PANE
display-name: "&f{player}&7: {status}"
lore:
- "&7Your partner accepts this trade."
# The partner while not ready.
partner-not-ready:
material: RED_STAINED_GLASS_PANE
display-name: "&f{player}&7: {status}"
lore:
- "&7Your partner has not accepted yet."
# The partner while entering an amount.
partner-editing:
material: YELLOW_STAINED_GLASS_PANE
display-name: "&f{player}&7: {status}"
lore:
- "&7Your partner is entering an amount."
# The countdown cell while no countdown runs.
countdown-waiting:
material: CLOCK
display-name: "&7Waiting for both players"
lore:
- "&7The trade completes a few seconds"
- "&7after both players are ready."
# The countdown cell while it runs. {seconds} is the time left.
countdown-running:
material: CLOCK
display-name: "&a&lTrading in {seconds}s"
glow: true
lore:
- "&7Offers are locked now."
- "&7Take back your ready to stop it."guis/claims.yml
<details> <summary>Show guis/claims.yml</summary># ============================================================
# SnTrade - claims menu (/trade claims)
# Managed by SnLib: new keys are auto-merged on boot; your values and
# comments are preserved.
# ============================================================
# Items and currency amounts a trade owes you and could not hand over (a full inventory,
# a failed payment, a crash recovery). Click one to claim it, or claim everything that
# fits at once. Oldest first.
# Window title.
title: "₢f2&lTrade claims"
# Pages through the claims with the arrows below.
pagination: true
# Only plain left and right clicks (with or without shift) act on this menu.
strict-clicks: true
# Cell map, 6 rows of 9. f filler, e one claim per cell (the page size), < / > the page
# arrows, A claim everything, x close, I the claim counter.
layout:
- "fffffffff"
- "feeeeeeef"
- "feeeeeeef"
- "feeeeeeef"
- "feeeeeeef"
- "<fAfxfIf>"
# Named groups of cells the plugin paints.
regions:
# One claim per cell, in the order the claims were created.
entries: e
items:
# Border and background.
filler:
material: GRAY_STAINED_GLASS_PANE
display-name: " "
key: f
# Claims every claim that fits in your inventory.
claim-all:
material: HOPPER
display-name: "&a&lClaim all"
key: A
lore:
- "&7Claims everything that fits"
- "&7in your inventory."
click-actions:
- "[sntrade-claim-all]"
# Closes the menu.
close:
material: BARRIER
display-name: "&cClose"
key: x
click-actions:
- "[close]"
# Previous page.
previous-page:
material: ARROW
display-name: "₢f2Previous page"
key: "<"
click-actions:
- "[previous-page]"
nav-disabled:
material: GRAY_STAINED_GLASS_PANE
display-name: "&7No previous page"
lore:
- "&8You are on the first page"
# Next page.
next-page:
material: ARROW
display-name: "₢f2Next page"
key: ">"
click-actions:
- "[next-page]"
nav-disabled:
material: GRAY_STAINED_GLASS_PANE
display-name: "&7No next page"
lore:
- "&8You are on the last page"
templates:
# Claim counter. {count} is how many claims wait.
info:
material: BOOK
display-name: "₢f2&lYour claims"
key: I
lore:
- "&7Waiting: &f{count}"
# An owed item, shown as a copy. The lore is added under the item's own. {amount} is its
# amount, {reason} why it waits, {date} when it was queued.
claim-item:
lore:
- ""
- "&7Reason: {reason}"
- "&7Since: &f{date}"
- ""
- "&eClick to claim."
click-actions:
- "[sntrade-claim] {id}"
# An owed currency amount. {material} is the icon of the currency in config.yml,
# {amount} the amount, {currency} its name, {reason} why it waits, {date} when it was
# queued.
claim-currency:
material: "{material}"
display-name: "&f{amount} {currency}"
lore:
- "&7Reason: {reason}"
- "&7Since: &f{date}"
- ""
- "&eClick to claim."
click-actions:
- "[sntrade-claim] {id}"guis/history.yml
<details> <summary>Show guis/history.yml</summary># ============================================================
# SnTrade - trade history (/trade history, presentation.history: gui)
# Managed by SnLib: new keys are auto-merged on boot; your values and
# comments are preserved.
# ============================================================
# A player's logged trades, newest first. Click one for its details. Items are listed by
# material and amount.
# Window title. {player} is the player whose trades are shown.
title: "₢f2&lTrades of {player}"
# Only plain left and right clicks (with or without shift) act on this menu.
strict-clicks: true
# Cell map, 6 rows of 9. f filler, e one trade per cell (the page size), < / > the page
# arrows, x close.
layout:
- "fffffffff"
- "feeeeeeef"
- "feeeeeeef"
- "feeeeeeef"
- "feeeeeeef"
- "<fffxfff>"
# Named groups of cells the plugin paints.
regions:
# One logged trade per cell, newest first.
entries: e
# The previous page arrow.
previous: "<"
# The next page arrow.
next: ">"
items:
# Border and background.
filler:
material: GRAY_STAINED_GLASS_PANE
display-name: " "
key: f
# Closes the menu.
close:
material: BARRIER
display-name: "&cClose"
key: x
click-actions:
- "[close]"
templates:
# A completed trade. {date} is when it ended, {partner} the other trader, {status} the
# outcome, {items} what was given (-) and received (+), {currencies} the money lines.
entry-completed:
material: LIME_STAINED_GLASS_PANE
display-name: "&f{date}"
lore:
- "&7Partner: &f{partner}"
- "&7Status: {status}"
- ""
- "{items}"
- "{currencies}"
- ""
- "&eClick for details."
click-actions:
- "[sntrade-history-view] {trade} {target} {page}"
# A cancelled trade. Same placeholders, plus {reason} why it ended.
entry-cancelled:
material: RED_STAINED_GLASS_PANE
display-name: "&f{date}"
lore:
- "&7Partner: &f{partner}"
- "&7Status: {status}"
- "&7Reason: {reason}"
- ""
- "{items}"
- "{currencies}"
- ""
- "&eClick for details."
click-actions:
- "[sntrade-history-view] {trade} {target} {page}"
# Previous page. {current} is the page shown, {pages} the page count.
previous-page:
material: ARROW
display-name: "₢f2Previous page"
lore:
- "&7Page &f{current}&7/&f{pages}"
click-actions:
- "[sntrade-history-page] {target} {page}"
# Shown instead of previous-page on the first page.
previous-page-disabled:
material: GRAY_STAINED_GLASS_PANE
display-name: "&7No previous page"
lore:
- "&8Page {current}/{pages}"
# Next page. {current} is the page shown, {pages} the page count.
next-page:
material: ARROW
display-name: "₢f2Next page"
lore:
- "&7Page &f{current}&7/&f{pages}"
click-actions:
- "[sntrade-history-page] {target} {page}"
# Shown instead of next-page on the last page.
next-page-disabled:
material: GRAY_STAINED_GLASS_PANE
display-name: "&7No next page"
lore:
- "&8Page {current}/{pages}"guis/history-view.yml
<details> <summary>Show guis/history-view.yml</summary># ============================================================
# SnTrade - trade details (from the history menu)
# Managed by SnLib: new keys are auto-merged on boot; your values and
# comments are preserved.
# ============================================================
# Read-only view of one logged trade: what each side gave. The left side is the player
# whose history is open, the right side their partner.
# Window title. {player} is the left trader, {partner} the right one.
title: "₢f2&l{player} &8| ₢f2&l{partner}"
# Only plain left and right clicks (with or without shift) act on this menu.
strict-clicks: true
# Cell map, 6 rows of 9. f filler, | divider, L / R the two heads, I the trade summary,
# a / b the stacks each side gave, c / d the money each side paid, K back to the list.
layout:
- "ffLfIfRff"
- "faaa|bbbf"
- "faaa|bbbf"
- "faaa|bbbf"
- "fccc|dddf"
- "ffffKffff"
# Named groups of cells the plugin paints.
regions:
# The trade summary.
info: I
# The stacks the left trader gave.
target-items: a
# The stacks the right trader gave.
partner-items: b
# The money the left trader paid.
target-currencies: c
# The money the right trader paid.
partner-currencies: d
items:
# Border and background.
filler:
material: GRAY_STAINED_GLASS_PANE
display-name: " "
key: f
# Line between the two sides.
divider:
material: BLACK_STAINED_GLASS_PANE
display-name: " "
key: "|"
templates:
# The left trader's head. {player} is their name, {uuid} their UUID.
target-head:
material: PLAYER_HEAD
skull-owner: "{uuid}"
display-name: "₢f2&l{player}"
key: L
lore:
- "&7Gave the items on the left."
# The right trader's head.
partner-head:
material: PLAYER_HEAD
skull-owner: "{uuid}"
display-name: "₢f2&l{player}"
key: R
lore:
- "&7Gave the items on the right."
# Back to the history page this trade was opened from.
back:
material: ARROW
display-name: "₢f2Back"
key: K
click-actions:
- "[sntrade-history-page] {target} {page}"
# Summary of a completed trade. {date} is when it ended, {started} when it began,
# {status} the outcome, {world} where it happened.
info-completed:
material: LIME_STAINED_GLASS_PANE
display-name: "{status}"
lore:
- "&7Started: &f{started}"
- "&7Ended: &f{date}"
- "&7World: &f{world}"
# Summary of a cancelled trade. Same placeholders, plus {reason} why it ended.
info-cancelled:
material: RED_STAINED_GLASS_PANE
display-name: "{status}"
lore:
- "&7Reason: {reason}"
- "&7Started: &f{started}"
- "&7Ended: &f{date}"
- "&7World: &f{world}"
# A stack a side gave, shown as a copy of the logged item.
item:
lore: []
# A logged stack that could not be read back. {amount} and {item} (its material).
item-unreadable:
material: BARRIER
display-name: "&f{amount}x {item}"
lore:
- "&7This item could not be read."
# Money a side paid. {material} is the icon of the currency in config.yml, {amount} what
# was paid, {tax} the tax withheld, {received} what the other side got.
currency:
material: "{material}"
display-name: "&f{amount} {currency}"
lore:
- "&7Tax: &f{tax}"
- "&7Received: &f{received}"lang/messages_en.yml
Every line the plugin sends. Clickable values carry <click> and <hover> tags: keep both when you restyle or translate them. lang/messages_es.yml holds the same keys in Spanish. After an update, keys new in that version arrive in English in an existing messages_es.yml and the console says so: translate them, or delete the file to get the shipped translation back. Command descriptions and argument names shown in /trade help are translated in the commands: block that SnLib adds to the language file.
# ============================================================
# SnTrade - language file (English)
# Managed by SnLib: new keys merge in on boot, your values are kept.
# Restyle any line freely; your edits survive updates.
# ============================================================
# Prefix prepended to every single-line message sent via sn.lang().send(...)
prefix: "₢f2&lSnTrade &8| &7"
# snlib.* is SnLib's shared command contract (14 keys; the two help.group-*
# keys exist since SnLib 1.36.0). Every Sn plugin ships
# this block UNCHANGED: SnLib bundles NEUTRAL defaults for any key you omit and
# merges them in on boot, so an incomplete block leaks unbranded lines. Shipping
# the FULL block is what keeps the whole fleet visually identical. Placeholders
# {plugin} {usage} {description} {page} {total} {min} {max} {value} {command}
# {group} {path} are filled by SnLib. NEVER put {prefix} here (it is auto-prepended).
snlib:
no-permission: "&cYou do not have permission to use this command."
usage: "&cUsage: &e{usage}"
invalid-number: "&cInvalid number: &e{value}"
invalid-value: "&cInvalid value: &e{value}"
out-of-range: "&cValue must be between &e{min} &cand &e{max}&c: &e{value}"
number-too-small: "&cValue must be at least &e{min}&c: &e{value}"
player-not-found: "&cPlayer not found: &e{value}"
unknown-subcommand: "&cUnknown subcommand: &e{value}"
reload-done: "&aConfiguration reloaded."
help:
header: "&8&m----------&r ₢f2&l{plugin} &8&m----------"
# Branded no-separator form. SnLib's neutral default is "&e{usage} &7{description}".
entry: "₢f2{usage} &7{description}"
footer: "&7Page &f{page}&7/&f{total} &8- ₢f2/{command} help <page>"
# Own help of a groupHelp() command group (/<cmd> admin <module> help).
group-header: "&8&m----------&r ₢f2&l{group} &8&m----------"
group-footer: "&7Page &f{page}&7/&f{total} &8- ₢f2{path} help <page>"
# Your own plugin messages. Do NOT write {prefix} in any value: SnLib
# auto-prepends the prefix above to every single-line message sent via
# sn.lang().send(...). A literal {prefix} renders verbatim, and SnLib
# logs a one-time WARN when the active lang file contains one.
# Clickable values carry <click> and <hover> tags: keep both tags when you
# restyle or translate them, or the button still shows but stops working.
messages:
# ---------------- Requests ----------------
# Sent to the requester. {player} is the target.
request-sent: "&7Trade request sent to &f{player}&7."
# Sent to the target of a request. {player} is the requester. Keep the tags;
# the typed command stays visible for players who cannot click.
request-received: "&f{player} &7wants to trade with you. <click:run_command:'/trade accept {player}'><hover:show_text:'&aClick to accept the trade'>&a[Accept]</hover></click> <click:run_command:'/trade deny {player}'><hover:show_text:'&cClick to deny the trade'>&c[Deny]</hover></click> &8(&7/trade accept {player} &8| &7/trade deny {player}&8)"
# Sent to the requester when the request expired. {player} is the target.
request-expired-sender: "&7Your trade request to &f{player} &7expired."
# Sent to the target when the request expired. {player} is the requester.
request-expired-target: "&7The trade request from &f{player} &7expired."
# Sent to the requester when the target denied. {player} is the target.
request-denied-sender: "&f{player} &cdenied your trade request."
# Sent to the target after denying. {player} is the requester.
request-denied-target: "&7You denied the trade request from &f{player}&7."
# Sent to the requester after cancelling. {player} is the target.
request-cancelled: "&7You cancelled your trade request to &f{player}&7."
# Sent to the target when the requester cancelled. {player} is the requester.
request-cancelled-target: "&f{player} &7cancelled their trade request."
# A request to this player is already pending. {player} is the target.
request-already-sent: "&cYou already sent a trade request to &f{player}&c."
# Too many requests pending at once. {max} is requests.max-outgoing.
request-max-outgoing: "&cYou can only have &e{max} &cpending trade request(s) at a time."
# accept, deny or cancel found no matching request.
request-none: "&cYou have no matching trade request."
# The player tried to trade with themselves.
request-self: "&cYou cannot trade with yourself."
# Request cooldown to the same player. {time} is the time left.
request-cooldown: "&cWait &e{time} &cbefore sending another request to that player."
# The target is offline or cannot be seen. {player} is the name typed.
target-not-found: "&cPlayer &e{player} &cis not online."
# The target disabled trade requests. {player} is the target.
target-toggled-off: "&f{player} &cis not accepting trade requests."
# The sender disabled their own trade requests.
self-toggled-off: "&cYou disabled trade requests. Enable them with &e/trade toggle&c."
# The target is already trading. {player} is the target.
target-busy: "&f{player} &cis already trading."
# The target cannot trade right now (still loading, or blocked by their own world, game mode or playtime). {player} is the target.
target-unavailable: "&f{player} &ccannot trade right now."
# The sender is already trading.
self-busy: "&cYou are already trading."
# The players are too far apart. {distance} is the limit in blocks.
too-far: "&cYou must be within &e{distance} &cblocks of that player to trade."
# The players are in different worlds.
different-world: "&cYou must be in the same world to trade."
# Trading is disabled in this world.
blocked-world: "&cTrading is disabled in this world."
# Trading is disabled in the player's game mode.
blocked-gamemode: "&cYou cannot trade in your current game mode."
# Both players connect from the same address.
same-ip: "&cYou cannot trade with an account on your own connection."
# Not enough playtime yet. {minutes} is the playtime needed.
min-playtime: "&cYou need &e{minutes} &cminutes of playtime to trade."
# Trading is locked by an administrator.
trading-locked: "&cTrading is temporarily disabled."
# The player's trade data is still loading.
not-ready: "&cYour trade data is still loading, try again in a moment."
# ---------------- Trade lifecycle ----------------
# Sent to both players when the menu opens. {player} is the partner.
trade-started: "&aTrading with &f{player}&a."
# Sent to both players. {reason} comes from the reasons: section below.
trade-cancelled: "&cTrade cancelled: {reason}&c."
# Sent to both players. {player} is the partner.
trade-completed: "&aTrade with &f{player} &acompleted."
# ---------------- Offers ----------------
# The item is on the blacklist (or holds one).
offer-blacklisted: "&cThat item cannot be traded."
# The item is not a valid offer.
offer-invalid: "&cThat item cannot be offered."
# Offers are locked during the countdown.
offer-frozen: "&cOffers are locked during the countdown. Take back your ready to change them."
# No free cell left on the player's side.
offer-full: "&cYour side of the trade is full."
# The item does not fit back into the inventory.
take-back-no-space: "&cYou need free inventory space to take that item back."
# ---------------- Ready ----------------
# The ready button was clicked too fast.
ready-cooldown: "&cYou are clicking too fast."
# The partner changed the offer moments ago. {seconds} is the wait left.
ready-too-soon: "&cThe offer just changed. Review it and wait &e{seconds}s&c."
# The player cannot pay their own offer. {currency} is the currency name.
ready-cant-afford: "&cYou cannot afford the &e{currency} &cyou offered."
# The partner has no room for the offered items.
ready-partner-no-space: "&cYour partner does not have room for everything you offered."
# The receiver would pass their maximum balance. {currency} and {player} (the receiver).
ready-cap-exceeded: "&f{player} &ccannot hold that much &e{currency}&c."
# ---------------- Live updates (shown per notify: in config.yml) ----------------
# The partner changed their offer. {player} is the partner.
partner-changed: "&e{player} &7changed their offer."
# Countdown line. {seconds} is the time left.
countdown: "&aTrade completes in &f{seconds}&a..."
# The partner is typing an amount. {player} is the partner.
partner-editing: "&e{player} &7is entering an amount..."
# ---------------- Currency amounts ----------------
# Missing the permission of a currency. {currency} is the currency name.
currency-no-permission: "&cYou cannot trade &e{currency}&c."
# The currency backend is not available. {currency} is the currency name.
currency-unavailable: "&e{currency} &cis not available right now."
# The typed amount is not a whole positive number. {value} is what was typed.
amount-invalid: "&e{value} &cis not a valid amount. Type a whole number."
# Below the currency minimum. {min} and {currency}.
amount-too-small: "&cThe minimum amount of &e{currency} &cis &e{min}&c."
# Above the currency maximum. {max} and {currency}.
amount-too-large: "&cThe maximum amount of &e{currency} &cis &e{max}&c."
# The player's balance does not cover it. {amount} and {currency}.
amount-cant-afford: "&cYou do not have &e{amount} {currency}&c."
# The amount was added to the offer. {amount} and {currency}.
amount-set: "&aYou now offer &f{amount} {currency}&a."
# The currency was removed from the offer. {currency} is the currency name.
amount-cleared: "&7You removed &f{currency} &7from your offer."
# ---------------- Amount input ----------------
# Chat prompt, one line per entry, sent without prefix. {currency}, {min} and {max}.
input-chat-prompt:
- "&8&m----------&r ₢f2&lEnter an amount &8&m----------"
- "&7Type the amount of &f{currency} &7to offer in chat."
- "&7Minimum &f{min} &8| &7Maximum &f{max}"
- "&7Type &fcancel &7to go back to the trade."
# The input was cancelled.
input-cancelled: "&7Amount input cancelled."
# The input timed out.
input-timeout: "&cYou took too long to enter an amount."
# Too many invalid answers.
input-attempts: "&cToo many invalid amounts, back to the trade."
# ---------------- Command guard ----------------
# A command was blocked while trading.
commands-blocked: "&cYou cannot use that command while trading."
# ---------------- Claims ----------------
# Every claim was delivered. {count} is how many.
claims-delivered: "&aDelivered &f{count} &apending claim(s)."
# Some claims were delivered. {count} delivered, {left} still waiting for space.
claims-partial: "&eDelivered &f{count} &eclaim(s); &f{left} &ewait for free inventory space."
# Nothing to claim.
claims-empty: "&7You have nothing to claim."
# Sent on join when claims are waiting. {count} is how many. Keep the tags.
claims-join-notice: "&eYou have &f{count} &epending trade claim(s). <click:run_command:'/trade claims'><hover:show_text:'&aClick to open your claims'>&a[Open]</hover></click> &8(&7/trade claims&8)"
# No free inventory space for a claim.
claims-no-space: "&cYou have no free inventory space. Make room and try again."
# A currency claim would push your balance over its limit. {currency} is its display name.
claims-currency-cap: "&cYou cannot hold more &e{currency}&c; that claim keeps waiting."
# ---------------- Toggle ----------------
# The player enabled their trade requests.
toggle-on: "&aYou now accept trade requests."
# The player disabled their trade requests.
toggle-off: "&cYou no longer accept trade requests."
# An administrator toggled someone else. {player} and {state} (a status: word).
toggle-other: "&7Trade requests of &f{player} &7are now {state}&7."
# ---------------- History ----------------
# No logged trades to show.
history-empty: "&7No trades to show."
# history.enabled is false.
history-disabled: "&cTrade history is disabled on this server."
# ---------------- Administration ----------------
# Trading was locked. {reason} is the reason given.
lock-enabled: "&cTrading locked. &7Reason: &f{reason}"
# Trading was locked on every server sharing the database (/trade lock network). {reason} is the reason given.
lock-enabled-network: "&cNetwork lock saved. Other servers will apply it on their next refresh. &7Reason: &f{reason}"
# The lock applies here immediately; the database write for other servers is still pending.
lock-pending: "&eTrading is locked here. Waiting for the database to confirm the lock."
# The database did not save the lock after retries; this server remains locked locally. {label} is the command as typed.
lock-failed-local: "&cThe database did not save the lock. Trading remains locked on this server only; check the database and run /{label} reload."
# Sent after lock-enabled-network when the database is SQLite, which no other server reads.
lock-network-local: "&7This server uses SQLite, so the network lock covers this server only."
# Trading was already locked.
lock-already: "&cTrading is already locked."
# The lock state is not loaded yet (the server is starting, or the database could not be read). {label} is the command as typed.
lock-not-ready: "&cThe trade lock state is loading or a write is in progress; try again in a moment. &7If this persists, check the database and run &f/{label} reload&7."
# Trading was unlocked.
unlock-done: "&aTrading unlocked."
# The requested unlock is waiting for the database; trading remains locked meanwhile.
unlock-pending: "&eWaiting for the database to confirm the unlock. Trading remains locked meanwhile."
# The unlock was not confirmed; the lock remains active until a fresh read.
unlock-failed: "&cThe database did not confirm the unlock. Trading remains locked; check the lock status and try again."
# Trading was not locked.
unlock-not-locked: "&cTrading is not locked."
# The other lock (this server's or the network's) still blocks trading. {label} is the command as typed.
unlock-still-locked: "&eAnother trade lock is still active. &7Use &f/{label} unlock &7to lift every lock."
# Staff notice of a lock. {player} is who locked, {reason} the reason given.
notify-lock: "&f{player} &clocked trading. &7Reason: &f{reason}"
# Staff notice of a network lock. {player} is who locked, {reason} the reason given.
notify-lock-network: "&f{player} &clocked trading on every server sharing this database. &7Reason: &f{reason}"
# Staff notice of an unlock. {player} is who unlocked.
notify-unlock: "&f{player} &aunlocked trading."
# Staff notice of an unlock that left another lock active, so trading is still locked. {player} is who unlocked.
notify-unlock-partial: "&f{player} &elifted one trade lock; &canother lock is still active."
# A trade was force-cancelled. {player} is the trader.
forcecancel-done: "&aCancelled the trade of &f{player}&a."
# The player is not trading. {player} is the name given.
forcecancel-not-trading: "&f{player} &cis not trading."
# No crash incident for that player. {player} is the name given.
recover-none: "&7No interrupted trades found for &f{player}&7."
# Incident items moved to claims. {count} items, {player} their owner.
recover-done: "&aMoved &f{count} &aitem(s) of &f{player} &ato their claims."
# Incidents skipped because their trade had already completed. {count} incidents, {player} their owner.
recover-skipped: "&7Skipped &f{count} &7interrupted trade(s) of &f{player} &7that had already completed; their items were usually delivered (check the console INCIDENT lines of those trades)."
# Incidents that could not be recovered now and stay open for another try. {count} incidents, {player} their owner.
recover-failed: "&cCould not recover &f{count} &cinterrupted trade(s) of &f{player} &cright now; try again."
# Recovered trades the trade log could not rule out as completed (history off, or the log lookup failed). {count} trades, {player} their owner.
recover-unverified: "&eThe trade log could not confirm that &f{count} &eof the recovered trade(s) of &f{player} &enever completed. &7Check their trade partner as well."
# Stacks of recovered trades that could not be decoded and were not granted. {count} stacks, {player} their owner.
recover-unreadable: "&f{count} &cstack(s) of &f{player} &ccould not be decoded and were not granted; see the console."
# Staff notice of a trade cut by a crash. {player} and {trade} (the trade id). Keep the tags.
notify-incident: "&cA trade of &f{player} &cwas interrupted by a crash &8(&7{trade}&8)&c. <click:suggest_command:'/trade recover {player}'><hover:show_text:'&eClick to fill in the command'>&e[Recover]</hover></click> &8(&7/trade recover {player}&8)"
# ---------------- Commands ----------------
# A subcommand only players can use was run from the console.
player-only: "&cOnly players can use this command."
# Another player's trade settings are still loading (/trade toggle <player>). {player} is the player.
toggle-not-loaded: "&cThe trade settings of &f{player} &care still loading, try again in a moment."
# No player of that name has played on this server (/trade history <player>). {player} is the name given.
player-unknown: "&cNo player named &e{player} &chas played on this server."
# Why a trade was cancelled. Each value fills the {reason} of trade-cancelled.
reasons:
# The trade menu was closed.
closed: "&7the menu was closed"
# Sent to the player who cancelled.
cancelled: "&7you cancelled it"
# Sent to the partner of the player who cancelled.
partner-cancelled: "&7your partner cancelled it"
# Shown in the trade history for a trade a player cancelled (both traders read it).
player-cancelled: "&7a trader cancelled it"
# A trader left the server.
quit: "&7a trader left the server"
# A trader died.
death: "&7a trader died"
# A trader teleported.
teleport: "&7a trader teleported"
# A trader changed world.
world-change: "&7a trader changed world"
# A trader took damage.
damage: "&7a trader took damage"
# The traders moved too far apart.
distance: "&7the traders moved too far apart"
# The trade reached timeouts.trade-max-seconds.
timeout: "&7the trade took too long"
# Nobody changed the offer for timeouts.idle-seconds.
idle: "&7nobody acted for too long"
# A trader switched to a blocked game mode.
gamemode: "&7a trader changed game mode"
# An administrator cancelled it.
forced: "&7an administrator cancelled it"
# Trading was locked.
locked: "&7trading was locked"
# The plugin was reloaded.
reload: "&7the plugin was reloaded"
# The server is stopping.
shutdown: "&7the server is shutting down"
# A trader lost a required permission.
permission: "&7a trader lost permission to trade"
# A trader could not pay the offered amount.
balance: "&7a trader could not pay the offered amount"
# A receiver would pass the currency's maximum balance.
cap: "&7a trader would pass their maximum balance"
# There was not enough inventory space.
space: "&7there was not enough inventory space"
# Something unexpected failed; offered items were handed back.
error: "&7an internal error occurred"
# Why a claim waits in the claims mailbox. Each value is shown on that claim in the claims menu.
claim-reasons:
# An item a completed trade delivered that did not fit the inventory.
overflow: "&7did not fit in your inventory"
# An offered item handed back on a cancel that did not fit the inventory.
return: "&7returned from a cancelled trade"
# The offered items of a player who died during a trade.
death: "&7returned after you died during a trade"
# Money a failed trade could not pay back at once.
refund: "&7refunded after a failed trade"
# Money a trade could not pay out at once.
payout: "&7payment from a trade"
# Items an administrator restored with /trade recover after a crash.
recovered: "&7recovered after a crash"
# Short state words. Each is substituted into a {status}, {state} or {value}
# slot of the messages above, of the menus under guis/ and of the chat lists,
# so a restyle here applies everywhere at once.
status:
# A side that confirmed the trade.
ready: "&aReady"
# A side that has not confirmed yet.
not-ready: "&cNot ready"
# A side that is typing an amount.
editing: "&eEditing"
# A setting that is on, such as a player's trade requests.
enabled: "&aEnabled"
# A setting that is off.
disabled: "&cDisabled"
# A logged trade that completed.
completed: "&aCompleted"
# A logged trade that was cancelled.
cancelled: "&cCancelled"
# A currency with no maximum. Uncolored so it inherits the color of its line.
unlimited: "No limit"
# Shown where there is no value, such as a lock without a reason. Uncolored.
none: "None"
# Shown instead of a name that no longer resolves. Color codes are stripped on read.
unknown: "Unknown"
# Shown as the name of the console when it runs an action. Color codes are stripped on read.
console: "Console"
# Chat views, sent without prefix.
lists:
# Lines above the summary a trader gets after a completed trade.
summary-header:
- "&8&m----------&r ₢f2&lTrade summary &8&m----------"
# One line per item stack given. {amount} and {item}.
summary-gave-item: "&c- &f{amount}x {item}"
# One line per item stack received. {amount} and {item}.
summary-got-item: "&a+ &f{amount}x {item}"
# One line per currency paid. {amount} and {currency}.
summary-gave-currency: "&c- &f{amount} {currency}"
# One line per currency received. {amount} (after tax), {currency} and {tax}.
summary-got-currency: "&a+ &f{amount} {currency} &8(&7tax &f{tax}&8)"
# Lines below the summary.
summary-footer:
- "&8&m------------------------------------"
# Lines above the chat view of /trade history. {player}, {page} and {pages}.
history-header:
- "&8&m----------&r ₢f2&lTrades of {player} &8&m----------"
- "&7Page &f{page}&7/&f{pages}"
# One line per logged trade. {date}, {partner}, {status}, {items} (listed in the
# hover, keep the tag; built from the summary-gave-item / summary-got-item lines) and
# {currencies} (built from the summary-*-currency lines).
history-entry: "&8- &7{date} &f{partner} {status} <hover:show_text:'{items}'>₢f2[Items]</hover> &7{currencies}"
# Lines below the chat view of /trade history. {page} and {pages}.
history-footer:
- "&7Page &f{page}&7/&f{pages}"
# Pattern of every {date} in the chat history and the menus (Java DateTimeFormatter:
# yyyy year, MM month, dd day, HH hour, mm minute).
date-format: "yyyy-MM-dd HH:mm"