
Repair Shop
RepairShop, a Minecraft plugin that turns a Citizens NPC into a blacksmith. Players right click the NPC and a menu lists every damaged item they're carrying, each priced on how worn it is, what it's made of, and what's enchanted on it, paid through Vault
Список изменений
RepairShop 2.1.0
Released 15/09/2026. Built and verified against Paper 1.21.11, runs on Minecraft 1.9 → 26.2.
Custom items are priced by what they do, not what they are made of
A datapack "Ender Chestplate" is a leather chestplate carrying 7 armour points, 1 toughness and 598 durability better than diamond, and more durable than netherite. RepairShop priced it as leather, so repairing it cost less than a diamond helmet. Anything built on a cheap base material had the same problem: the Armor Upgrades sets, infinity-cave's weapons, MythicMobs gear.
Items that carry their own stats are now compared against the vanilla ladder of their own shape.
For a chestplate that ladder is the leather, gold, chainmail, iron, diamond and netherite
chestplates, each rung is scored from its real attributes and durability, and paired with the price
already configured for it in tiers:. The custom item is scored the same way and its value read off
the ladder, then adjusted for rarity.
Two things follow from building the ladder that way. The rungs are read from the running server, so
no vanilla numbers are hard-coded and nothing needs updating when a material is added or rebalanced.
And the values come from your own tiers: table, so the result stays anchored to your economy
rather than to some absolute idea of what an item is worth.
What it costs now (As an example)
| Item | Before | After | For reference |
|---|---|---|---|
| Ender Chestplate (datapack) | 33 | 1,321 | diamond chestplate 1,188 · netherite 2,375 |
| Steel Battleaxe (infinity-cave) | 1,995 | 2,712 | netherite axe 1,995 |
Worked example, with the shipped weights:
| Rung | Score | Value |
|---|---|---|
| leather chestplate | 3.80 | 26 |
| golden chestplate | 6.12 | 115 |
| chainmail chestplate | 7.40 | 170 |
| iron chestplate | 8.40 | 265 |
| Ender Chestplate | 15.08 | interpolated → 846 |
| diamond chestplate | 16.28 | 950 |
| netherite chestplate | 19.42 | 1,900 |
846 × 1.25 (epic) = 1,057 base, × 1.25 (chestplate shape) = 1,321 for a full repair.
Vanilla gear is untouched
An item that declares no stats of its own keeps exactly the tier price it had in 2.0.0. The default
mode: highest also means a custom item can never be priced below its material tier. Set
mode: auto to let weak custom items fall below it.
Configured under pricing.auto-value in config.yml: weights per attribute, a value per point of
durability, rarity multipliers, and a cap on how far an item better than anything vanilla can
extrapolate. enabled: false restores 2.0.0 pricing exactly.
New: /repairshop items hand-written prices for the rest
Automatic valuation only works on items that have stats to read. For the rest a MythicMobs reward with no attributes, or an item whose automatic price you want to pin hold it and press one button.
The item is captured by whatever identifies it, in order of preference: its MythicMobs id, its
item_model, its custom model number, or its name. The price is seeded with what the item is worth
today, so you are editing a real number rather than starting from zero and briefly making it free.
Rules live in custom-items.yml and are global: an item is worth what it is worth, and each
shop's own price-multiplier still applies on top, so one item needs one entry however many shops
you run. A rule always beats the automatic price. base-value replaces the price outright,
multiplier scales whatever the price would otherwise have been, including the automatic one. When
several rules match, the most specific wins.
Also
/repairshop quotenow says where the base value came from the tier table, the item's own stats (with its score and rarity), or whichcustom-items.ymlrule so a surprising price can be traced without guesswork./repairshop ladder <shape>prints the vanilla ladder the server actually computed. It is the only way to see what the server reported, and the fastest way to check what a weight change did./repairshop compatand the startup line report whether item stats can be read at all.- MythicMobs is detected reflectively. There is no compile or runtime dependency on it, and nothing changes if it is absent.
On servers older than 1.13
Attributes cannot be read, so automatic valuation switches itself off and pricing behaves exactly as it did in 2.0.0. The console says so at startup. Manual rules still work for anything matched by material, name or custom model data.
Fixed
- The vanilla ladder is now forced to rise monotonically. Stats and material value disagree in vanilla a golden axe scores 0.32 and is priced 115, a stone axe scores 2.91 and is priced 42 which made one segment of the axe ladder slope downwards, so a better custom axe would have been quoted a lower price. Found while checking the arithmetic, before release.
- Ladder rungs are deduplicated.
GOLD_andGOLDEN_both resolve to the same material on a modern server, which put it on the ladder twice and created a zero-width segment. build.ps1no longer aborts when javac writes a warning to stderr. Windows PowerShell 5.1 turns native stderr into an ErrorRecord, which$ErrorActionPreference = 'Stop'treated as fatal, it meant-Verifycould never run.
Upgrading from 2.0.0
Drop in the new jar and delete RepairShop-2.0.0.jar, or the server will refuse to load two plugins
with the same name. build.ps1 -Deploy does that for you.
custom-items.yml is created on first start. config.yml gains a pricing.auto-value section
but note that Bukkit does not add new keys to an existing config.yml. The feature works on its
built-in defaults either way, but to tune it you have to write the section in by hand, it is in
src/main/resources/config.yml in this folder, ready to paste into the pricing: block.
Rolling back to 2.0.0
# stop the server first
Remove version 2.1.0, replace it with 2.0.0 version.
2.0.0 ignores the pricing.auto-value keys and leaves custom-items.yml alone, so both can stay
where they are. Prices return to being based on material tier only.
Verification at release
- Compiled against all 6 supported API targets: Spigot 1.9, 1.12.2, 1.13.2 and Paper 1.21.11,
26.2, and 26.2 with Adventure 5.
build.ps1 -Verify. - MiniLegacy text-translator checks all pass.
- Booted against the live server three times: no exceptions, clean shutdowns, and
/repairshop ladderreproduced the hand-calculated scores exactly, confirming the ladder is read from the server rather than falling back to built-in defaults.
