2.28.1latestVersion 2.28.14 weeks ago v2.28.1 MC 26.3, 26.2, 26.1.2, 1.21.11, 1.21.10, 1.21.8, 1.21.7, 1.21.6, 1.21.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… Known potential issues: See here. · Permission: The "shopkeeper.*" permission was missing some permissions. · shopkeeper.notify.trades · shopkeeper.setcurrency · shopkeeper.teleport · shopkeeper.teleport.others · shopkeeper.settradedcommand · shopkeeper.snapshot · shopkeeper.edit-villagers · shopkeeper.edit-wandering-traders · shopkeeper.create · shopkeeper.hanging-sign · Fix: An item duplication issue with player shops introduced in v2.28.0, caused by not properly resetting the trading state on failed trade attempts. · Also added a safeguard that aborts subsequent trade attempts if the previous trade was not properly ended. · Fix: An item duplication issue with player shops introduced in v2.28.0 if multiple shop containers share the same inventory, e.g. the two chests of a double chest. · Fix: The container list migration failed for shopkeepers with snapshots, because the snapshot data does not contain the shopkeeper's world. · Fix: The container list migration did not remove the legacy container data ("chestx", "chesty", "chestz"). · Fix: A currency item duplication issue in player shops when the shop owner edits the offers while another player is currently trading. · Trades are now aborted if the trading recipe price no longer matches the price of the corresponding offer. · We also immediately close any open trading views now when the trade offers have been edited, so trading players don't see outdated trades. · Fix: An item duplication issue with the shop creation item and the naming item, caused by removing used items one tick later. · Fix: Hiring non-shopkeeper villagers only charged a part of the costs if the hire items in the player's hand did not cover the full costs. · Fix: Shopkeeper mobs could drop items and experience if they were killed directly, e.g. by other plugins. For example, a fox shopkeeper would always drop the item in its mouth. We now clear the drops of dying shopkeeper entities. · Fix: The trades were not updated (e.g. their out-of-stock visualization) when a shift-click trade was aborted, for example due to insufficient shop container storage space. · Debug: Add debug command "/shopkeeper testKill", which kills the targeted entity by setting its health to zero. Unlike the vanilla kill command, this bypasses damage events and can be used to test the death behavior of shopkeeper entities. · Assumptions: · Remove the no longer relevant sections about our SKUnmodifiableItemStack: The implementation has changed in v2.22.0. · Add section regarding "Inventory#equals". Donations If you like this plugin, consider making a donation. Thanks!2.28.0Version 2.28.0Sep 19, 2026 v2.28.0 MC 26.3, 26.2, 26.1.2, 1.21.11, 1.21.10, 1.21.8, 1.21.7, 1.21.6, 1.21.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… Known potential issues: See here. · Update for MC 26.3. · Add poplar sign and hanging sign shops. · Add support for multiple shop containers: Shop owners can now link additional containers to their player shops. · Config: · Add "max-containers-per-player-shop" (default: 9). Set it to "1" to keep the previous single-container behavior. · Add "add-container-item" (default: "minecraft:lime_stained_glass_pane") for the add-container button. · Config migration 12: Rename "enable-container-option-on-player-shop" to "enable-player-shop-open-container". It only controls now whether players can remotely open a container's inventory from the shop editor. The container information itself is always shown. · Editor: If "max-containers-per-player-shop" is greater than 1, the container button inside the editor allows shop owners to view and edit the linked shop containers. · Click the green glass pane item and then a nearby container to add it as an additional shop container. The usual checks apply (supported container, not already used by another shop, within "max-container-distance", etc.). · Left/Right-click a container to cycle through the different container types. · If enabled, shift-right-click a container to remotely open it and inspect its content. · Shift-left-click a container to remove it after additional confirmation. · Available container types: · "Stock": The shop retrieves trade result items from this container. Trades show as "out-of-stock" if the required result items cannot be found across the stock containers. · "Earnings": The shop stores received items in this container. The shop prefers to store items in earnings containers that already contain the respective item. · "Stock and Earnings": The container stores both stock and earnings (default). · If "max-containers-per-player-shop" is 1, the container editor button behaves similar to before, but includes some additional information now. The single container (and any other previously added containers) automatically act as "Stock and Earnings". · The container information includes the coordinates, whether the container is a double chest, whether it is missing (i.e. no longer exists in the world), and, if support for multiple containers is enabled, its container type. · "delete-shopkeeper-on-break-container" only takes effect when the last shop container is broken. Broken containers remain in the shop's list of containers and show as "missing". · When moving a player shopkeeper, all of its containers must remain within the configured "max-container-distance". · Add player shop expiration: Player shops can now be configured to expire after a certain duration. · Config: · Add setting "player-shop-expiration-days" (default: 0, disabled): If greater than 0, fully owned player shops (i.e. those that were not hired) expire and get deleted this many days after their current owner acquired them (i.e. after creation or transfer). · Add setting "hired-player-shop-expiration-days" (default: 0, disabled): If greater than 0, hired player shops expire and revert back to their for-hire state this many days after they were hired. · Note: Since we previously did not remember the previous hiring cost item once a shop was hired, this only applies to shopkeepers that are set for hire after this update. Existing previously hired player shops behave like fully owned player shops. · Expiration has no effect on shops that are currently already waiting to be hired. · Hiring a shop resets its expiration, even if it is hired again by its current owner, e.g. after it expired and reverted back to its for-hire state. · Add setting "notify-shop-members-about-expiration" (default: true): Controls whether shop owners and members are notified when their shops are about to expire. · If enabled, we notify players roughly 7 days, 3 days, 1 day, 12 hours, 1 hour and 10 minutes before their shop expires (configurable via "player-shop-expiration-notification-thresholds"), so they have a chance to clear their shop containers in time. · We remember when we last notified each player, so we avoid notifying again for the same shop and notification threshold. · Regardless of this setting, we always inform players about the expiration duration when they create or acquire a shop, and when a shop just expired and they happen to be online currently. However, we do not notify about shops that expired while they were offline. · Add setting "player-shop-expiration-notification-thresholds" (default: 10080,4320,1440,720,60,10): A comma-separated list of the notification thresholds in minutes before expiration at which shop members are reminded. · The default corresponds to 7 days, 3 days, 1 day, 12 hours, 1 hour, and 10 minutes before expiration. · Note: The expiration duration and notification thresholds are only rough estimates. For performance reasons, the plugin only checks for expirations and pending notifications every few minutes. Thresholds below this check interval may therefore not be reached before the shop expires. · Expiration is checked roughly every 5 minutes, starting 5 minutes after plugin startup. · Deleting an expired shop automatically unlocks its containers. · All expirations are logged to the server log. · Command: The "/shopkeeper list" output indicates when player shops will expire. · Command: Add "/shopkeeper expiration [player]" (alias "/shopkeeper expiry") to manually list up to the next 8 shops of a player that are about to expire. · Permission: Without the optional player argument, this lists your own expiring shops (permission "shopkeeper.expiration.own", default: true). · Permission: The player can be specified by name or uuid, which also accounts for offline shop members ("permission shopkeeper.expiration.others", default: op). · This command can also be used from the console, in which case the player argument is required. · Note: Since the expiration duration is only an estimate, some of the listed shops may already have reached their expiration time, but not have been expired yet. · Metrics: Add bStats metrics "player-shop-expiration-days" and "hired-player-shop-expiration-days". · Changes to the hiring of player shops: · Previously, hiring a shopkeeper fully transferred the ownership, including the ability of the new owner to delete the shopkeeper. Admins trying to use this feature to manage a controlled market area on their server had to manually monitor for stale market booths and set up new hireable shopkeepers over time. Now, owners of hired shopkeepers are more restricted in what they can do. And in combination with the new shop expiration feature (see setting "hired-player-shop-expiration-days"), it is now possible to set up temporarily hired shops that automatically revert back to their for-hire state once they expire. · Change: Hired player shops can no longer be deleted by their shop members. Instead, the "delete" button in the editor reverts the shop to the for-hire state. · This also applies to admins, so that they do not unknowingly observe a behavior that differs from what other players get, and to also allow them to revert the shop to the for-hire state via the editor. Players with the "shopkeeper.s2.27.0Version 2.27.0Jun 29, 2026 v2.27.0 MC 26.2, 26.1.2, 1.21.11, 1.21.10, 1.21.8, 1.21.7, 1.21.6, 1.21.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… Known potential issues: See here. · Update for MC 26.2. · Add sulfur cube to the by default enabled mob types. · The body equipment slot controls the stored item. However, certain items can result in "visual glitches". · Config: Add "sulfur-cube-max-size" (default: "5"). The maximum supported size is "10". · On Spigot, the age lock is currently not working (SPIGOT-8139): The mob spawns with a random age and ages until the next respawn / chunk reload. · Internal: Paper: Use EntityZapEvent in favor of PigZapEvent. · Add player shop members: Shop owners can now allow additional players access to their shops. · Editor: Add a new option to the editor of player shops to allow owners to view and edit the shop members. · Click an empty slot and then enter the name or id of a player to add as shop member into the chat. · Left/Right click a member to circle through the different access levels. · Shift-click a member to remove them after additional confirmation. · Available shop member access levels: · Container access. · Container and editor access, excluding the ability to view/edit shop members or delete the shop. · Full access (same as shop owner): Can also edit the shop members, delete the shop and, depending on the command permissions, manage the shopkeeper snapshots, set the shop for hire, or transfer the shop. · Notes: · Shop members are taken into account for command completions when the command requires a player name or id. · The "prevent-trading-while-owner-is-online" and "prevent-trading-with-own-shop" settings also apply to other shop members now: Trading is disabled if any shop member is online and shop members cannot trade with shops they have access to (any access level). · If "notify-shop-owners-about-trades" is enabled, the other shop members also receive trading notifications now. · The "deleting-player-shop-returns-creation-item" also returns the shop creation item to players other than the owner if they have full shop access. · The "remove-all" command and "ShopkeeperRegistry#getPlayerShopkeepersByOwner" only affects a player's actually owned shops, not shops they have access to. · If "set-citizen-npc-owner-of-player-shops" is enabled: Citizens NPCs only support a single owner, so other players, even with full access, won't be able to edit the Citizens NPC. · If a shop member's permission changes, any currently open shopkeeper or container view is automatically closed for them. · The editor layout cannot be customized per-player, so the shop members and delete buttons are always visible to all players with access to the editor, but can only be used by players with full shop access. · Config: Add setting "max-members-per-shop" (default: "9"). · The shop members feature can be disabled by setting this to "0". · If the shop members feature is disabled, existing shop members are not automatically deleted from the shopkeeper data, but they are dynamically ignored by the plugin and API. · If the limit is reduced, existing shop members are not automatically deleted, but no new members can be edited via the editor. · Config: Add setting "allow-members-with-full-access" (default: "true"). · If disabled, the access level of existing shop members with "full" access is not automatically updated inside the shopkeeper data, but their access level is dynamically downgraded to "edit" access. · Config: Add setting "members-item" to change the editor item. · Config: Add setting "add-member-item" to change the add-member editor item. · Config: Config migration "11": · Rename "prevent-trading-while-owner-is-online" to "prevent-trading-while-member-is-online". · Rename "notify-shop-owners-about-trades" to "notify-shop-members-about-trades". · Rename "shop-owner-trade-notification-sound" to "shop-member-trade-notification-sound". · Rename debug option "owner-name-updates" to "player-name-updates". · Metrics: Add bStats metric "uses-shop-members". · Mannequin shopkeepers use an "Alex" skinned player head now for their profile editor option to not conflict with the new members editor option. · Fix: Prevent shopkeeper mobs from being sheared by dispensers. Block drops were already prevented before, but other effects on the entity or the dispensed item were not prevented previously. · Fix: Since the last plugin version, shopkeepers were always marked as "dirty" every time they are loaded, causing a redundant save of all shopkeeper data. · Debug: Add option "shopkeeper-dirty" to output additional information whenever a shopkeeper's data is marked as "dirty". Donations If you like this plugin, consider making a donation. Thanks!2.26.1Version 2.26.1Apr 12, 2026 v2.26.1 MC 26.1.2, 1.21.11, 1.21.10, 1.21.8, 1.21.7, 1.21.6, 1.21.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… Known potential issues: See here. · Update for MC 26.1.2. · MC 26.1 and 26.1.1 might work but are not officially supported. · Config: Add setting "enable-closing-of-player-shops" (default: true) that controls whether shop owners can close their shops. · Config: Add setting "force-open-player-shops" (default: true) that controls whether player shops are automatically reopened if "enable-closing-of-player-shops" is disabled. · This setting has no effect if "enable-closing-of-player-shops" is enabled. · Note: Since we do not track whether a shop was closed by the shop owner or the API, this also effectively disables the closing of player shops via the API or when restoring shop snapshots. If you want shops to still be closable via the API or when restoring snapshots, you can temporarily enable this setting after after having disabled "enable-closing-of-player-shops", restart the server to update all player shops, and then disable this setting again. However, be aware that the open state in any previously captured shop snapshots is not automatically updated: This setting is only taken into account at the time a snapshot is restored. · Debug: When the debug mode is enabled, we log whenever a player shop is forcefully re-opened. · Fix: Since the last update, mob equipment and default potion effects were no longer applied on spawn. Donations If you like this plugin, consider making a donation. Thanks!2.26.0Version 2.26.0Feb 21, 2026 v2.26.0 MC 1.21.11, 1.21.10, 1.21.8, 1.21.7, 1.21.6, 1.21.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… Known potential issues: See here. · Permission: Add "shopkeeper.create" (default: "op"). · Only players with this permission can create shopkeepers via command (both admin and player shops). · Config: This permission replaces the previous "create-player-shop-with-command" setting. The setting is automatically removed during config migration 10. · Compared to the previous setting, this permission offers additional flexibility: It is now possible to only allow admins to create player shops via command while still requiring normal players to use the shop creation item. · The "no-permission" message for the shopkeeper creation command includes a note now about using the shop creation item to create player shops. · Manual migration: If you previously allowed your players to create player shops via command, you will have to assign them this new permission now. · Add shop creation items that create shopkeepers with a pre-defined shop and/or object type. · Command: The "/shopkeeper give" command optionally accepts a "shop-type" and "object-type" argument now. When specified, the created shop creation item only spawns shopkeepers of the respective type. · Only player shop types are supported in combination with the shop creation item. · When a player tries to use the shop creation item with a pre-defined shop or object type, we still perform the usual shop and object type disabled and permission checks. I.e. shop creation items can become useless if the respective shop or object type gets disabled or the player misses or loses their permission to use it. · The shop creation message was slightly adapted to omit the non-relevant instructions for switching the selected shop or object type. · Internally, the shop type and shop object type ids are stored in the item's "custom_data" in "PublicBukkitValues" with the keys "shopkeepers:shop_type" and "shopkeepersbject_type". In combination with the "shopkeepers:shop_creation_item" tag, you can use third-party item editing plugins to create custom shop creation items that spawn specific shopkeeper types. · Debug: Extend the output of the "checkItem" command to include whether the held items specify a pre-defined shop or object type. · Add end crystal shop object. · Permission: "shopkeeper.entity.end_crystal" (default: "false", but included in "shopkeeper.entity.*"). · Config: Add "enable-end-crystal-shops" (default: "true"). · Config: Add "allow-end-crystal-shops-in-the-end" (default: "false"). · Placing end crystal shops in the end is disabled by default, because they can for example affect dragon fights. · Config: Rename some settings, since they might also affect non-mob entities. · Rename "silence-living-shop-entities" to "silence-shop-entities". · Rename "mob-behavior-tick-period" to "entity-behavior-tick-period". · The config is automatically migrated (version 10). · Disable the gravity for flying mobs. · Certain mobs can now be placed in the air without dropping to the ground due to gravity: Allay, bat, bee, chicken, blaze, ender dragon, ghast, happy ghast, parrot, phantom, vex, wither. · When spawned, we still adjust their spawn location within their spawn location block, but we no longer automatically place them on the block below that, like we do for other mobs, allowing them to hover one block above the ground. · We periodically check if the mob is still in the air and update their onGround state accordingly for some of these mobs to play their flying animation. · Also: Entities tick their AI now while falling. · Prevent placing mobs in midair that are neither flying nor shulker. · Add an item with shopkeeper information to the editor UI. The item's lore includes: The shop id, unique id, name, shop type, object type, location and owner (for player shops). · In the regular villager editor, we show entity information instead (entity id, unique id and location). · Config: Add "shop-information-item" (default: "minecraftaper"). · Add an editor option to temporarily close the shop: Players cannot trade with or hire the shop while it is closed. · Config: Add settings to disable certain aspects of normal villagers and wandering trades per world: · disable-other-villagers-worlds · block-villager-spawns-worlds · disable-zombie-villager-curing-worlds · hire-other-villagers-worlds · disable-wandering-traders-worlds · block-wandering-trader-spawns-worlds · hire-wandering-traders-worlds · Even when disabled, allow normal villagers and wandering to still be spawned manually via command, similar to how they can still be spawned via spawn eggs. However, during chunk loading, such villagers are still subsequently removed. · Fix: Immediately delete shopkeepers again if they fail to spawn, e.g. if placed in a protected region and "bypass-spawn-blocking" is disabled. · This only applies to player created shopkeepers (ShopkeepersPlugin#handleShopkeeperCreation), not shopkeepers created via the API by other means (ShopkeeperRegistry#createShopkeeper). · We only check if the shopkeeper was able to spawn once immediately after creating it. We do not automatically delete shopkeepers that later fail to spawn. · Note: From brief testing, Citizens NPC shopkeepers seem to bypass region protection plugins like WorldGuard currently, since they don't call the usual Bukkit entity spawn events that WorldGuard listens to. · Also: When a shopkeeper is deleted, we now immediately try to reuse the last id again if there is no other shopkeeper with a larger id existing. · Add detection and cleanup of unspawnable shopkeepers: · Each shop object whose spawning is handled by us (i.e. excluding Citizen shopkeepers) now keeps track of whether its last spawn attempt failed. During plugin startup, we log a warning for each shopkeeper that previously failed to spawn. · Command: Add command "/shopkeeper deleteUnspawnableShopkeepers". · Permission: "shopkeeper.delete-unpawnable-shopkeepers" (default: "op") · Checks for shopkeepers that previously failed to spawn and optionally deletes them after confirmation. · Config: Add setting "delete-unspawnable-shopkeepers" (default: "false") to automatically delete unspawnable shopkeepers during plugin startup. · Since automatically deleting shopkeepers is potentially risky, it is recommended to keep this setting disabled and instead use the newly added command to manually check for and optionally delete unspawnable shopkeepers. · Fix: Bat shopkeepers are awake now unless they have a solid block above them. · Fix: Prevent copper golems from accessing protected copper chest shop containers. · Config: Add setting "prevent-copper-golem-access" (default: "true") that controls whether to prevent copper golems from accessing protected copper chest shop containers. · Note: On Spigot servers, this is only supported on the very latest builds. On older 1.21.9 to 1.21.11 server versions, players will need to place their copper shop chests somewhere where they cannot be accessed by nearby copper golems placed by other players. · Server assumption tests: Extend the tested item data. Donations If you like this plugin, consider making a donation. Thanks!2.25.0Version 2.25.0Dec 14, 2025 v2.25.0 MC 1.21.11, 1.21.10, 1.21.8, 1.21.7, 1.21.6, 1.21.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… Known potential issues: See here. · Update for Minecraft 1.21.11. · Add support for new mob types: · Camel husk: Similar editor options as camel. · Nautilus: Supports baby variant, saddle and armor. · Zombie nautilus: Supports saddle, coral variant and armor. · Parched: Similar editor options as other skeleton types. · Horse shopkeepers: Add support for netherite horse armor. · Drop support for Minecraft versions below 1.21.5. This has the following benefits: · Modernize the plugin by building against a more modern Bukkit version. · Reduce the plugin size by bundling fewer compatibility modules. · Simplify updating the plugin for new Paper versions: For versions before 1.21.5, the Spigot and Paper versions shared the same compatibility code, which required building all Paper modules against the Spigot mappings. But since Paper usually releases their Spigot mapping support after some delay, updating the plugin to support the latest Minecraft version on Paper was also delayed. · Command: Add command "/shopkeeper history [player|'all'|'self'] [shop=...|owner=...|'own'|'player'|'admin'|'all'] [page]". · Permission: "shopkeeper.history.own" (default: true): Allows viewing the own trading history. · Permission: "shopkeeper.history.admin" (default: op): Allows viewing the trading history of others and admin shops. · Example: "/shopkeeper blablubbabc shop=Test" shows the trading history of player "blablubbabc" with the shopkeeper named "Test" (assuming there is only a single shopkeeper with this name). You can also target a specific shopkeeper via their id, unique id, or by looking at them in-game. · The player and owner argument also support the look-up of offline players, taking into account the currently existing shop owners, and existing online mode players. However, the plugin does not check the trading history to find offline players by name. · Only the currently existing shopkeepers can be specified by name or id. To look up the trading history of a no longer existing shop, use their unique id. · If the owner of a shop has changed, a player without the shopkeeper.history.admin permission can only view the trading history of the shopkeeper from when they still owned the shop. · Config: This command is currently only supported when using trade-log-storage: 'SQLITE'. · Config: Item metadata (e.g. item display names) can only be retrieved when the trade was logged while using log-item-metadata: true. · Debug: If we fail to load the stored item metadata (can for example be the case when there have been backwards incompatible changes across server updates), we log the error in debug mode but otherwise silently ignore it and display the item without the metadata in the history. · Trade log: Depending on the trade log merging configuration and the hard-coded IO buffering delay, it can take a few seconds for trades to show up in the trading history. In order for trades to show up in the trading history more quickly, the IO buffering delay (the delay before logs are persisted to the database) is reduced from 30 seconds to 10 seconds. With this change and the default trade log merging configuration, it now takes 10-25 seconds for trades to show up in the trading history, versus the 30-45 seconds from before. · In the command output, players have their uuid as hover text and shops have their shopkeeper uuid as hover text. · Command: The "/shopkeeper teleport" command shows the shopkeeper uuid as hover text in the success message now. · Fix: Consider copper chests valid shop containers. · Fix: Automatically create missing parent directories for the SQLite trade log. · Fix: Repeat the setup of the SQLite trade log database if an error occurred during a previous save attempt. · Fix: Baby zombies would occasionally spawn or mount nearby chickens. Disable spawn data randomization. · We also cancel any entity mounting events for shopkeeper mobs now, in case there are ever any cases in the future in which mobs might try to mount other mobs, outside of spawning. · Fix: UnsupportedOperationException during config loading when the missing default value for shop-creation-item is inserted. Donations If you like this plugin, consider making a donation. Thanks!2.24.0Version 2.24.0Oct 16, 2025 v2.24.0 MC 1.21.10, 1.21.8, 1.21.7, 1.21.6, 1.21.5, 1.21.4, 1.21.3, 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… Known potential issues: See here. · Update for Minecraft 1.21.10. · Note: 1.21.9 is not supported and has been superseded by 1.21.10. · Update the fallback compatibility module. · Add copper golem to the by default enabled mob types. · It supports the hand, offhand, head and saddle equipment slots. · Its oxidation level is fixed and can be changed via the editor. · Add mannequin to the by default enabled mob types. · It does not rotate towards nearby players. · Equipment is supported but only works with the latest Spigot versions (see SPIGOT-8087). · The main hand and pose can be toggled via the editor. Note: Some of the poses have a very small hitbox. · We hide the default "NPC" description from the nametag. There is no editor option to customize the description yet. · The skin can be specified via the editor by entering the name or uuid of an existing player in chat. · On Spigot, the profile lookup by name uses a blocking player id lookup as a workaround for some issue currently (see SPIGOT-8088). · There are no editor options yet to customize the profile in other ways or hide individual skin layers. · Add armor stand to the by default enabled mob types. · The editor supports toggling the base plate, arms, and size, as well as equipping items. · Config: Changes to the item data format inside the config. · The new format aligns more closely with how Minecraft represents item data and how we represent item data inside the save file. · We now use Minecraft's item type ids instead of Bukkit's material names. · Additional item data components are represented in SNBT. · Example: Old: Code (YAML): shop-creation-item: type : VILLAGER_SPAWN_EGG display-name : ' { "text": "Shopkeeper", "italic":false, "color": "green" }' New (1.20.5+): Code (YAML): shop-creation-item: id : 'minecraft:villager_spawn_egg' components: minecraft:custom_name : ''' { "color": "green", "italic":false, "text": "Shopkeeper" }''' New (1.21.5+): SNBT instead of JSON for text data. Code (YAML): shop-creation-item: id : 'minecraft:villager_spawn_egg' components: minecraft:custom_name : ' {color: "green",italic:0b,text: "Shopkeeper" }' · Your existing config is automatically migrated to the new format. · Add new setting data-version: This setting is automatically updated whenever you migrate to a new server version and used to automatically migrate your item data inside the config. · We no longer convert between legacy and alternative color codes. For recent Minecraft versions, the use of Minecraft's JSON / SNBT text representation is recommended. · Config: Changes to how we compare the data of config items such as the shop creation item. · Previously, we tried to emulate Minecraft's NBT data matching based on Bukkit's item serialization output. This approach was not ideal: Bukkit's item serialization comes with overhead and its output does not perfectly match Minecraft's item NBT structure. And on recent versions of the Paper server, the Bukkit item serialization has been deprecated and might no longer receive updates. · The item matching implementation was updated to directly use Minecraft's underlying NBT comparison logic. · However, this also means that this logic is now part of the plugin's Minecraft version specific code that must be updated for every new version of Minecraft. A reflection based fallback implementation is available for Spigot servers, but is likely to break across server updates as well. · To more closely align with Minecraft's NBT matching logic used in commands and by the custom_data predicate, we also match partial lists now. Previously, we would not match partial lists to more closely align with how items are compared in villager trades. But in newer versions, the item comparison in villager trades has become more strict. And for the matching of config items, we prefer a more lenient partial matching of item data. · Data: Remove the item conversion feature. · This feature was used as a workaround in the past to help server owners deal with changes to the internal item data representation across server versions. Since then, there have been changes in Spigot to better preserve text data during serialization. And with the introduction of item data components in MC 1.20.5 and the changes to how Minecraft itself normalizes and compares item data now, this feature should no longer be required. Also, especially on Paper servers, this feature might break items since it relies on Bukkit's serialization and deserialization of ItemMeta, which is deprecated on Paper servers. · Command: Remove command convertItems and related permissions shopkeeper.convertitems.own and shopkeeper.convertitems.others. · Debug: Remove debug option item-conversions. · Config: Remove settings convert-player-items, convert-all-player-items and convert-player-items-exceptions. · Data: Use default salmon variant if missing. · Fix: Shopkeeper mobs no longer equip items from dispensers. · These equipment items are not persisted and permanently lost once the shopkeeper is respawned. Instead, use the shopkeeper editor to add equipment to shopkeeper mobs. Donations If you like this plugin, consider making a donation. Thanks!2.23.10Version 2.23.10Jul 27, 2025 v2.23.10 MC 1.21.8, 1.21.7, 1.21.6, 1.21.5, 1.21.4, 1.21.3, 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… Known potential issues: See here. · Update for MC 1.21.8 (Paper support). Donations If you like this plugin, consider making a donation. Thanks!2.23.9Version 2.23.9Jul 9, 2025 v2.23.9 MC 1.21.7, 1.21.6, 1.21.5, 1.21.4, 1.21.3, 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… Known potential issues: See here. · Update for MC 1.21.7. · Data: Minor internal changes to item serialization and handling of deserialization issues. Donations If you like this plugin, consider making a donation. Thanks!2.23.8Version 2.23.8Jun 21, 2025 v2.23.8 MC 1.21.6, 1.21.5, 1.21.4, 1.21.3, 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… Known potential issues: See here. · Fix support for Paper versions before 1.21.6. Donations If you like this plugin, consider making a donation. Thanks!2.23.7Version 2.23.7Jun 20, 2025 v2.23.7 MC 1.21.6, 1.21.5, 1.21.4, 1.21.3, 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.21.6. · Add happy ghast to the by default enabled mob types. · It supports a baby variant and a colored harness can be equipped to its body slot. · It does not seem to look at players currently when turned to its baby variant or back. · Update the fallback implementation. · Config: Avoid inserting default settings if the loaded config data is completely empty. · The config data can also be empty if the config file failed to load. Inserting the default settings in this case would overwrite the user's current config. · To reset the config to its default values, it is now required to fully delete the config file. Only clearing the config file is not longer sufficient. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.23.6Version 2.23.6May 24, 2025 v2.23.6 MC 1.21.5, 1.21.4, 1.21.3, 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Data: Change the serialization of item stacks from Bukkit's built-in serialization to a custom serialization that saves item components as SNBT. Be sure to backup your current save.yml file before updating to this version! · This has the following expected benefits: · Better debugging of serialized item data: The data is serialized in a format that Minecraft users are familiar with and can find information about in the official Minecraft wiki. · Better compatibility across Minecraft server versions: We pass the deserialized data through Minecraft's own data migration system, which should hopefully reduce the need for manual data migrations after server upgrades. · Better compatibility across server variants: Spigot and Paper servers have diverged in how they serialize item stacks. Paper already saves item stacks in a format similar to the one used by the Shopkeepers plugin now. But by not relying on the specific server's built-in serialization, saved item data is expected to more easily be transferable across server variants. · The shopkeeper storage version is bumped to 4 to automatically write all item data in the new format. · The new serialization relies on server version specific code. A reflection-based implementation for Spigot mappings is provided for the "fallback mode" when running on a non-supported server version, but this is prone to break during server updates. · Since all item data is migrated via Minecraft's data migration now, before the item stack is constructed, our previous item data migration logic can eventually be removed, together with the item-migrations debug option, once all servers are expected to have updated to the new serialization format. · Fix #959: The changes to the shopkeeper trade event in v2.19.0 introduced a bug that caused shift trading to continue trading even if the the active trade switches to a different result item. Additionally, we now also abort the trading if the cost items of the active trading recipe have changed, so that players don't accidentally continue trading the same result item but for different costs. · Localization: Use the default message when the specified language file is missing an entry. · Debug: Log the full exception stack trace when we fail to load the data of a shopkeeper. · Debug: The fallback mode can now be tested by adding a file with name .force-fallback to the plugin folder. · Internal: Various refactors related to UIs. · API: Revert nonpe version back to 1.3.5 for now until 1.3.6 has been released to Maven central. This resolves an issue with API clients being required to also add the nonpe snapshot repository to their projects. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.23.5Version 2.23.5Apr 23, 2025 v2.23.5 MC 1.21.5, 1.21.4, 1.21.3, 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · If available, use the item's custom display name in trade notification messages. · Performance: Further optimize the handling of the BlockPhysicsEvent for sign shopkeepers: Instead of checking during each block physics event whether the event shall be cancelled because the block or one of its neighbors would be affected by the event (7 checks), we pre-calculate the set of affected block locations and then only perform a single map lookup during the event (1 check). · Performance: Optimize shulker peek AI: Only update the peek state if actually necessary to avoid redundant game events and other side effects. · Performance: Remove the PlayerMap "optimization" again: It does not provide a clear benefit, but adds additional complexity and potential for bugs and memory leaks. · Fix: It was still possible to spawn or move shopkeepers into protected GriefPrevention regions. When using the check-spawn-location-interaction-result, we now temporarily spawn a dummy chest block at the checked location to ensure that region protection plugins like GriefPrevention actually react to our dummy interaction test event. · Fix: Mark shopkeepers as dirty when a property value is found missing and the default value is being used. · As before, we log a warning and then fall back to the default value for missing property values. This is for example often the case when new properties are added. · However, previously, we would not mark the shopkeeper as dirty in this case since the default value also equals the initial property value. One consequence of this was that the warning about missing property values would be repeated over and over during subsequent plugin reloads. · Fix: Add a Paper-specific 1.21.5 module to resolve issues related to trade notifications and pig, cow and chicken variants. · Paper: Omit redundant 'id' and 'count' properties when logging the metadata of items involved in trades. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.23.4Version 2.23.4Apr 8, 2025 v2.23.4 MC 1.21.5, 1.21.4, 1.21.3, 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.21.5. · Add support for cow, chicken and pig variants. · Item hover events in trade notifications do not support component data currently. · Add saddle editor option for zombie horse, skeleton horse, mule, donkey, camel and strider. · Command: The "/shopkeeper transfer" command also allows transferring shops to offline players now. · The player can be specified by unique id and name. The command checks for matching players among the currently online players, among the current shop owners, and among offline player. But we only check for a matching offline player if we didn't find any matching player among the online players and shop owners. · Command completion and ambiguous name handling is not supported for offline players. · The lookup by name may involve a blocking roundtrip to the Mojang servers. · Config: Add "slime-max-size" (default: 5) and magma-cube-max-size (default: 5). The maximum supported size is 10. · Data: If you have existing slime or magma cube shopkeepers with larger sizes, they are automatically shrunk when they are loaded. To prevent this, manually add these new settings to your config file with the intended values before you update the plugin. · Config: Add "enable-glowing-sign-text" (default: true). · Data: Add shopkeeper data migration to remove invalid player head profile names. See GH #907. · Since MC 1.20.5, player head profile names must be valid player names, i.e. have a maximum length of 16 and only contain allowed characters (spaces are not allowed). · Minecraft itself cleared invalid profiles names during its own item data migration. However, this migration was not automatically applied to the item data of shopkeepers. On Spigot, the invalid item data is loaded but can result in crashes later on. On Paper, the invalid item data is already rejected during the loading of the shopkeeper data. · Profiles always require a non-empty name or a unique id. If our migration clears a profile name and the profile has no unique id, we add a fixed dummy unique id (5458ec26-8221-366d-8836-be7a07a5e29b). · If the save data has changed as result of the migration, we create a backup of the previous save file. If you are not happy with the result of the migration, you can use this backup to apply your own migration. · Debug: If the debug mode is enabled, we also write the migrated save file to disk. This can help diagnose issues if the migrated save file subsequently fails to load. · After the migrated shopkeeper data has been successfully loaded, we forcefully save all shopkeepers to disk to persist the migration result. · Data: Remove old shopkeeper data migration from the save file in the plugin folder. · Fix: We were not correctly tracking players teleporting between worlds. This resulted in a memory leak, and in issues when trying to find nearby players (e.g. used by shulker shopkeepers to decide whether to peek). Additionally, we now log a warning whenever we unexpectedly fail to cleanup the data for a player. This should help us identify any remaining memory leaks in this area, if any. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.23.3Version 2.23.3Dec 9, 2024 v2.23.3 MC 1.21.4, 1.21.3, 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.21.4. · Add pale oak sign and hanging sign shops. · Add creaking to the by default enabled mob types. · Commands: Add command "/shopkeeper teleport [player] <shop> ['force']" that teleports a player near the specified shopkeeper. · Permissions: "shopkeeper.teleport" (default: op) and "shopkeeper.teleport.others" (default: op). · The command tries to find a safe teleport location in a small radius in front of the shopkeeper. The "force" argument can be used to teleport the player even if no safe location is found. · Commands: Improve the handling of ambiguous player names, shopkeeper names, and targeted shopkeepers. · Commands: Evaluate command argument fallbacks from front to back instead of from back to front. This results in better error messages since we usually prefer error messages for earlier arguments over error messages for later arguments. And this fixes an issue with for example the command "/shopkeeper list 123 2" being interpreted differently than "/shopkeeper list X 2": The latter previously resulted in an error rather then checking for shop owners named "X". · Fix: Prevent damage caused by shopkeeper mobs, e.g. when touching puffed pufferfish shopkeepers. · Fix: The remote command ignored shops that cannot be opened because they have no trades currently. We still want to show these shops in command completions. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.23.2Version 2.23.2Nov 25, 2024 v2.23.2 MC 1.21.3, 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Fix: Partially matching items were no longer accepted in trades. · The fix only applies to MC 1.21.1+. The previous behavior cannot be restored for server versions 1.20.5 - 1.21. · The partial matching only applies to item components as a whole now. Any data inside a component (including the "custom data" component used for plugin data) is always fully matched now due to the changes in Minecraft 1.20.5+. · Fix: Config sound effects fail to play on Spigot 1.21.3. Added a config migration from sound enum names to namespaced keys. This also resolves an issue with shift trading not working. · Add "no permission" message feedback when a user tries to edit a shopkeeper which they don't have access to. · Commands: In addition to the command permission itself, various commands require the player to have editing access for the involved shopkeeper now, and hide command completions for shopkeepers that the executing player has no access to. Affected commands: · edit (already required editing access before) · remote/open (already required trading access before) · remove · setForHire · setTradePerm · transfer (already required editing access before) · All snapshot commands. · Config: Add check-spawn-location-interaction-result (default: false). If enabled, players are only able to place shopkeepers in places where no other plugin denies them to interact with blocks. · We check for this by calling a dummy block interaction event for other plugins to react to. · If the spawn location is currently empty (i.e. of type air), we temporarily place a dummy block to get better interaction results from other plugins. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.23.1Version 2.23.1Nov 4, 2024 v2.23.1 MC 1.21.3, 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.21.3. · MC 1.21.2 was immediately replaced and is not supported. · Squids and dolphins support a baby variant now. · Salmons support size variants now. · Experimental features (creaking and pale oak sign shops) are not yet supported. · Fix: Error "IncompatibleClassChangeError: Found interface org.bukkit.craftbukkit.inventory.CraftMerchant, but class was expected" when a player shop becomes out of stock. This version is built against the latest version of Spigot 1.21.1 and might not be compatible with Spigot 1.21.1 builds from before 2024-09-07. · Add SQLite based trade log storage. (Thanks @akshualy) · In the future, this can be used for additional features, such as offline trade notifications. · Config: Add new settingtrade-log-storage. Available values:DISABLED(default),SQLITE(recommended),CSV. · Config: Add migration from the oldlog-trades-to-csvto the newtrade-log-storagesetting. · Only one storage type can be selected: Logging trades to both CSV and the SQLite is not supported. · Config: Removefile-encodingsetting: We use Bukkit to load the save data, which always expects the data to be UTF-8 encoded. · Fix: Remove shopkeepers from the spawn queue again when their chunk is unloaded. This can for example occasionally be observed during server startup on MC 1.21.1. · Fix: Player shops got deleted when their container is hit by a wind charge andprotect-containersis disabled anddelete-shopkeeper-on-break-containeris enabled: We need to ignore explosions if they don't actually delete the affected blocks. · Fix: Allay shopkeepers were able to pick up items matching the item in their hand. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.23.0Version 2.23.0Aug 12, 2024 v2.23.0 MC 1.21.1, 1.21, 1.20.6 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.21.1. · Drop support for MC versions below 1.20.6 to update the plugin to use Java 21 and build against a more modern API version. If you want to run this plugin on an older server version, you need to use an older plugin version. · Item display name and lore data from the language file can be specified as Json text now. Other text does not yet support the Json format. · Fix: Color codes in text (e.g. from the language file) did not reset formatting. · Fix: Item data containing attribute modifiers was not correctly saved to the plugin config and failed to load. · Extend the item stack we use for server assumption tests to include newer item data. · Update the compatibility mode. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.22.3Version 2.22.3Jul 28, 2024 v2.22.3 MC 1.21, 1.20.6, 1.20.4, 1.20.2, 1.20.1, 1.19.4, 1.18.2, 1.17.1, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Fix: Compatibility with the latest versions of Spigot 1.21 (Thanks @DerMistkaefer). · Spigot 1.21 builds from before 2024-07-07 are not supported. · Spigot'senum-compatibility-modeis not supported, but also not required for this plugin. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.22.2Version 2.22.2Jul 22, 2024 v2.22.2 MC (1.21,) 1.20.6, 1.20.4, 1.20.2, 1.20.1, 1.19.4, 1.18.2, 1.17.1, 1.16.5 Update: Some change in Spigot 1.21 broke this version of the Shopkeepers plugin. This version only works on Spigot versions from before 2024-07-06. I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Add: Equipment editor for shopkeeper mobs and normal villagers. · The equipment editor can be opened from the shopkeeper editor, as well as from the editor for normal villagers. There is no equipment editor for Citizens NPC shopkeepers yet. · Players can also use placeholder items to setup the equipment items. · As before, to reduce the amount of entity combust events that we need to handle, we automatically apply a small (invisible) default head item for mobs that usually burn in sunlight. If a custom head item is configured inside the editor, the item from the editor is used instead. If the configured item is destructible, it is automatically made unbreakable to not break when exposed to the sunlight. · By default, the equipment can only be edited for mobs and slots that are known, at least for certain items, to visually affect the mob. · If the mob is not affected by any equipment, the editor option is omitted. · If a mob already provides dedicated editor buttons for certain equipment slots (e.g. horse armor, llama carpet), we omit these slots from the equipment editor. · Vindicators currently don't support the mainhand slot, because they only render the item when chasing a target, which is not the case for shopkeeper mobs. · Config: Add setting enable-all-equipment-editor-slots (default: false) that enables the equipment editor for all mobs and all equipment slots, regardless of which equipment slots the mob actually supports. · This can for example be useful for testing purposes. · If the mob provides dedicated editor options for certain equipment slots, any non-empty equipment configured in the equipment editor takes precedence. · Command: The /shopkeeper replaceAllWithVanillaVillagers command ignores the custom equipment for now, because vanilla villagers can end up dropping the equipped items, e.g. on death, which might not be intended. · Debug: Extend the /shopkeeper debugCreateShops command to accept an argument testEquipment: When specified, we spawn a shopkeeper for each enabled mob type and apply a default equipment. This can be useful to quickly test which equipment slots the individual mobs support. · Add: Configure the carried block of endermans by assigning an item to their mainhand in the equipment editor. · Only items with a corresponding block type result in a block to be carried by the enderman. · Players can also use placeholder items to specify the block type. This also allows players to use block types for which there doesn't exist a corresponding item (e.g. potted flowers). · Any block state data contained by the item (BlockStateTag / block_state component) is applied to the carried block. If the item is a placeholder item, any contained block state data is applied to the substituted block type. · Note: Some blocks do not properly render (e.g. player heads, signs, etc.). · Debug: The command /shopkeeper debugCreateShops spawns the shopkeepers now in the direction the player is facing. · Minor changes related to the trading shop editor. Players can now click a non-empty slot in their inventory to swap the item on the cursor. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.22.1Version 2.22.1Jun 30, 2024 v2.22.1 MC (1.21,) 1.20.6, 1.20.4, 1.20.2, 1.20.1, 1.19.4, 1.18.2, 1.17.1, 1.16.5 Update: Some change in Spigot 1.21 broke this version of the Shopkeepers plugin. This version only works on Spigot versions from before 2024-07-06. I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Fix: Since Spigot 1.20.5, snowman and mushroom cow shopkeepers failed to load because these mobs have been renamed to their Minecraft names ('SNOW_GOLEM' and 'MOOSHROOM'). · When running on MC 1.20.5 or above, we automatically migrate these shop object types to their new names so that they load again. · Config: When updating to MC 1.20.5 or above, the old mob names in theenabled-living-shopssetting might still work for now, but it is recommended to update them to their new names. We log a warning now should the old mob names no longer be recognized in the future. · Config: The default config was updated to use the new mob names. When running on an older server version, this results in a warning now, similar to the warnings that are logged for any default enabled mob types that are not supported by the server's Minecraft version. · Adjusted the shop object type aliases so that the/shopkeepercommand recognizes both the old and new mob names. · Fix: In Shopkeepers v2.22.0, after a server upgrade, some shopkeepers failed to load with an errorInvalid trade offer 1: Failed to load property 'resultItem': Data is not of type ItemStack, but com.nisovin.shopkeepers.util.inventory.SKUnmodifiableItemStack!. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.22.0Version 2.22.0Jun 23, 2024 v2.22.0 for MC (1.21,) 1.20.6, 1.20.4, 1.20.2, 1.20.1, 1.19.4, 1.18.2, 1.17.1, 1.16.5 Update: Some change in Spigot 1.21 broke this version of the Shopkeepers plugin. This version only works on Spigot versions from before 2024-07-06. I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Fix: Resolve a compatibility issue with Paper servers for MC 1.21. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.21.0Version 2.21.0Jun 18, 2024 v2.21.0 for MC (1.21,) 1.20.6, 1.20.4, 1.20.2, 1.20.1, 1.19.4, 1.18.2, 1.17.1, 1.16.5 Update: Some change in Spigot 1.21 broke this version of the Shopkeepers plugin. This version only works on Spigot versions from before 2024-07-06. I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.21. Add bogged and breeze to the by default enabled mob types. · Debug: Add additional debug output if one of the item related server assumption tests fails. · For developers: The Maven repository URL has changed (see Github readme). The old URL will still work for now, but consider updating to the new URL as soon as possible. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.20.1Version 2.20.1May 27, 2024 v2.20.1 for MC 1.20.6, 1.20.4, 1.20.2, 1.20.1, 1.19.4, 1.18.2, 1.17.1, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Fix: Avoid adding empty item stacks to merchant recipes. This resolves a crash on Paper 1.20.6 servers. · Fix: The default config version is6. We previously applied a redundant migration from version 5 to 6 that did nothing. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.20.0Version 2.20.0May 26, 2024 v2.20.0 for MC 1.20.6, 1.20.4, 1.20.2, 1.20.1, 1.19.4, 1.18.2, 1.17.1, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.20.6: · MC 1.20.5 was replaced and is not supported. · Add wolf variants. · Placeholder items: Some potion and enchantments have been renamed in Bukkit to now match their Minecraft counterparts. If you used the Bukkit names in placeholder items, they might no longer get recognized and you need to update those items to use the Minecraft names instead. The "empty"/"uncraftable" potion is also no longer supported in placeholder items. · Drop support for MC 1.19, 1.19.2, and 1.19.3 to speed up build times. MC 1.19.4 is still supported and can be updated to without issues. · Add settings to identify the shop creation item by a custom NBT tag. · Previously, we identified shop creation items by matching their item data with the data specified in the shop-creation-item setting. Adding and identifying the shop creation item by a custom NBT tag instead has several benefits, such as being able to change the shop-creation-item in the future without breaking any existing shop creation items in the world (e.g. in chests, player inventories, trades, third-party plugin data, etc.). Also, in the past, we occasionally ran into issues when the server implementation made changes to how it creates the item based on the data specified inside the config. · These new settings are enabled by default for new configurations, but disabled when migrating from a previous Shopkeepers version in order to not break backwards compatibility for existing items. · Setting add-shop-creation-item-tag (default: true): Whether to add the tag to newly created shop creation items, e.g. when created via the /shopkeeper give command. · Setting identify-shop-creation-item-by-tag (default: true): Whether to identify the shop creation item by the tag. · This is a separate setting in order to help server owners with the migration process: Server owners can enable add-shop-creation-item-tag very early to already add the tag to all newly created shop creation items, but separately enable identify-shop-creation-item-by-tag later, once they expect or verified that the old shop creation item is no longer in use. · Unfortunately, the Shopkeepers plugin provides no built-in solution to automatically migrate all occurrences of the old shop creation item in the world or plugin data. · Change the default shop-creation-item display name to use json-based text. · Since somewhere around MC 1.20.4, display names with &-based color codes were no longer converted to a json text representation, but to legacy color codes. This caused some issues with existing shop creation items no longer getting recognized or stacking correctly. On some servers, these legacy color codes are in some circumstances later converted to json-based text, which causes similar issues with these shop-creation items suddenly no longer working after these conversions. · The default display name was changed to the compact '{"text":"Shopkeeper","italic":false,"color":"green"}'. This change is not automatically applied to existing configurations, because it could break existing shop creation items. · If you want to use a json-based display name that matches the previous representation on Spigot servers prior to MC 1.20.4, you can change the display name in the config to display-name: '{"extra":[{"bold":false,"italic":false,"underlined":false,"strikethrough":false,"obfuscated":false,"color":"green","text":"Shopkeeper"}],"text":""}'. · Fix: In v2.19.0, we added a workaround for a change in the Paper server to now force teleports of shopkeeper entities. However, on Spigot servers, we need to manually reset the forced teleport request again after the entity teleport, because we don't receive an EntityTeleportEvent there. · Fix: The angry state of wolves would previously get reset after some time (when the random AngerTime runs out). We now periodically re-apply it. · Debug: Add debug option text-components to log additional debug output whenever component-based text is sent. · Prepare for Paper's future removal of CraftBukkit's package relocation: Adjust the fallback compatibility mode to no longer try to parse the CraftBukkit version from the package name. · Fix: The entity argument for command editVillager no longer accepts non-villagers, shopkeepers, or Citizens NPCs. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.19.0Version 2.19.0Dec 26, 2023 v2.19.0 for MC 1.20.4, 1.20.2, 1.20.1, 1.19.4, 1.19.3, 1.19.2, 1.19, 1.18.2, 1.17.1, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Add support for MC 1.20.4. MC 1.20.3, which is mostly the same, is not officially supported. No new features or mobs. Experimental MC 1.21 mobs are not yet supported. · Add settingcitizen-npc-fluid-pushable(default:false) to make all shopkeeper Citizens NPCs pushable by fluids (true), unpushable by fluids (false), or not modify their current behavior ("undefined"). · When set to"undefined", the Citizens NPCs are not modified but retain their default or previously set fluid pushable behavior. · Unfortunately, the Citizens plugin has no in-game command yet to toggle the fluid pushable state of individual NPCs. But this is likely to be added in the future. · Shulker shopkeepers peek at nearby players now. · This behavior can be disabled with the settingshulker-peek-if-player-nearby(default:true). · The settingshulker-peek-height(default0.3) defines how much the shulker opens when it peeks. · Add: Support for setting up items that execute a command when being traded (either sold or bought). · Add: Command/shopkeeper setTradedCommand <command>(permissionshopkeeper.settradedcommand, defaultop): Sets the command to execute when the held item is traded. · The command to execute is stored inside the item's data under the Bukkit keyshopkeepers:traded_command. · When an item that has a traded command assigned is traded, the item is destroyed and the assigned command is executed as often as there are items in the item stack. · This feature is not meant to replace the requirement for custom third-party plugins or scripts in order to implement complex or custom behaviors. In order to reduce implementation and maintenance effort, only a single command can be assigned to an item and only a very limited set of placeholders is supported:{player_name},{player_uuid},{player_displayname},{shop_uuid}. · Simple command sequences can also be defined via command aliases in Bukkit's "commands.yml" (see https://bukkit.fandom.com/wiki/Commands.yml). · If additional context information is required, e.g. about the shopkeeper's location or shop owner, a custom plugin that listens for theShopkeeperTradeEventmight be better suited to implement the intended behavior. · Add: Utility command "/shopkeeper replaceAllWithVanillaVillagers". · This command deletes all shopkeepers and replaces them with corresponding vanilla villagers without AI that are configured very similar to villager shopkeepers. · This might for example be useful when migrating a world to vanilla Minecraft, e.g. when a server closes a world but wants to provide it as download to its players with all the shopkeepers included. · This command requires all of the following permissions:shopkeeper.debug,shopkeeper.remove-all.player,shopkeeper.remove-all.admin. · Add: "No shops were found" message to the "removeAll" command. · Fix: Moving shopkeepers did not update their location in the AI system, breaking gravity and AI activations when being moved out of their original chunk. · Fix: Verify that the Citizens API is still available before we try to use it. This guards against cases in which the Citizens plugin reports as "enabled", but the Citizens API is not in a properly initialized state. Reloading the Citizens plugin via PlugMan also seems to leave the Citizens API in an unusable state. · Fix: The check whether the cursor can hold the traded item was off by one, unnecessarily preventing trades in some cases. · Fix: Shopkeepers could no longer be moved after a recent change in the Paper server (PR 9937) to now also call the EntityTeleportEvent for plugin invoked teleports: All plugins that previously cancelled or modified entity teleports in certain cases (including the Shopkeepers plugin itself) can now accidentally cancel or modify plugin invoked entity teleports that were not supposed to be cancelled or modified previously. For now, we restore the previous behavior for all of our plugin triggered shopkeeper entity teleports by forcing these teleports, bypassing any cancellation and modification attempts of plugins. · API (breaking): Changes to theShopkeeperTradeEvent. · The result item received by the trading player and the items received by the shopkeeper can now be altered via theShopkeeperTradeEvent(#get/setReceivedItem1/2,#get/setResultItem). · Breaking: Plugins that use this event can no longer assume that the received items equal those of the trading recipe. · It is also possible to clear the received items. This might for example be useful when implementing items that apply alternative effects when traded (e.g. command items, or Vault integration). · Trade logging and trade notifications still log the original items of the trading recipe. · Some shopkeepers ignore changes to the received items in certain cases. For example, when removing items from a shop container or when adding or removing currency items to or from shop containers, the default shopkeepers will ignore any changes to the received items. · Since the received items can now be modified by plugins during the trade event, the event is called earlier now, prior to certain inventory related checks. · Breaking: Plugins can no longer assume that the trade will actually take place even if the trade event remains uncancelled. · Add a non-cancellableShopkeeperTradeCompletedEventthat is called if the trade actually took place, after all trade effects have been applied. · AddShopkeeperTradeEvent#getTradeEffectsthat allows customTradeEffectinstances to be added that are invoked when the trade is either aborted or completed. · This can be useful when implementing custom trade effects that are meant to only be executed once the trade is actually applied. · This might also be used for some of the built-in default trade effects in the future. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.18.0Version 2.18.0Oct 10, 2023 v2.18.0 for MC 1.20.2, 1.20.1, 1.19.4, 1.19.3, 1.19.2, 1.19, 1.18.2, 1.17.1, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Add compatibility for MC 1.20.2. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.17.2Version 2.17.2Sep 18, 2023 v2.17.2 for MC 1.20.1, 1.19.4, 1.19.3, 1.19.2, 1.19, 1.18.2, 1.17.1, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Fix: Incompatibility with Paper build 185+ (error "item migration failed") related to new ItemStack.isEmpty method Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.17.1Version 2.17.1Jun 29, 2023 v2.17.1 for MC 1.20.1, 1.19.4, 1.19.3, 1.19.2, 1.19, 1.18.2, 1.17.1, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Change the icons of the sign type editor button of hanging sign shop objects from sign to hanging sign items. · Fix: Plugin not loading on server versions without MC 1.20 hanging sign materials: "The default value for property 'signType' is invalid: Unsupported hanging sign type: 'OAK'." · On those server versions, there is no valid default hanging sign type. · Disable the sign type validation on those server versions and adapt all code that previously expected the sign type to always provide valid hanging sign materials. · The hanging sign object type is now always disabled on server versions without MC 1.20 features. · Fix: Error "Invalid sign block face: DOWN" when trying to move a hanging sign shop object to the bottom of a block. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.17.0Version 2.17.0Jun 26, 2023 v2.17.0 for MC 1.20.1, 1.19.4, 1.19.3, 1.19.2, 1.19, 1.18.2, 1.17.1, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Add support for 1.20.1. MC 1.20 is not supported! · Add camel and sniffer to the by default enabled mob types. · Add bamboo and cherry sign types. · Add hanging sign shops: · This is a new shop object type similar to sign shops. · Required permission:shopkeeper.hanging-sign(default:true). · Config option:enable-hanging-sign-shops(default:true). · Limitation: Ceiling hanging signs always use the 'attached' state for now, instead of choosing this state dynamically based on the shape of the block above. · The sign text is now applied to both sides of shop signs, including sign posts, wall signs, hanging signs, and wall hanging signs. · Drop support for MC 1.18.1 and 1.19.1. These versions are only used by a few servers. Removing their support speeds up build times. MC 1.18.2 and 1.19.4 are still supported and can be updated to without issues. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.16.5Version 2.16.5Mar 21, 2023 v2.16.5 for MC 1.19.4, 1.19.3, 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.17.1, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.19.4. · Fix: When usingbypass-spawn-blocking, we now compare spawn locations fuzzily. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.16.4Version 2.16.4Jan 16, 2023 v2.16.4 for MC 1.19.3, 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.17.1, 1.16.5 This update contains a critical fix. It is highly recommended that you update as soon as possible! I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Fix: Immediately end the UI session if the GUI is not successfully opened (e.g. if another plugin cancels the corresponding InventoryOpenEvent). · Fix: Item duplication related to shopkeeper GUIs being opened while another GUI is already open. · Fix: Update for the latest breaking changes in the Citizens API related to metadata strings. This version of Shopkeepers is only compatible with the latest development version of Citizens! · Fix: The villager editor did not correctly translate hex color codes of the form "򇨣Test". API: · Fix: "Shopkeeper#setName" did not correctly translate hex color codes of the form "򇨣Test". The result used the alternative "&" color code instead of Minecraft's "§" code. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.16.3Version 2.16.3Dec 8, 2022 v2.16.3 for MC 1.19.3, 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.17.1, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.19.3. Experimental MC 1.20 features are not yet supported. · Drop support for MC 1.17 and MC 1.18. These versions are only used by a few servers. Removing their support speeds up build times by several minutes. MC 1.17.1, 1.18.2, and 1.18.1 are still supported and can be updated to without issues. · Increase the maximum name length limit from 128 to 256 characters. · This is especially useful for names that contain many hex color codes. · This does not affect the default name length limit defined inside the default config. · Also increase the name length limit of Citizens shopkeepers: The latest Citizens versions support names up to 256 characters long, regardless of the mob type. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.16.2Version 2.16.2Aug 11, 2022 v2.16.2 for MC 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.19.2. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.16.1Version 2.16.1Jul 31, 2022 v2.16.1 for MC 1.19.1, 1.19, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.19.1. · Fix #809: Deleting a Citizens shopkeeper via the shopkeeper editor menu resulted in an error. · We log a warning now if another plugin deletes the shopkeeper while the ShopkeeperRemoveEvent is handled. · Config: Add setting "cancel-citizen-npc-interactions" (default "true"). By default, we will now cancel interactions with Citizen shopkeeper NPCs, similar to how it is already the case for all the other types of shopkeeper objects. Not canceling the interaction with shopkeeper NPCs can result in some unintentional behaviors to take place (e.g. villager NPCs will increment the player's 'talked-to-villager' statistic). However, there may be cases in which server admins don't mind these additional interaction effects and actually want the normal NPC interaction behavior to take place in addition to the shopkeeper specific behavior, for example to still trigger attached NPC commands. These server admins have the option to revert to the previous behavior by disabling this setting. · Improve support for hex colors in translated messages and shopkeeper names. · We support both the Bukkit hex syntax ("&x&a&a&b&b&c&c") and the more compact hex syntax ("&#aabbcc") now. The Bukkit syntax already worked before for shopkeeper names and some texts, but is supported for more messages now. · When a player renames a shopkeeper using the compact hex syntax, the player's input is expanded to the Bukkit syntax due to compatibility reasons (Spigot only supports the expanded hex syntax in certain contexts). Validations like the shopkeeper name length limit are applied to the expanded syntax. · Note: In order for hex colored shopkeeper names to properly work in the trading UI, you need to use the latest Spigot 1.19 version or newer. API changes, internal changes, and changes to the language files: See the complete changelog for details. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.16.0Version 2.16.0Jun 20, 2022 v2.16.0 for MC 1.19, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Update for MC 1.19. · Added the new MC 1.19 mobs to the by default enabled mobs. If you are updating, you will have to manually enable these mobs inside your config. · Added an editor option to switch between different frog variants. · Added editor options to toggle the left and right horns of goats. · Added the mangrove sign variant. · Fixed: When a currency item is changed via the "/shopkeeper setCurrency" command, we close all currently open player shopkeeper UIs now so that the change is immediately in effect. · We no longer forcefully spawn Citizens shopkeeper NPCs when we reload their NPC data (e.g. when we apply a shopkeeper snapshot). Instead, the NPC is spawned based on its stored spawn state and location. · Shulkers are now oriented according to the block face they are placed against. However, when the block they are attached to is broken, or they are attached to a non-full block face, or a block in the opposite direction would prevent them from opening, they can dynamically attach to another adjacent block. · Shulkers are no longer affected by gravity. However, if they are oriented to stand on top of a block, we still adjust their spawn location downwards by up to 1 block, as we do for any other mob even if gravity is disabled. · Added a new editor option to move shopkeepers. · Config: Addedmove-item(default:ENDER_PEARL). · Config: Moving of player shops can be disabled via the newenable-moving-of-player-shopssetting (default:true). · Some default messages related to the validation of spawn locations were slightly changed to better fit when we move shopkeepers. · When right clicking a new shopkeeper location, we ignore interactions with certain types of blocks that are relevant for navigation, such as doors, trap doors, fence doors, buttons, levers, etc. Other types of interactable blocks (work benches, chests, signs, etc.) are not ignored, because we want shopkeepers to be placeable against those (even if some plugins may use them for navigation purposes, e.g. command signs). · It is also possible to move sign shopkeepers between their sign post and wall sign variant, or to change the orientation of shulker shopkeepers. However, it is not yet possible to change the sign or shulker orientation 'in place', i.e. without first moving the shopkeeper to another location. · Limitation: Moving Citizens shopkeepers silently fails if the Citizens plugin is not enabled currently. · Data: Removed various old data migrations: · Removed the importing from the old book offer data format (changed in late MC 1.14.4). · Removed the importing of pre MC 1.14 cat typed ocelot shopkeepers. · Removed the importing of pre MC 1.14 villager profession data. · Removed the 'unknown' owner name validation (no longer used since late 1.14.4). This conflicted with any player actually named 'unknown'. · Fixed: Striders no longer randomly spawn with a saddle. · The shopkeeper and villager editors try to restore the previously open page now when the deletion confirmation is cancelled. · Config: We no longer log a warning about invalid living entity types when we internally initialize the default config settings and are running on an older but supported MC version. API changes, internal changes, and changes to the language files: See the complete changelog for details. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.15.1Version 2.15.1Apr 10, 2022 v2.15.1 for MC 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Fixed: The refactors in version 2.15.0 broke the deletion of shopkeepers of inactive players. v2.15.0 for MC 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5 · Added support for MC 1.18.2. Make sure that you are using the very latest build of Spigot 1.18.2, because initial builds of 1.18.2 had some chunk loading related issue that might affect the activation (spawning, ticking, etc.) of shopkeepers. · Dropped support for all Bukkit versions below 1.16.5 (1.14.4, 1.15.2, 1.16.1-1.16.4). · Bumped the Towny dependency to version 0.98.1.0 and using the glaremasters repository for it now (Jitpack seems to be having issues with Towny currently). · Config: The translations repository has been renamed and is now located at https://github.com/Shopkeepers/Language-Files. · Config: Added config option 'placeholder-item' that allows changing the placeholder item (Thanks to oltdaniel, PR #762). It is also possible to disable placeholder items now by setting the item to AIR. · Config: Changed the default placeholder item type from 'NAME_TAG', which is difficult to obtain in vanilla Minecraft, to 'PAPER'. · Config: Similar to Mohist servers, we also automatically enable the 'disable-inventory-verification' setting now when we detect that we run on a Magma server. · Added an editor option to toggle the saddle of horse shopkeepers on and off. · Data: The shopkeeper data version has changed from '1' to '2'. · Reduced the range at which shopkeeper mobs look at players from 12 to 6 blocks. · Command: The "/shopkeeper [shop-type] [object-type]" command no longer suggests completions for disabled shop and object types, or shop and object types for which the executing player does not have the usage permission. · Improvements related to the deletion of shopkeepers that are owned by inactive players: · We now log how many days ago the players were last seen when we delete their shops. · Fixed: If the plugin is reloaded, and the still pending asynchronous task that checks for inactive players is somehow taking longer than 10 seconds to complete, and the 'player-shopkeeper-inactive-days' setting is changed to '0' (i.e. disabled) during the reload, there was a chance for shop owners to be incorrectly considered 'inactive' and their shopkeepers deleted. · Related to that, this asynchronous task also aborts itself now when it detects that it has been cancelled, which happens when the plugin is disabled. · Fixed: When we delete the shops of an inactive player, we now ignore any shops that have already been removed for other reasons in the meantime. · We log a warning now whenever a shopkeeper mob has been removed due to the world's difficulty being set to peaceful. This warning is only logged once per affected shopkeeper and then skipped until the difficulty has changed. · It is no longer possible to create mob shopkeepers when they would not be able to spawn due to the difficulty being set to peaceful. · Improved the feedback messages that are sent when a shopkeeper cannot be created at a specific location: The previously used generic 'shop-create-fail' message was replaced with dedicated messages for the different reasons for why the shopkeeper cannot be created. · Config: Added setting 'invert-shop-type-and-object-type-selection' (default: 'false'), which allows to invert how the shop type and the shop object type are selected with the shop creation item. This might for example be useful for servers that disable all shop types but one. · Config: Added setting 'ignore-failed-server-assumption-tests' (default: 'false'), which allows to enable the plugin anyway, even when a server incompatibility has been detected during the initial server assumption tests. · Fixed: Citizens shopkeepers are able to move, teleport, and change their location while the Shopkeepers plugin is not running, or while the shopkeeper's chunk is not active currently. Previously, we only updated the shopkeeper's location during shopkeeper ticking, i.e. when the shopkeeper's chunk has been activated. However, if the NPC was moved to a different chunk (or even world), and the shopkeeper's previous chunk has never been activated since then, the spawned NPC might no longer have been recognized as a shopkeeper. One noticeable effect of this was that the NPC could no longer be interacted with. This has been fixed by also updating the shopkeeper's location in various other circumstances now. · Fixed: A related but more minor issue has been that Citizens NPCs can already be spawned while their chunk is still pending to be activated by the Shopkeepers plugin. During this short time period (roughly one second after chunk loads), the Citizens NPCs were not yet recognized as shopkeepers. This has been fixed by separating the registration of ticking (i.e. active) shopkeepers from the registration of spawned shop objects: Citizens shopkeepers now register their NPC entity already before the chunk is activated. · Fixed: We no longer attempt to save the data of Citizens shopkeeper NPCs when the corresponding NPC has not yet been created (i.e. when no NPC has been attached to the shopkeeper yet). · Fixed: Updating a shopkeeper's location also updates the shopkeeper's activation state now. Previously, it was possible for a shopkeeper's new chunk to not get activated until the chunk is reloaded. · Command: Added command "/shopkeeper setCurrency ['low'|'high']", which allows you to change the currency item(s) from in-game. · Permission: Added permission 'shopkeeper.setcurrency' (default: 'op') which provides access to the new set-currency command. · Fixed: When setting the zero currency item to AIR, the selling and book shopkeepers were not able to derive the price of a trade from the editor when only the high currency price is specified. · Added placeholder items for empty trade slots inside the editors of player shops. · Config: Added various settings to specify the editor placeholder items for empty slots of partially set up trades (default: barriers, as it has been the case before), as well as for completely empty trade columns (default: gray stained glass panes). · When you disable the high currency inside the config (by setting it to AIR), you will now need to manually adjust the corresponding empty placeholder items for the affected high currency slots (for example by setting them to AIR). This is a compromise that allows these slots to be set to arbitrary items, even if the high currency is disabled. · Added display names and lore to these placeholder items that explain their purpose and usage inside the editor. · Config: The settings for the zero currency items are no longer used (they have been replaced with new settings) and are automatically removed during a config migration. · The "checkItem" command no longer compares the held items with the zero currency / editor placeholder items. · Config: Bumped the config version to 5. · Command: The "give" and "giveCurrency" commands no longer allow item amounts greater than 1024. Previously, these commands silently truncated any amounts greater than 1024. · Command: The "giveCurrency" and "setCurrency" commands refer to the low currency as 'base' currency now. · Command: Different types of command executors (e.g. command blocks and the console) no longer share their pending confirmation state. · Command: Confirmations account for proxied command senders now: Since the original caller of the command receives the command's feedback messages, we also require confirmation from the original c2.14.0Version 2.14.0Dec 19, 2021 v2.14.0 for MC 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5, 1.15.2, 1.14.4 I only list the primary changes here. For information on API changes, internal changes, and changes to the language files, you can find the complete changelog on Github: https://github.com/Shopkeepers/Shopkeepers/blob/master/CH… · Updated for MC 1.18 and MC 1.18.1. · Updated the 'compatibility mode' implementation, which broke with the Miecraft 1.18 update. However, due to some server internal mapping changes, it is likely that this compatibility mode will break again in future updates. · Added the option for admins to create and restore snapshots of shopkeepers. · Each snapshot captures the shopkeeper's dynamic state (i.e. its trades, shop object configuration, etc.), a timestamp, and is associated with a unique name that is provided when the snapshot is created. · The name can currently be at most 64 characters long and not contain any color codes. · This feature is currently meant to only be used by admins and third-party plugins. Shop owners are not yet able to create and restore snapshots of their own shops. · The shopkeeper data of snapshots is automatically migrated during plugin startup, just like the shopkeeper's normal data. · Shopkeeper snapshots are currently expected to be used sparsely. In order to guard against the unnoticed creation of excessive amounts of snapshots, we log a warning whenever a shopkeeper has more than 10 snapshots. · When formatting the timestamp of a snapshot for display, we currently use the server's default time zone. There is no option in Shopkeepers yet to use a different timezone. If you want to use a different timezone for formatting the timestamps, you can change your server's default timezone via the JVM command line argument '-Duser.timezone=America/New_York' when you start your server. · Command: Added commands '/shopkeeper snapshot [list|create|remove|restore]' to manage shopkeeper snapshots. · Permission: Added permission 'shopkeeper.snapshot' (default: 'op') that provides access to the new snapshot commands. · Experimental: It is also possible to capture and restore the NPC state of Citizens NPC shopkeepers. · Config: Added setting 'snapshots-save-citizen-npc-data' (default: 'true') that controls whether shopkeeper snapshots capture and restore Citizens NPC data. · When this setting is disabled, the Shopkeepers plugin automatically deletes all previously saved NPC data again. · Capturing the data of a Citizens NPC will not work if the NPC is not available at the time the snapshot is created (e.g. if the Citizens plugin is not running currently). · If the Citizens NPC is not available when a snapshot is restored, the shopkeeper remembers the NPC data until the NPC becomes available again and the stored NPC state can be applied. If another snapshot is restored in the meantime that does not store any NPC data, we retain the previously restored but not yet applied NPC state. · Added editor options to change the puff state of puffer fish, as well as the pattern and colors of tropical fish. · Added sound effects when a trade succeeds or fails. · Config: These sound effects can be changed or disabled (by setting their volume to zero) via the new config settings 'trade-succeeded-sound' and 'trade-failed-sound'. · Added settings to simulate the trading sounds of vanilla villagers and wandering traders. · Config: Added setting 'simulate-villager-trading-sounds' (default: 'true'). · Config: Added setting 'simulate-villager-ambient-sounds' (default: 'false'). · Config: Added setting 'simulate-wandering-trader-trading-sounds' (default: 'true'). · Config: Added setting 'simulate-wandering-trader-ambient-sounds' (default: 'false'). · Config: Added setting 'simulate-villager-trading-sounds-only-for-the-trading-player' (default: 'true'). · By default, we now simulate the trading sounds of villagers and wandering traders for the trading player. These sounds are only played if the trading player is in the vicinity of the shopkeeper. Trading remotely will not play these sounds. · Debug: Debug output for these simulated villager sounds can be enabled via the existing debug option 'regular-tick-activities'. · Shopkeepers store the yaw angle now with which they are initially spawned. · When placing a shopkeeper on top of a block, the yaw angle is chosen so that the shopkeeper faces towards the player who is creating the shopkeeper. When placing a shopkeeper against the side of a block, the shopkeeper is rotated according to the direction of the targeted block side. · Existing shopkeepers will have a yaw of 0, i.e. they face south just like before. In the future, it will be possible to reposition shopkeepers and thereby also adjust the yaw of already existing shopkeepers. But this is not yet available. · Data: Sign shopkeepers no longer store their sign facing. Instead, this facing is now derived from the shopkeeper's yaw. Existing sign shops will automatically migrate their currently stored sign facing to the shopkeeper's yaw. · Shopkeeper mobs will rotate back to their initial direction now when there is no player to look at. However, this requires a player to still be somewhat nearby, since we only tick shopkeeper mobs when players are nearby. · Config: Added setting 'set-citizen-npc-owner-of-player-shops' (default: 'false'). · When enabled, we set the Citizens NPC owner of player-owned NPC shopkeepers. When disabled, we automatically remove any previously set Citizens NPC owners from those player-owned NPC 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. · Fixed: Wandering traders and trader llama shopkeepers despawned roughly every 40 minutes due to Minecraft's despawning timer still being active for these mobs, even when their AI is disabled. However, this issue has been rather minor, because the affected shopkeepers automatically respawned a few seconds afterwards. This issue has now been fixed by setting the 'DespawnDelay' of wandering traders to '0' and marking trader llamas as 'tamed', which disables Minecraft's despawning timer for these mobs. · Fixed: We were not able to detect item stack deserialization issues, because Bukkit only logs an error in this case instead of throwing an exception. This also resulted in the loss of shopkeeper data when someone tried to revert from one server version to an older one, because the loading of item stacks that were saved on a newer server version is not supported by Bukkit. We are now able to detect these deserialization issues and then shut down the plugin before any data is lost. · Fixed: Shopkeepers could lose some of their trades during item migrations. When an item was migrated, but the subsequent trades did not require any item migrations, these subsequent trades were lost. However, it was relatively unlikely to encounter this issue in practice. An exception to this is in combination with the following Paper-specific issue that only affects trades with certain enchanted book items. · Fixed: On Paper servers, the comparisons of enchanted book items with multiple stored enchantments were not working as expected. The issue was caused by the server reordering the stored enchantments in some cases, as well as Paper automatically converting any deserialized Bukkit item stacks to CraftItemStacks, which behave differently when being compared to other CraftItemStacks. One known effect of this was that the above issue of trades potentially being lost due to item migrations would be encountered more likely on Paper servers, because the reordering o2.13.3Version 2.13.3Jul 11, 2021 v2.13.3 for MC 1.17.1, 1.17, 1.16.5, 1.15.2, 1.14.4 Be sure to read the changelog of v2.13.0 first: https://www.spigotmc.org/resources/shopkeepers.80756/upda… · Fixed: The 'style' property of horse shopkeepers was not getting saved anymore since v2.13.0 and caused migration warnings whenever the plugin attempted to load or save it. If you already upgraded, and don't have a backup of your save.yml file available, or don't want to revert to the backup's state, you may have to freshly edit the 'style' of your horse shopkeepers again. · Fixed: There is an open Spigot 1.17 issue that sometimes causes the plugin to assume that it failed to spawn shopkeepers during chunk loads. In v2.13.1, we already turned a warning message related to this into a debug message in order to not spam the server log with warnings. But another message was missed and has now been turned into a debug message as well. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.13.2Version 2.13.2Jul 8, 2021 v2.13.2 for MC 1.17.1, 1.17, 1.16.5, 1.15.2, 1.14.4 Be sure to read the changelog of v2.13.0 first: https://www.spigotmc.org/resources/shopkeepers.80756/upda… · Updated for MC 1.17.1 · Building: Bumped the CraftBukkit dependencies for the 1_16_R2 and 1_16_R3 versions of Shopkeepers from 1.16.2-R0.1 and 1.16.4-R0.1 to 1.16.3-R0.1 and 1.16.5-R0.1 respectively. This has no effect on the server versions the plugin works on, but simplifies testing. · Internal: We now use the server's mappings version to check if the plugin is compatible. · Previously, we used CraftBukkit's 'Minecraft Version' to determine compatibility (eg. '1_16_R3' for 1.16.5). However, Spigot will occasionally update its mappings without bumping the CraftBukkit version or this 'Minecraft Version'. With the new remapping of NMS code since 1.17, these mappings changes will forcefully break our compiled NMS code and then require an update (or at least a rebuild) of the Shopkeepers plugin. · Previously, these mappings changes would result in errors during plugin startup, instead of being detected as an incompatible server version. We now keep track of all supported mappings versions and use the server's mappings version to determine whether we can support it and which NMS module we need to load. · For some of the 1.16 versions of the plugin, multiple mappings versions are mapped to the same NMS module. However, this should not be a problem, because these modules do not make use of the new remapping build feature, and are therefore less likely to actually break on mappings changes (there are no known server incompatibility issues for these versions). · Another effect of the mappings versions being changed without there necessarily being a CraftBukkit version bump: Since our NMS modules build against specific CraftBukkit versions instead of mappings versions, we can only support the latest mappings version for every CraftBukkit version. · Building: Added test cases to ensure that our NMS modules build against CraftBukkit versions with the expected mappings versions. · Also, our NMS module versions no longer have to match CraftBukkit's 'Minecraft Version'. In order to be able to support different mappings versions even if Spigot does not bump its 'Minecraft Version' (as it was the case in the 1.17 to 1.17.1 update), we will now derive a new NMS module version by incrementing the revision number ourselves. · Fixed: The compatibility mode when running on an unsupported server version was no longer working. · If the compatibility mode fails to enable, we now log an error that should provide additional information about the issue. · Fixed: When the compatibility mode failed to enable, we would encounter an error during plugin disable due to the TradeLoggers component not having been enabled yet. · Bumped Citizens dependency to v2.0.28. · Config: Added setting 'save-citizen-npcs-instantly' (disabled by default), which triggers a save of all Citizens NPC data whenever the Shopkeepers plugin modifies a Citizens NPC. Saving the Citizens NPCs is quite a heavy operation. Since the Citizens API does not yet provide an API to trigger an asynchronous save, we trigger the asynchronous save by invoking the "/citizens save -a" command in the console. As a side effect, this will print command feedback in the console whenever the NPCs are saved this way. · Fixed: Since v2.13.0, when not using the 'always-show-nameplates' setting (i.e. the default case), the nameplates of Citizens player NPC shopkeepers were limited to a length of 16 and would otherwise not be displayed. The issue is that the Citizens 'hover' nameplate option does not work well for player NPCs. If you are upgrading and have issues with nameplates of previously created NPCs not showing, either use the shopkeeper editor to rename the NPC, or use the "/npc name" command to toggle the nameplate visibility. · We no longer open the trading interface if the shopkeeper has no offers. If the player can edit the shopkeeper, we print instructions on how to open the editor. This may also resolve an incompatibility with Bedrock players when using GeyserMC. · Fixed: Writing files (such as when saving the shopkeepers data) failed on some servers due to the SecurityManager implementation blindly denying the execute permission without differentiating between files and directories. We check the execute (i.e. access) permission for directories in which we want to write files in order to provide more meaningful error messages in cases in which missing directory permissions prevent us from writing files. However, this intervention of the SecurityManager should have no effect on whether or not we can actually write to a directory, so we can safely ignore it. · API: Added Shopkeeper#hasTradingRecipes(Player). · API: The type parameters of TypeRegistry#registerAll and #getRegisteredTypes were changed to be less specific. · Debug: When we print ItemStacks in YAML representation to the server console, we omit the trailing newline now. However, the "/shopkeeper yaml" command still sends additional empty lines in chat to make the output more readable. · Debug: Added debug option 'empty-trades' that logs item information for the selected trading recipe and the input items whenever a player clicks an empty trading result slot. · Internal: We avoid copying item stacks in a few more cases. · Internal: Renamed MerchantUtils#getSelectedTradingRecipe() to #getActiveTradingRecipe() and adjusted a few related debug messages. · Internal: Various refactors related to the default UIs, time unit conversions, and utilities in general. Added messages: · cannot-trade-no-offers · no-offers-open-editor-description Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.13.1Version 2.13.1Jun 27, 2021 v2.13.1 for MC 1.17, 1.16.5, 1.15.2, 1.14.4 Be sure to read the changelog of v2.13.0 first: https://www.spigotmc.org/resources/shopkeepers.80756/upda… Changes in this revision: · Fixed: Added a temporary workaround for an open server issue that caused shopkeeper entities to duplicate on MC 1.17. The warning that was printed about the spawning of shopkeeper entities apparently failing has been turned into a debug message for now. Shopkeeper entities may sometimes take a few second to spawn currently. · Config: We automatically enable the 'disable-inventory-verification' setting now when we detect that we run on a Mohist server. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.13.0Version 2.13.0Jun 22, 2021 v2.13.0 for MC 1.17, 1.16.5, 1.15.2, 1.14.4 This update is rather large. I therefore only summarize the most important changes here. You can find the complete changelog in the Github repository. This update has not yet been tested much on MC 1.17, which itself is probably not yet stable. Also, some of the other changes of this update bear the risk to introduce new bugs. This is why this version is initially considered to be in 'alpha' state. I will promote this version to 'release' state as soon as more time has gone by and no major issues have been identified. If you are upgrading to this version, be sure to create a backup of your server and shopkeepers data! Update for MC 1.17: · Added axolotls, glow squids, and goats to the by default enabled mob types. If you are upgrading, you will have to manually enable these new mob types. · Added new editor features that are only available when using MC 1.17: · Changing the axolotl variant. · Toggling between a glowing and a dark glow squid. · Toggling between a normal and a screaming goat. This editor option is only available if 'silence-living-shop-entities' is disabled. · Toggle glowing text for sign shops. · Known issues related to MC 1.17: · Squids and glow squids can be pushed around. This issue might already have existed for some time. See https://bugs.mojang.com/browse/MC-89883 · The loading of entities is deferred from chunk loading in Minecraft now. I am not yet sure if this severely impacts the Shopkeepers plugin, but it certainly partially breaks the 'block-villager-spawns' and 'block-wandering-trader-spawns' settings currently. It is not yet clear how Spigot will update to account for this in order to retain backwards compatibility for plugins. Migration notes: · The folder structure has changed: · The save file is stored inside a new 'data' folder now. If no save file exists at the new location and a previous save file is found at the old location, it is automatically moved. · Language files are located inside a new 'lang' folder now. Existing custom language files need to be manually moved! · Trading logs (if enabled) are stored inside the folder 'trade-logs' now. Existing logs are not automatically moved to the new location! · Removed the 1.16 'PIG_ZOMBIE' migration. We no longer automatically remove this mob type from the config, but only log a warning and then ignore it. · Removed the migration from Citizens shopkeeper NPC ids to NPC unique ids (originally added in v2.4.0). · The setting 'enable-spawn-verifier' is no longer used and is automatically removed from existing configs during the update. · The data format of the CSV trade logs has changed. If you automatically process these CSV trade logs, you may have to update your programs to account for the new format. · The permissions for the shopkeeper remove (all) command have been renamed. You may have to update your permissions setup. · 'shopkeeper.remove.own' -> 'shopkeeper.remove-all.own' · 'shopkeeper.remove.others' -> 'shopkeeper.remove-all.others' · 'shopkeeper.remove.all' -> 'shopkeeper.remove-all.player' · 'shopkeeper.remove.admin' -> 'shopkeeper.remove-all.admin' Language file changes: · The default messages are no longer stored inside the config. Instead, we always generate an 'en-default' language file. This file acts as a template for custom language files. It is not meant to be modified and is replaced with an up-to-date version on every plugin startup. Message keys no longer start with the 'msg' prefix. · Config: Changed the default language from 'en' to 'en-default'. Existing configurations are automatically migrated. · Some texts that were previously settings in the config are now regular messages, such as the inventory titles, nameplate prefix, and sign shop lines. The appearance of sign shops has slightly changed. · Added warnings when the language file is missing messages or contains unexpected messages. · Fixed: Color codes for default messages were not getting replaced. This has an effect when some messages of the specified language file cannot be loaded. · When splitting messages into multiple lines, we take all Unicode line break characters into account now. · Fixed: The default german translation was missing some translations. · Several messages were changed, renamed, removed, or added. See the complete changelog for details. You will have to manually update your custom language files to adapt to these changes. New feature: Placeholder items for player shops. · See: https://github.com/Shopkeepers/Shopkeepers-Wiki/wiki/Plac… · When players set up the trades of their shopkeepers, they can now use renamed nametag items as substitutes for items that they don't have. The nametag's display name has to match the name of the substituted item type. Display names that don't match any english item type name won't work. Other properties of the substituted item cannot be specified. · The parsing is lenient to some extent: The Minecraft namespace prefix ('minecraft:') is optional (some item type names are even too long to be used in anvils if the prefix is included). The upper and lower case of characters is not important. Leading and trailing whitespace is ignored. Spaces and dashes are converted to underscores. Any color codes are also ignored. · Placeholder items are immediately converted to their substituted item inside the shopkeeper editor. If what appears to be a placeholder item is not converted, its display name probably does not match a known item type. It is not possible to setup player shopkeeper trades that buy or sell the placeholder items themselves. But normal nametags, and nametags whose names do not match any valid item type, are treated like normal items and can be traded as usual. · Placeholder items are supported by the selling, buying, and trading player shopkeeper. The admin shopkeeper treats them like normal items. · Placeholder items can not only be used for items that are bought, but also for items that are sold. This allows players to setup trades before they have the items required to fulfill these trades. · It is also possible to specify basic enchanted books via placeholder items: · The used naming format is '<enchantment> <level>'. · The parsing is similar to that of item type names: The normalized display name has to match the id of the intended enchantment. · Aliases have been defined for some of the enchantments, so that for example 'curse of binding' is correctly mapped to the enchantment with id 'binding_curse'. · Only a single enchantment can be specified. · The level can be freely specified, even outside the range of enchantment levels that can usually be obtained in vanilla Minecraft. Levels outside the range of shorts are truncated to the nearest valid short number. If no level is specified, or if the level cannot be parsed, the enchantment's minimum level is used (usually 1). · Up to level ten, the level can also be specified via roman numerals ('I' to 'X'). It is also possible to specify the levels 'min' or 'max', which results in the normal minimum or maximum level of the specified enchantment to be used. · It is also possible to specify basic potions, splash potions, lingering potions, and tipped arrows via placeholder items: · The used naming formats are: · Potion: '[long] [strong] [potion] [of] [long] [strong] <potion type> [2|ii] [potion] [2|ii]' · Splash potion: '[long] [strong] <splash> [potion] [of] [long] [strong] <potion type> [2|ii] <splash> [potion] [2|ii]' · Lingering potion: '[long] [strong] <lingering> [potion] [of] [long] [strong] <potion type> [2|ii] <lingering> [potion] [2|ii]' · Tipped arrow: '[long] [strong] [tipped] [potion] <arrow2.12.0Version 2.12.0Nov 4, 2020 v2.12.0 for MC 1.16.5, 1.16.4, 1.16.3, 1.16.2, 1.16.1, 1.15.2, 1.14.4 · Updated for MC 1.16.4. · Bumped Towny dependency to 0.96.2.0 and using Jitpack repository for it now. · Fixed: Creating shopkeepers via Citizens trait failed previously if the block at the spawn location is not passable (eg. when the Citizens NPC stands on a non-full block such as carpet). · Minor changes to handling failures when trying to create a shopkeeper via Citizens trait. We always inform the player (if there is one), log a warning and delete the trait again now. · Config: Added some more examples for the 'name-regex' setting to the default config. · Fixed: Some messages would print an empty line when set to an empty text, instead of being disabled. · Changed: Players without the permission to edit regular villagers will silently access the regular trading interface now when they sneak and right-click a regular villager. · Fixed: The Towny integration could run into a NPE when checking if a location is within a commercial area. API: · PlayerOpenUIEvent indicates whether the UI request has been silent now. Internal changes: · Moved the installation of Spigot dependencies into a separate script. · Added support for building with Jitpack. This uses a Maven wrapper with a fixed version, because Jitpack uses a buggy Maven version currently (3.6.1). · Updated building instructions in readme. · Internal API: UIHandler#canOpen is public and has an additional 'silent' flag now. · Internal API: UI requests can be silent now. · Editor UIs are setup lazily now, only when required for the first time. Known potential issues: See here. Donations If you like this plugin, consider making a donation. Thanks!2.11.0Version 2.11.0Aug 13, 2020 v2.11.0 for MC 1.16.3, 1.16.2, 1.16.1, 1.15.2, 1.14.4 Update for MC 1.16.2: · Config: Added piglin brute to the by default enabled mob types. If you are updating, you will have to manually add this to your config's 'enabled-living-shops' setting. Other changes: · Added: New command "/shopkeeper givecurrency [player] ['low'|'high'] [amount]". · This command can be used to create and give the currency items which have been specified inside the config. · Added corresponding permission node "shopkeeper.givecurrency" (default: op). · Added: When giving items via command to another player we now also inform the target player that he has received items. These newly added messages are also used now when giving items to yourself. · Added: New command "/shopkeeper convertItems [player] ['all']". · This command can be used to convert the held (or all) items to conform to Spigot's internal data format. I.e. this runs the items through Spigot's item serialization and deserialization in the same way as it would happen when these items are used inside shopkeeper trades and the plugin gets reloaded. · Added corresponding permission node "shopkeeper.convertitems.own" (default: op). This allows converting own items. · Added corresponding permission node "shopkeeper.convertitems.others" (default: op). This allows converting items of other players. · Added config options for the automatic conversion of items inside the inventories of players and shop chests to Spigot's internal data format whenever a player is about to open a shopkeeper UI (eg. trading, editor, hiring, etc.). · Added config option "convert-player-items" (default: false). This enables and disables the automatic item conversion. · Added config options "convert-all-player-items" (default: true) and 'convert-player-items-exceptions' (default: []). These two settings allow limiting which items are affected or ignored by the automatic conversion. · Note: Enabling this setting comes with a performance impact. You should generally try to avoid having to use this setting and instead search for alternative solutions. For more information, see the notes on this setting inside the default config. · Debug: Added debug option 'item-conversions' which 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. · Config: Added option 'max-trades-pages' (default: 5, min: 1, max: 10) which allows changing the number of pages that can be filled with trading options. This limit applies to all shopkeepers (there are no different settings for different types of shops or different permission levels so far). Note: The scroll bar rendered by the Minecraft client will only work nicely for up to 64 trades. · Added: It is now possible to change the size of slimes and magma cubes. Their default size is 1 (tiny). Even though Minecraft theoretically allows sizes up to 256, we limit the max size to 10. This avoids running into issues such as related to rendering, performance and not being able to interact with the slime or magma cube. If you have market areas where players can create their own shops and they are able to create slime or magma cube shopkeepers, you might want to take this maximum slime/magma cube size into account when assigning shop areas to players. · Fixed: Slimes and magma cubes no longer spawn with random size whenever they are respawned. · Fixed: Various optional (context dependent) command arguments were shown to be required inside the Shopkeepers command help. · Fixed: We no longer attempt to spawn Citizens NPCs when creating or loading Citizens shopkeepers if the spawn location's world is not loaded currently. · Fixed: Some versions of Citizens would produce an error when we try to teleport a NPC which has no location and is therefore not spawned currently. The teleport attempt has been replaced with an attempt to spawn the NPC. · Fixed: The "shopkeeper.*" permission was missing some child permissions. · Removed: The legacy permissions "shopkeeper.player.normal", "shopkeeper.villager", "shopkeeper.witch" and "shopkeeper.creeper" have been removed. Use the corresponding replacement permissions instead. · Changed: All players have access to all mob types (permission "shopkeeper.entity.*") by default now. · Added: The new 'all' argument for the "/shopkeeper list" command will list all shops now (admin and player shops). (Thanks to Mippy, PR 669) · Added: It is possible to use barrels and shulker boxes as containers for player shops now. · Added a message (msg-unsupported-container) when a player tries to select a type of container which is not supported by shopkeepers (i.e. hopper, dropper, dispenser, brewing stand, ender chest, or a type of furnace). · API: Deprecated PlayerShopkeeper#getChestX/Y/Z, #get/setChest, #getCurrencyInChest, #openChestWindow and PlayerShopCreationData#getShopChest and added corresponding replacements methods with more general names. · Various UI related changes: · API: It is now possible to create and open UIs that are not associated with any shopkeeper. UISession#getShopkeeper may return null now. · API: Added PlayerOpenUIEvent. · API: The ShopkeeperOpenUIEvent no longer extends ShopkeeperEvent, but the newly added PlayerOpenUIEvent instead. · API: Removed Shopkeeper#isUIActive, #deactivateUI, #activateUI. This is now part of the UISession. · API: Added UISession#close(), #closeDelayed(), #closeDelayedAndRunTask(Runnable), #abort(), #abortDelayed(), #abortDelayedAndRunTask(Runnable). · API: Added Shopkeeper#getUISessions() and #getUISessions(UIType). · API: Deprecated Shopkeeper#closeAllOpenWindows() and replaced it with #abortUISessionsDelayed(). · API: Added UIRegistry#getUISessions(), #getUISessions(Shopkeeper), #getUISessions(Shopkeeper, UIType), #getUISessions(UIType). · API: Deprecated UIRegistry#getSession(Player) and added replacement #getUISession(Player). · API: Deprecated UIRegistry#getOpenUIType(Player). · API: Deprecated UIRegistry#closeAll(), #closeAll(Shopkeeper) and #closeAllDelayed(Shopkeeper) and added replacements #abortUISessions(), #abortUISessions(Shopkeeper) and #abortUISessionsDelayed(Shopkeeper). · Minor fix: We check if the shopkeeper is still valid before attempting to open its container now. · Minor fix: If the second buy item of a trading recipe is empty, the corresponding created merchant recipe stores that as an empty second ingredient now. This should help when checking if the existing merchant recipes still match the newly created merchant recipes and thereby cause less recipe updates that are not actually required. · Fixed: Monster shopkeepers no longer burn when standing in sunlight. · Monsters usually get set on fire quite frequently when standing in sunlight. We therefore give zombies and skeletons a stone button as helmet now. This prevents them from getting set on fire in sunlight, by which we have to process less EntityCombustEvents. The stone button is also small enough to not be visible inside their head. · Entities standing in lava or fire are still set on fire as before. Added editor for regular villagers and wandering traders: · See the wiki: https://github.com/Shopkeepers/Shopkeepers-Wiki/wiki/Edit… · Any villagers and wandering traders which are not Citizens NPC or shopkeepers are considered 'regular'. · The editor supports editing the villager trades, similar to how editing works for admin shopkeepers. Note that trades created or edited via the editor will have infinite uses, no xp rewards, no price multipliers and the current uses counter gets reset to 0 (there are currently no options to edit or persist these attribut2.10.0Jun 27, 2020
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta