# Blacksmith

The blacksmith plugin adds a new blacksmith trait to Citizens NPCs. NPCs are able to repair a player's held item for a
fee. Costs are highly customizable.

### Important changes from the original fork

- The problem with armor being unrepairable because the player would equip it instead has been fixed.
- A lot of configuration value have had their paths altered, so configurations need to be updated.
- By default, natural cost is used. The original fork made it cheaper the more damaged an item is, but natural cost
  makes the cost increase the more damaged the item is.
- EnchantmentTarget is used instead of a hard-coded list of repairable items
- All settings (except default reforge-able-items), both global and for each blacksmith, can be changed using commands,
  and support tab-completion.

### Dependencies

- Citizens2
- Vault

## Basic usage

To create a new blacksmith, simply add the blacksmith trait to an NPC. Right-clicking the NPC will tell you if the
currently held item is repairable by the blacksmith. If it is, the blacksmith should give a price quote. Right-clicking
again starts the repair. The item should be given back or dropped after a random delay according to the set limits.

While costs are always set globally (no blacksmith can do the same job for cheaper), the blacksmith's messages,
cool-down between each re-forge, whether the item is dropped or given, the chance of failing or adding an enchantment,
the maximum number of added enchantments, max and min delays, the length of the cool-down and which items the blacksmith
is able to re-forge can be changed individually.

Also note: Changing the default value of a setting doesn't change the setting for existing NPCs, even if no custom value
has been set. Make sure to change default settings as needed before creating too many NPCs.

### Special behavior

In addition to just being able to repair items, blacksmiths have some random features which can be cool or annoying:

- There is a chance that blacksmiths fail to repair an item, leaving it at about the same durability as before. Use
  failReforgeChance to control the chance. Set it to 0 to remove the feature.
- There is a chance a blacksmith may add

## Commands

- /blacksmith <option> \[new value] - Changes a configuration option for the selected blacksmith (use Citizens' /npc
  select first)
- /blacksmithconfig <reload/option> \[new value] - Changes a default/global configuration value

If a new value isn't specified, the current value is displayed instead.

Note: basePrice, pricePerDurabilityPoint and enchantmentCost can be set like: `/blacksmithconfig option 4` or
like `/blacksmithconfig option material/enchantment 4` depending on whether you are setting the default or an override
for a specific material/enchantment.

## Permissions

- blacksmith.admin - Allows overall blacksmith configuration
- blacksmith.edit - Allows changing settings for the selected blacksmith NPC
- blacksmith.use - Allows the player to repair items using blacksmiths

## Configuration options

### Global-only options

- basePrice (positive decimal number) - The base price which has to be paid regardless of the durability remaining for
  an item. Setting this without specifying a material sets the base-price for any item the base-price has not been set
  for.
- pricePerDurabilityPoint (positive decimal number) - The price added for each durability point present/missing (depends
  on natural cost's value). Setting this without specifying a material sets the price-per-durability-point for any item
  the price-per-durability-point has not been set for.
- enchantmentCost (positive decimal number) - The added cost for each level of an enchantment present on the item. The
  cost can be set for specific enchantments. Not specifying an enchantment sets the value for all enchantments without a
  set value.
- useNaturalCost (true/false) - If true, each missing durability will add to the cost (price = basePrice +
  missingDurability * pricePerDurabilityPoint + enchantmentCost). If false, durability will be used to calculate the
  cost instead of missingDurability (this was the behavior before natural cost was added).

### Per-npc (with default values)

#### Configuration values

- dropItem (true/false) - Whether the blacksmith should drop the repaired item on the ground (instead of putting it into
  the player's inventory)
- disableCoolDown (true/false) - Whether to completely disable the cool-down between repairs
- disableDelay (true/false) - Whether to completely disable the delay required to re-forge an item
- failReforgeChance (0-100) - The chance of the blacksmith failing to repair an item
- extraEnchantmentChance (0-100) - The chance of the blacksmith adding an enchantment to an item
- maxEnchantments (0-10) - The maximum number of different enchantments a blacksmith can add
- maxReforgeDelay (0-3600) - The maximum number of seconds a player needs to wait for an item to be repaired
- minReforgeDelay (0-3600) - The minimum number of seconds a player needs to wait for an item to be repaired
- reforgeCoolDown (0-3600) - The cool-down a player has to wait between each time they use one specific blacksmith
- reforgeAbleItems (DIAMOND_LEGGINGS,GOLD-pickaxe,bow, etc.) - Specifies which items this blacksmith is able to
  re-forge. If set to "" or null, all items can be repaired. If set to a list of items, only the items specified can be
  repaired. Some presets have been included for ease of use. Use a preset by specifying "preset:sword-smith" instead of
  a material such as "gold-pickaxe". Available presets: SWORD_SMITH, WEAPON_SMITH, ARMOR_SMITH, TOOL_SMITH,
  RANGED_SMITH.

#### Messages

- busyPlayerMessage - The message displayed when the blacksmith is serving another player
- busyReforgeMessage - The message displayed when the blacksmith is busy reforging an item
- coolDownUnexpiredMessage - The message displayed when the player has to wait for the cool-down to expire before using
  the blacksmith again
- costMessage - The message displayed when telling a player about the cost of repairing an item
- failReforgeMessage - The message displayed when a blacksmith fails to re-forge an item
- insufficientFundsMessage - The message displayed when a player is unable to pay for reforging an item
- invalidItemMessage - The message displayed when a blacksmith is presented an item which it cannot repair
- itemChangedMessage - The message displayed when a player changes their item after being shown the repair cost
- startReforgeMessage - The message displayed when a blacksmith starts reforging an item
- successMessage - The message displayed when a blacksmith successfully repairs an item