### Fixed
- **Quick Sell GUI "Nothing to sell" after shift-click** — `handleConfirm` now calls a new `ShopTransactionService.sellDirect()` method that skips the player-inventory item count/removal steps. Previously, shift-clicking items into the GUI moved them out of the player's inventory, so the old `sell()` path found zero items and reported nothing to sell.
- **Quick Sell GUI shows "Nothing to sell" when sell fails after shift-click** — `handleConfirm` now distinguishes between a genuinely empty GUI and a GUI that has items but whose `sellDirect` call failed (e.g. economy down, dynamic price driven to $0.00 by a previous sale, rotation expired). The actual failure reason is shown to the player instead of the misleading "No items to sell." message. Items that failed to sell remain in the GUI so the player can retry.
- **Quick Sell GUI rejects rotation items even when directly sellable** — `sellDirect` and `isSellable` both applied a rotation-visibility check that belongs only in the main shop menu. The Quick Sell GUI is designed to accept any item with a configured sell price; rotation restrictions are now only enforced in `sell()`, which is the path used when a player types `/sell` or `/sellhand`.
- **Legacy `shop.yml` item keys not found when using lowercase material names** — `loadLegacyEntries` now normalises every price key to `Material.name()` (e.g. `BIRCH_LOG`) before registering it in the price map. Previously, a config entry written as `birch_log:` was stored under the lowercase key, so `getPrice(Material.BIRCH_LOG)` could not find it, silently treating the item as unpriced.
### Added
- **Stripped log variants in the wood category** — all 9 stripped log types (`STRIPPED_OAK_LOG`, `STRIPPED_SPRUCE_LOG`, `STRIPPED_BIRCH_LOG`, `STRIPPED_JUNGLE_LOG`, `STRIPPED_ACACIA_LOG`, `STRIPPED_DARK_OAK_LOG`, `STRIPPED_MANGROVE_LOG`, `STRIPPED_PALE_OAK_LOG`, `STRIPPED_CHERRY_LOG`) are now included in the default `wood.yml` config so players can sell stripped logs with `/sellhand` and the Quick Sell GUI out of the box.
- **Wood (all-bark) block variants in the wood category** — all 9 wood block types (`OAK_WOOD`, `SPRUCE_WOOD`, `BIRCH_WOOD`, `JUNGLE_WOOD`, `ACACIA_WOOD`, `DARK_OAK_WOOD`, `MANGROVE_WOOD`, `PALE_OAK_WOOD`, `CHERRY_WOOD`) are now included. Previously, attempting to `/sellhand` a "Birch Wood" block (as opposed to a "Birch Log") would return "That item is not configured in the shop."
- **Plank variants in the building category** — all 9 plank types (`OAK_PLANKS`, `SPRUCE_PLANKS`, `BIRCH_PLANKS`, `JUNGLE_PLANKS`, `ACACIA_PLANKS`, `DARK_OAK_PLANKS`, `MANGROVE_PLANKS`, `PALE_OAK_PLANKS`, `CHERRY_PLANKS`) are now included in the default `building.yml` config.
Optional dependencies
Teams API
Any compatible version
EzAuction
Any compatible version
EzBoost
Any compatible version
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }