Tags
Creators
Details
2.28.1-261101
Compatibility
Required content
Changes
ShopkeepersAddon 2.28.1-261101
For Shopkeepers 2.28.1 ยท Minecraft 1.21.5+ ยท Paper, Purpur, Spigot
The addon's version now follows Shopkeepers': 2.28.1-<build date> is built for Shopkeepers 2.28.1. This build is 2.28.1-261101; later builds for the same Shopkeepers version only change the date.
Read this first
- Minecraft 1.20.6 is no longer supported. Shopkeepers 2.28.1 itself needs 1.21.5 or newer.
- PacketEvents is now the recommended packet library. It is used first when both are installed. ProtocolLib still works, with limited support (see below).
- Your config is safe to upgrade: your own values are no longer overwritten, and the new message keys are added for you.
Fixed
Duplication and free items
- Shift-click on a "money + item" trade now takes the item too. Before, you kept the item and still got the goods.
- A refused payment now cancels the trade and is refunded, instead of handing out goods for nothing.
- A trade that another plugin cancelled is no longer charged.
- Recipes that list the same material twice (for example 64 + 32 diamonds) are no longer counted twice.
- A money item in the second ingredient slot is refused instead of trading for free.
- Gold nuggets from the trade window can no longer be carried out in a bundle. Money items already inside a bundle are removed.
Player shops
- Player shops now pay their owner, EssentialsX included. The owner is read from Shopkeepers instead of its save file.
- You can no longer bulk-buy more than the shop has in stock, and a shop whose chest cannot be read refuses bulk buys.
- Shift-click accepts a renamed or damaged second item, like a single click does.
- If the owner changes a price while a trade window is open, the sale is checked against the new price instead of paying the old one.
Display and menus
- A sale that is blocked (daily earning limit reached, or the shop owner cannot pay) now shows the red cross. This needs PacketEvents.
- The currency symbol no longer shows twice ("$$5.00").
- The
/shops, Admin Shops and Player Shops menus fill their empty slots, so the buttons stand out. - The buy message no longer shows "UNKNOWN" as the item name.
- Selecting a trade no longer hands the currency stack to your inventory (the "stuck nuggets" cause on Bedrock).
Stability
- No more errors in trade handlers when Vault is not installed; economy is simply off.
- The economy is picked up even if its plugin loads after this one.
- The price prompt times out after 30 seconds, ends when you leave, and no longer locks your chat. Prices that are not positive numbers or are above
economy.selling-price-limitare rejected. - The shop editor no longer turns your inventory slots into barriers when a blacklisted item is on the cursor.
- Config upgrades no longer overwrite your values (for example a daily limit of 500) or delete optional keys.
/shopkeepersaddon reloadruns on the main thread and clears open price prompts.- The "PlaceholderAPI is not installed" error is gone; PlaceholderAPI is optional.
Packet libraries
- PacketEvents (recommended): fully supported.
- ProtocolLib: kept for servers that already use it, with limited support. With ProtocolLib, a refused sale is not drawn with the red cross; the click answers with a message instead.
Tested
Real Minecraft 26.3 client on Purpur 26.3 with Shopkeepers 2.28.1, Vault and EssentialsX: buying, bulk buying, money + item trades, selling a named item, a player shop with a separate owner, a changed price, bundle clicks, the daily limit and the reload command. Not tested yet: ProtocolLib, Bedrock/Floodgate players (the fixes for them are in, please report back), and upgrading from very old configs.
Found a bug? Tell us in the Discord. Thank you to everyone who reported one!
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:pznDR0gz:rAJFbY3K"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:pznDR0gz:rAJFbY3K"
}

