Skip to content

Configuration

blablubbabc edited this page Dec 26, 2021 · 42 revisions

Usually the default config should already come with sane default values to let Shopkeepers work right out the box after installation. And if you want to make adjustments, it should contain comments with all the information you need for that.

However, when the plugin adds missing settings to the config (usually as result of plugin updates) those comments get removed currently. You can then always find the default configuration here (at the bottom of this page), formatted and with all the comments. Or alternatively, an always up-to-date version of the default configuration file can also be found here.

If you run into issues with your customized configuration, try if the issue persists when using the default configuration.

Item data

This section describes how items are specified inside the config.

The used format is derived from Bukkit's item serialization (the YAML format Bukkit/Spigot uses when a plugin saves or loads items to/from YAML files, such as it is the case for Shopkeepers' save.yml file).

To make the format slightly easier to use by hand inside the config, a few adaptations have been made:

  • The meta data of the item (anything that is located inside the meta section of Bukkit's item serialization) is placed at the same level / the same section as the item's type. For example:
    • Display name, lore, enchantments, etc.
  • Any (common) data that is not required for our purpose or can easily be restored by the plugin is omitted. For example:
    • The item's amount
    • The item's version v
    • The data type ids ==: org.bukkit.inventory.ItemStack and ==: ItemMeta.
      Note that for all other, lower-level item data with these data type ids, they are still required (eg. ==: org.bukkit.attribute.AttributeModifier for attribute modifiers, or ==: Pattern for banner patterns, etc.).
    • The item's meta-type id
  • The display name and lore support color/formatting codes starting with & (instead of using minecraft's §), eg. &a for green. See https://minecraft.gamepedia.com/Formatting_codes for a list of all existing formatting codes in minecraft.
  • For specifying an item without any special data, a more compact representation is used. For example:
    shop-creation-item: VILLAGER_SPAWN_EGG
    instead of
    shop-creation-item:
      type: VILLAGER_SPAWN_EGG

Note that the YAML format is indention sensitive. If you run into issues with your config not getting loaded correctly, make sure that you are using spaces instead of tabs and check your config with some YAML syntax checker available online, such as for example https://yamlvalidator.com/ or https://yamlchecker.com/.
Also make sure that you haven't misspelled any of the item's attributes.

Common mistakes:

  • enchantments instead of enchants
  • display name instead of display-name
  • damage instead of Damage

Example:

currency-item:
  type: EMERALD
  display-name: '&aA fancy looking crystal'
  lore:
  - 'It looks precious.'
  - 'I might be able to sell it.'
  enchants:
    DURABILITY: 1
  ItemFlags:
  - HIDE_ENCHANTS

Command /shopkeepers yaml

The /shopkeepers yaml command can be used to print Bukkit's yaml serialization of the item held in hand, as well as its formatted item data for use inside the config. The output gets also logged to the console for easier copying (and because it is often too large for the in-game chat).

Item matching

When checking if some in-game item matches the item data specified in the config, we only check if it contains the specified data. So this does not check for item data equality, but instead the checked item is able to contain additional data but still get matched. For example, when specifying

shop-creation-item:
  type: VILLAGER_SPAWN_EGG
  display-name: '&aShopkeeper egg'

inside the config, any villager spawn egg item with display name &aShopkeeper egg can be used to create shopkeepers, even if the actually used item contains additional data, such as lore or enchantments.

Also note that specified list data (such as item lore) has to perfectly match (it's not possible for the checked item to contain additional lore lines), while for data such as enchantments it is possible for a matching item to contain enchantments additional to the ones specified in the config.

Another limitation (due to the simple nature of the implementation) is that it is currently not possible to specify that a matching item is supposed to not contain certain data. For example, it is not possible to specify that an item is supposed to not have a special display name, or not contain any lore or enchantments. Both

shop-creation-item:
  type: VILLAGER_SPAWN_EGG

and

shop-creation-item:
  type: VILLAGER_SPAWN_EGG
  display-name: ''

will allow players to use any villager spawn egg item to create shopkeepers, regardless of whether the used item has a custom display name or not.

Default configuration

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Shopkeepers Config
# Wiki: https://github.com/Shopkeepers/Shopkeepers-Wiki/wiki/Configuration
# The wiki also explains how item data gets specified inside the config.
# Community translations: https://github.com/Shopkeepers/Language-Files
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# Determines the required config migrations. Do not edit manually!
config-version: 4
# The initial debugging state of the plugin.
debug: false
# Additional debugging options.
# - 'log-all-events': Logs all events.
# - 'print-listeners': Prints the registered listeners for the first call of
#    each event.
# - 'shopkeeper-activation': Enables debugging output related to shopkeeper
#    activation.
# - 'regular-tick-activities': Enables debug output for regular shopkeeper
#    activities and behaviors that would otherwise cause debug spam when being
#    enabled by default. This includes for example the activity of teleporting
#    shopkeepers back into place, updating their location when they are mobile
#    and moved around, or behaviors such as the playing of sound effects.
# - 'visualize-shopkeeper-ticks': Visualizes the ticking activities of
#    shopkeepers in-game.
# - 'commands': Enables additional commands related debugging output.
# - 'owner-name-updates': Logs information when updating stored shop owner
#    names.
# - 'item-migrations': Logs whenever a shopkeeper performs item migrations
#    (e.g. for trade offers).
# - 'item-conversions': Logs whenever we explicitly convert items to Spigot's
#    data format. Note that this does not log when items get implicitly
#    converted, which may happen under various circumstances.
# - 'empty-trades': Logs detailed item information for the selected trade and
#    the items in the input slots whenever a player clicks an empty trading
#    result slot.
debug-options: []
# Whether to report anonymous usage statistics to https://bStats.org
# All reported information can be found here:
# https://bstats.org/plugin/bukkit/Shopkeepers
enable-metrics: true

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Messages
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

language: en-default

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Shopkeeper Data
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# The file encoding to use for the save file. If you have issues with the save
# file, such as special characters not being saved correctly, make sure that
# this encoding supports these characters. It is recommended to keep this at
# its default 'UTF-8'. It is not supported to dynamically change this encoding
# after the save file has already been created.
file-encoding: "UTF-8"
# Whether to immediately save all shopkeeper data whenever a shopkeeper is
# edited. If disabled, the shopkeeper data is saved in 5 minute intervals and
# when the plugin is shut down.
# If you have a large server with many players and/or many shopkeepers, it
# might be a good idea to disable this for performance reasons.
save-instantly: true

# Enables the automatic conversion of items inside the inventories of players
# and shop containers whenever a player opens a shopkeeper UI (e.g. trading,
# editor, hiring, etc.) The items are converted to conform to Spigot's internal
# data format.
# This setting helps with issues related to items which have been created on
# previous Spigot versions or via some Minecraft mechanism (e.g. give command,
# loot tables, etc.) no longer getting accepted when trading with shopkeepers.
# In order for the items to get reliably accepted during trades, their data has
# to match the internal format which Spigot uses when a plugin would create the
# same items via the Spigot API. Spigot occasionally makes changes to this
# internal data format. Any previously created items, or newly created items
# which don't conform to this new format, may cause trading and item stacking
# issues then.
# This setting is intended to help with the portion of the issue affecting
# shopkeeper trades. This setting will not reliably help you prevent item
# stacking related issues!
# Enabling this setting comes with a performance impact! Try to avoid using
# this option and search for alternative solutions instead (e.g. stick to
# Spigot's data format when creating items via Minecraft mechanisms). Try to
# only keep this setting enabled for as long as required (e.g. until you assume
# that most of your players' legacy items got converted by now).
convert-player-items: false
# If 'convert-player-items' is enabled, this setting toggles whether the
# 'convert-player-items-exceptions' setting acts as black- or whitelist.
# If enabled, all items inside the checked inventories will be converted except
# those that match the items specified by 'convert-player-items-exceptions'.
# If disabled, only items that match the items specified by
# 'convert-player-items-exceptions' get converted.
convert-all-player-items: true
# Black- or whitelist of items affected by the 'convert-player-items' setting.
convert-player-items-exceptions: []

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Plugin Compatibility
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# If enabled, Shopkeepers tries to bypass other plugins which deny mob spawning
# (ex. land protection plugins).
bypass-spawn-blocking: true
# If enabled, Shopkeepers takes into account whether other plugins deny
# interaction with the shopkeepers.
check-shop-interaction-result: false

# If enabled, players will only be able to place shopkeepers where they have
# permission from WorldGuard to build or where the 'allow-shop' flag is set.
enable-world-guard-restrictions: false
# If enabled (additionally to the enable-world-guard-restrictions setting),
# players will only be able to place shopkeepers in regions where the
# 'allow-shop' flag is set, but nowhere else. However, players will still
# require container access to set up shops. And in case they can't place
# containers in the affected region, shop containers need to be pre-setup by
# someone else and the require-container-recently-placed setting needs to be
# disabled.
require-world-guard-allow-shop-flag: false
# Whether to register the allow-shop flag with WorldGuard (if no other plugin
# has registered it yet). Usually there should be no need to disable this.
# Changing this setting has no effect until the next server restart or full
# server reload!
register-world-guard-allow-shop-flag: true

# If enabled, players will only be able to place shopkeepers in places that
# have been designated as commercial areas by Towny.
enable-towny-restrictions: false

# In order to guard against unnoticed changes to a player's currently open
# inventory, the Shopkeepers plugin verifies that the open inventory still
# matches the expected type of inventory before it handles inventory
# interactions. This setting disables this verification.
# It is usually recommended keeping this verification enabled. However, when
# the Shopkeepers plugin is used on certain types of modded servers (such as
# variants of Cauldron and its successors), a known issue is that these types
# of servers sometimes report that the currently open inventory is of a type
# different to what it actually is. The result of this verification is then
# that for example the trading inventory is closed when a player tries to
# trade.
# Even though modded servers are not officially supported and may break the
# plugin in various other unexpected ways, disabling the inventory verification
# via this setting may help resolve this particular known incompatibility.
disable-inventory-verification: false

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Shop Creation and Removal
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# The item used to create player shops.
# Use the '/shopkeeper give' command to give yourself this item in-game.
shop-creation-item:
  type: VILLAGER_SPAWN_EGG
  display-name: "&aShopkeeper"

# Whether to prevent normal usage of the shop-creation item. Players with the
# bypass permission (usually admins) can bypass this.
prevent-shop-creation-item-regular-usage: true
# Whether deleting (or destroying) a player shopkeeper returns (drops) the
# shop-creation item.
deleting-player-shop-returns-creation-item: false

# Whether to allow creating player shops with the /shopkeeper command.
create-player-shop-with-command: false

# Whether the selected container must have been recently placed by the player
# who is attempting to create the shopkeeper.
require-container-recently-placed: true
# The maximum distance a player shopkeeper can be placed from its backing
# container. This cannot be set to a value greater than 50.
max-container-distance: 15
# The default maximum number of shops a player can have. Set to -1 to disable
# this limit.
max-shops-per-player: -1
# A list of permission nodes that can be used to set the maximum number of
# shops a specific player or group of players can have. Use the permission node
# pattern 'shopkeeper.maxshops.<count>' to use this feature. The permission
# node 'shopkeeper.maxshops.unlimited' indicates no limit. These permission
# nodes can only be used to increase the default limit, not decrease it.
max-shops-perm-options: 5,15,25

# Whether to protect player shop containers from being accessed or broken. It
# is usually recommended keeping this enabled.
protect-containers: true
# Whether to prevent item movements from and to protected shop containers (via
# hoppers, droppers, etc.). If you disable this, you and your players will have
# to somehow else protect their shop container from unauthorized players who may
# maliciously insert or extract items. This can be rather tricky even for land
# protection plugins, because items can also be extracted via hopper minecarts.
# Your land protection plugin would need to prevent other players from placing
# or pushing those minecarts into a protected region.
# Item movement will always be allowed if the container protection is disabled.
prevent-item-movement: true
# Whether to delete player shopkeepers when their container is broken.
delete-shopkeeper-on-break-container: false

# If enabled (set to a value greater than 0), Shopkeepers will check for and
# remove the shops of inactive players once every plugin start. This setting
# determines how many days ago a player's last login has to be in order for the
# player to be considered inactive.
player-shopkeeper-inactive-days: 0

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Shop (Object) Types
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# A list of mob types which can be used for shopkeepers. Adding new mob types
# to the defaults here is unsupported, as some mob types might not properly
# work and can cause all kinds of issues.
enabled-living-shops:
- VILLAGER
- AXOLOTL
- BEE
- BLAZE
- CAT
- CAVE_SPIDER
- CHICKEN
- COD
- COW
- CREEPER
- DOLPHIN
- DONKEY
- DROWNED
- ENDERMAN
- EVOKER
- FOX
- GHAST
- GIANT
- GLOW_SQUID
- GOAT
- HOGLIN
- HORSE
- HUSK
- ILLUSIONER
- IRON_GOLEM
- LLAMA
- MAGMA_CUBE
- MULE
- MUSHROOM_COW
- OCELOT
- PANDA
- PARROT
- PHANTOM
- PIG
- PIGLIN
- PIGLIN_BRUTE
- PILLAGER
- POLAR_BEAR
- PUFFERFISH
- RABBIT
- RAVAGER
- SALMON
- SHEEP
- SHULKER
- SILVERFISH
- SKELETON
- SKELETON_HORSE
- SLIME
- SNOWMAN
- SPIDER
- SQUID
- STRAY
- STRIDER
- TRADER_LLAMA
- TROPICAL_FISH
- TURTLE
- VEX
- VINDICATOR
- WANDERING_TRADER
- WITCH
- WITHER_SKELETON
- WOLF
- ZOGLIN
- ZOMBIE
- ZOMBIE_HORSE
- ZOMBIE_VILLAGER
- ZOMBIFIED_PIGLIN

# Whether shopkeeper mobs shall not be affected by gravity.
disable-gravity: false
# The range in chunks around players in which shopkeeper mobs will be affected
# by gravity. Setting this too high may have a negative impact on performance.
# And setting it below the server's entity tracking range will result in
# players being able to see mobs floating in mid-air until they get close
# enough. A value of 0 will limit the gravity to mobs within chunks that
# contain a player. This has no effect if gravity is disabled.
gravity-chunk-range: 4

# The number of Minecraft ticks between behavior updates of shopkeeper mobs.
# This controls the rate at which we update the gravity and AI of shopkeeper
# mobs. Values above 1 indicate a reduced tick rate and result in a less
# smooth, less reactive, and possibly slower behavior in comparison to the
# behavior of mobs in vanilla Minecraft.
# In order to compensate for a reduced tick rate some activities may be scaled
# accordingly. This ensures, for example, that mobs still rotate their head at
# the same speed towards nearby players, or that mobs still fall at the same
# speed when being affected by gravity.
# Consequently, a reduced tick rate is less performance-intensive in total, but
# may on the other hand be slightly more performance-intensive per individual
# behavior update.
# Values above 3 are clearly noticeable and offer little additional benefit.
mob-behavior-tick-period: 3

# Whether mob shopkeepers make sounds.
silence-living-shop-entities: true

# Whether to show nameplates of mob shopkeepers.
show-nameplates: true
# Whether to always show nameplates. If disabled, nameplates will only be shown
# when looking directly at the shopkeeper.
always-show-nameplates: false

# Whether to allow the creation of Citizens NPC shopkeepers. Requires the
# plugin Citizens.
enable-citizen-shops: true
# The entity type of newly created Citizens NPC shopkeepers.
default-citizen-npc-type: 'PLAYER'
# Whether to set the Citizens NPC owner of player-owned NPC shopkeepers. If
# disabled, the Shopkeepers plugin will automatically remove the Citizens NPC
# owners of player shopkeepers again.
# By enabling this setting, and configuring the Citizens command permissions
# for your players accordingly, you can allow shop owners to use the commands
# of the Citizens plugin to edit the Citizens NPCs of their NPC shopkeepers.
set-citizen-npc-owner-of-player-shops: false
# Whether to immediately save all Citizens NPCs whenever the Shopkeepers plugin
# modifies a Citizens NPC. If disabled, the Citizens plugin handles the saving
# of the Citizens NPCs as usual: They are saved when the Citizens plugin shuts
# down, periodically as configured in the Citizens config, and when manually
# triggered via command by a player.
save-citizen-npcs-instantly: false
# Whether shopkeeper snapshots shall save and restore Citizens NPC data.
# Warning: When you disable this setting, the Shopkeepers plugin automatically
# deletes all NPC data that was previously saved by shopkeeper snapshots.
snapshots-save-citizen-npc-data: true
# Whether to automatically delete all invalid Citizen shopkeepers during plugin
# startup. This includes for example Citizen shopkeepers that are attached to
# the same Citizen NPC as another shopkeeper, or any shopkeepers for which the
# corresponding Citizen NPC is missing (this can for example occur if the NPC
# has been deleted while the Shopkeepers plugin was disabled).
# In previous versions, this has been the default behavior. However, because it
# is risky to automatically delete shopkeepers, especially since the detection
# of invalid shopkeepers can potentially go wrong, this functionality is now
# offered via this setting and disabled by default. In either case, the plugin
# will log warnings whenever it detects invalid Citizen shopkeepers.
# Alternatively, the command '/shopkeepers cleanupCitizenShopkeepers' can also
# be used to manually delete these invalid shopkeepers when they are detected.
delete-invalid-citizen-shopkeepers: false

# Whether to allow the creation of sign shops.
enable-sign-shops: true
# Whether to allow the creation of sign posts (instead of only wall signs).
enable-sign-post-shops: true

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Naming
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# A regular expression used to validate shopkeeper names. For detailed
# information on regular expressions the following documentations are helpful:
# * https://docs.oracle.com/javase/9/docs/api/java/util/regex/Pattern.html
# * http://www.regular-expressions.info/tutorial.html
# Here are a few examples:
# * "[A-Za-z0-9 ]{3,25}": The default. Allows the letters A to Z, in both upper
# and lower case, and the digits 0 to 9. The name has to consist of at least 3
# characters and can be maximal 25 characters long.
# * "[A-Za-z0-9&§ ]{3,25}": Same as the default, but allows using color codes.
# * "[\p{L}0-9 ]{3,25}": Same as the default, but allows any letter to be used,
# regardless of the language. If you encounter errors when the config is
# loaded, make sure that your config file is encoded as UTF-8.
# * ".*": Matches everything.
# * Adding "(?i)" at the front enables case insensitive matching.
# * "(?=X)": The name has to match "X" (X can be another embedded expression),
# but the name is not consumed and has to also match the following expressions.
# * "(?!.*X).*": The name is not allowed to contain anything that matches "X".
# * "(?i)(?=[a-z0-9 ]{3,25})(?!.*bitch|dick|ass).*": Filters bad words.
name-regex: "[A-Za-z0-9 ]{3,25}"
# Whether player shops get named via item. This will hide the naming option
# from the editor menu.
naming-of-player-shops-via-item: false
# Whether shop owners are allowed to rename their Citizens NPC shopkeepers. By
# default, those shopkeepers will be named after the player who owns the shop.
allow-renaming-of-player-npc-shops: false

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Editor Menu
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# The number of pages that can be filled with trades. The maximum is 10.
max-trades-pages: 5

# The items used for the buttons and icons in the trades page row.
# The display name and lore of these items get set via the corresponding
# messages and can therefore not be defined here.
previous-page-item: WRITABLE_BOOK
next-page-item: WRITABLE_BOOK
current-page-item: WRITABLE_BOOK
trade-setup-item: PAPER

# The item used for the set-name button, and the naming item (if enabled).
name-item: NAME_TAG

# Whether the editor menu of player shops contains an option to open the shop's
# container.
enable-container-option-on-player-shop: true
# The item used for the 'open container' editor button.
container-item: CHEST

# The item used for the trade notifications editor button in player shops.
trade-notifications-item: BELL

# The item used for the delete button.
delete-item: BONE

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Non-Shopkeeper Villagers
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# Whether to prevent trading with non-shopkeeper villagers.
disable-other-villagers: false
# Whether to block regular non-shopkeeper villagers from spawning. Villagers
# spawned by plugins, spawn eggs, mob spawners or by curing zombie villagers
# are however not affected by this.
block-villager-spawns: false
# Whether to prevent curing of zombie villagers.
disable-zombie-villager-curing: false
# Whether non-shopkeeper villagers can be hired.
hire-other-villagers: false

# Whether to prevent trading with non-shopkeeper wandering traders.
disable-wandering-traders: false
# Whether to block non-shopkeeper wandering traders and trader llamas from
# spawning. Wandering traders and trader llamas spawned by plugins, spawn eggs
# or mob spawners are however not affected by this.
block-wandering-trader-spawns: false
# Whether non-shopkeeper wandering traders can be hired.
hire-wandering-traders: false

# Whether regular villagers can be edited by sneaking and right-clicking.
edit-regular-villagers: false
# Whether regular wandering traders can be edited by sneaking and
# right-clicking.
edit-regular-wandering-traders: false

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Hiring
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# The item to use for the hire button in player shopkeepers that are for sale,
# and for the hire-cost when hiring non-shopkeeper villagers.
hire-item: EMERALD
# The amount of hire-cost items it costs to hire a non-shopkeeper villager.
hire-other-villagers-costs: 1
# Whether hiring a player shopkeeper also requires the permission to create
# player shopkeepers of that type.
hire-require-creation-permission: true

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Trading
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# Whether to prevent players from trading with their own shopkeepers. Keeping
# this enabled is recommended.
prevent-trading-with-own-shop: true
# With this enabled player shopkeepers don't trade while their owner is online.
# This might be useful for role-playing servers, which wish to force players to
# trade with each other directly while being online.
prevent-trading-while-owner-is-online: false
# In some situations, Minecraft allows the trading of items even if they do not
# fully match (e.g. villagers accept items with additional metadata). With this
# setting enabled, the Shopkeepers plugin will always check that the traded
# items fully match before allowing the trade to take place.
use-strict-item-comparison: false

# Whether to increment Minecraft's talked-to-villager and traded-with-villager
# statistics whenever a player opens the trading menu and trades with a
# shopkeeper.
increment-villager-statistics: false
# Whether to mimic Minecraft's normal villager trading sounds whenever a player
# trades with a villager shopkeeper. This only applies to villager shopkeepers
# and ignores the 'silence-living-shop-entities' setting.
simulate-villager-trading-sounds: true
# Whether to simulate villager ambient sounds for villager shopkeepers. This
# ignores the 'silence-living-shop-entities' setting.
simulate-villager-ambient-sounds: false
# Whether to mimic Minecraft's normal wandering trader trading sounds whenever
# a player trades with a wandering trader shopkeeper. This only applies to
# wandering trader shopkeepers and ignores the 'silence-living-shop-entities'
# setting.
simulate-wandering-trader-trading-sounds: true
# Whether to simulate wandering trader ambient sounds for wandering trader
# shopkeepers. This ignores the 'silence-living-shop-entities' setting.
simulate-wandering-trader-ambient-sounds: false
# Whether to play the simulated trading sounds of villager and wandering trader
# shopkeepers only to the trading player, instead of broadcasting them to all
# nearby players as it is the case in vanilla Minecraft. This does not affect
# the simulated ambient sounds.
simulate-trading-sounds-only-for-the-trading-player: true

# This sound effect is played to players when they trigger a successful trade.
trade-succeeded-sound:
  sound: UI_BUTTON_CLICK
  pitch: 2.0
  volume: 0.3
# This sound effect is played to players when their trade attempt fails for any
# reason.
trade-failed-sound:
  sound: BLOCK_BARREL_CLOSE
  pitch: 2.0
  volume: 0.5

# The percentage that should be removed from player shop earnings.
tax-rate: 0
# Whether to round up instead of down when calculating the tax of a player shop
# transaction.
tax-round-up: false

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Trade Notifications
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# Whether to inform players with the required trade notification permission
# ('shopkeeper.trade-notifications.admin' for admin shop trade notifications
# and 'shopkeeper.trade-notifications.player' for player shop trade
# notifications) about trades that take place. If a player would also receive a
# trade notification because trade notifications for shop owners are enabled,
# they will only receive the shop owner specific trade notification.
notify-players-about-trades: false
# This sound effect is played when a player receives a trade notification. Set
# this to an empty String to disable the sound effect.
trade-notification-sound: ""

# Whether to inform shop owners about trades that take place in their shops.
notify-shop-owners-about-trades: true
# This sound effect is played when a shop owner receives a trade notification.
# Set this to an empty String to disable the sound effect.
shop-owner-trade-notification-sound:
  sound: ENTITY_EXPERIENCE_ORB_PICKUP
  volume: 0.25

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Trade Log
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# Players can trigger many equal trades in quick succession. For example, when
# players trade by shift clicking the result slot, they can trigger up to 64
# individual trades at once with a single click. And even when not shift
# clicking, they can quickly trigger a considerable number of trades.
# In order to represent the logged trades more compactly, we merge successive
# trades that happen over a certain period of time if they involve the same
# player, the same shopkeeper, and the same items. This setting specifies the
# maximum duration in ticks during which successive equal trades are merged.
# Setting this to a value of 0 disables the merging of trades. Setting this to
# a value of 1 will only merge trades that are triggered by the same inventory
# action (e.g. by the same shift click).
# It is recommended to not set this value to something longer than a few
# seconds: The longer the chosen duration, the greater the difference between
# the logged timestamps and shopkeeper states may be to the actual timestamps
# and shopkeeper states at which the merged trades took place.
trade-log-merge-duration-ticks: 300
# The merging of trades is aborted prematurely if the time gap to the previous
# trade is longer than this duration in ticks. This setting can be used in
# combination with a larger value for 'trade-log-merge-duration-ticks' to limit
# the maximum waiting time for a subsequent trade.
# Setting this to a value of 0, or a value greater than or equal to
# 'trade-log-merge-duration-ticks' will cause this setting to have no effect.
# Setting this to something too low for trades to realistically be manually
# triggered (such as only a few ticks) will make the chosen
# 'trade-log-merge-duration-ticks' effectively pointless. For performance
# reasons, the actual duration may dynamically vary by several ticks.
trade-log-next-merge-timeout-ticks: 100

# Whether to log all trades to CSV files inside the plugin folder.
log-trades-to-csv: false

# Whether to also log the metadata of items. This includes, for example, their
# display name, lore, enchantments, etc. This data will be logged in Spigot's
# YAML format. Enabling this setting can, however, noticeably increase the
# storage space requirements.
log-item-metadata: false

# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
# Currencies
# *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

# The item for the currency used in player shops.
currency-item: EMERALD

# The item for the placeholder when a player has not set the cost for an item.
zero-currency-item: BARRIER

# The item for a second, higher-value currency used in the second trading slot
# of player shops. Set to 'AIR' to disable the second currency.
high-currency-item: EMERALD_BLOCK

# The item for the placeholder when a player has not set the second currency
# cost for an item.
zero-high-currency-item: BARRIER

# The value of the second currency, based on the first currency.
high-currency-value: 9
# The second currency will only be used if an item's cost is greater than this
# value.
high-currency-min-cost: 20