
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
2.2.0
Compatibility
Changes
RepairShop 2.2.0
Released 27/09/2026. Built and verified against Paper 1.21.11, runs on Minecraft 1.9 → 26.2.
Pay with materials when money runs short
A player who cannot afford a repair used to be told so and that was the end of it. Now clicking the item opens a Pay with Materials screen with two ways to settle the bill, each showing exactly what it would take:
- Cash + Materials - every coin they have, materials for the rest. A player with 600 facing a 950 repair pays the 600 and hands over materials worth the other 350.
- Materials Only - no money at all.
Materials are drawn cheapest first, so a player keeps their diamonds if copper and iron will do, and any of them can be kept out of the payment with one click. When the last item overshoots, the overshoot comes off the cash; in materials-only there is no cash to take it from and the smith keeps it (giving change in money would make every blacksmith a place to sell materials). Nothing is taken until the player confirms, and if their money or inventory changed in the meantime the screen redraws instead of charging.
Only plain items count. Anything renamed, carrying lore, custom model data or a plugin tag is never offered and never taken, even if it is a diamond underneath.
Right-clicking an item opens the screen even when cash would cover it, and right-clicking Repair Everything pays for the whole lot the same way.
Material price groups
What each material covers is set in material-groups.yml, in named groups. default ships with 27
materials from charcoal (2) through iron (25), emerald (30) and diamond (120) up to netherite blocks;
a worn-out diamond axe takes 9 diamonds to pay for, three times what the axe cost to craft.
A new group starts as a copy of default and is then adjusted independently. Each shop can use its
own group, follow the group assigned to its world, or take money only. Everything is managed in
game with /repairshop materials (group list, per-material price editor, per-world assignment, and
a new button in the shop editor) or by command.
The default group, cheapest first. "Covers" is what one item takes off a repair bill:
| Material | Covers | Material | Covers | |
|---|---|---|---|---|
| Charcoal | 2 | Iron Ingot | 25 | |
| Gold Nugget | 2 | Emerald | 30 | |
| Iron Nugget | 2.5 | Phantom Membrane | 30 | |
| Coal | 3 | Turtle Scute | 40 | |
| Flint | 3 | Breeze Rod | 60 | |
| Redstone | 3 | Copper Block | 90 | |
| Lapis Lazuli | 5 | Diamond | 120 | |
| Quartz | 5 | Gold Block | 180 | |
| Amethyst Shard | 8 | Iron Block | 225 | |
| Leather | 8 | Netherite Scrap | 250 | |
| Copper Ingot | 10 | Emerald Block | 270 | |
| Gold Ingot | 20 | Netherite Ingot | 1,000 | |
| Armadillo Scute | 25 | Diamond Block | 1,080 | |
| Netherite Block | 9,000 |
Blocks are worth exactly nine of their item. Materials a server version does not have (copper before 1.17, say) are skipped, and every value can be changed in game or in the file.
Update notifications
RepairShop now asks Modrinth, where it is published, whether a newer version is out: a few seconds
after startup and then every 12 hours, entirely off the main thread. When there is one, the console
is told once and admins are told when they join, with a clickable link. /repairshop version shows
the running and latest versions; /repairshop version check asks again now. Configured under
update-check in config.yml; any network failure logs one warning per session and is otherwise
silent.
Fixed
- Repair log lines could be written out of order. Each line was appended by its own async task and the scheduler does not run those in sequence, so a "Repair All" line could land between the items it covered. Lines are now queued and written strictly in order.
- Chat prompts used a plain
HashMapshared with the async chat thread; it is now concurrent.
Upgrading from 2.1.0
Delete the old jar. material-groups.yml is created on first start. The new config.yml sections
(material-payment, update-check) work from the bundled defaults without editing your file, but
add them by hand if you want to tune them. Existing shops follow their world's group until you pick
one; a shop's file gains a material-group: key the next time it is saved.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:FdM5pvQV:ClVA71Sj"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:FdM5pvQV:ClVA71Sj"
}
