UploadedJul 7, 2021
Supported Bukkit Versions
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://dev.bukkit.org/projects/shopkeepers/files/3358020/
- 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.
Known potential issues: See here.
If you like this plugin, consider making a donation.