- **Fixed** Critical item duplication in multi-server (Redis) setups - when a player removed a selling item via the selling inventory, the item was correctly given to the player and marked as `DELETED` in the database, but other servers received a generic `LISTED` removal message and incorrectly recreated the item in their `EXPIRED` cache, allowing it to be claimed a second time on another server
- **Fixed** `ItemRepository.select(int id)` not filtering `DELETED` items - single-item database queries returned items already marked as `DELETED`, while the bulk `select()` method correctly excluded them. This allowed the Redis `ItemRemovedListener` to reload deleted items and re-add them to cache
- **Added** `destinationStorageType` to cluster bridge `removeItem` method - the `ItemRemovedMessage` now includes the exact destination storage type (`DELETED` or `EXPIRED`) so other servers know exactly what happened instead of guessing. Backward compatible via a `default` method on `AuctionClusterBridge`
- **Fixed** `ItemRemovedListener` (Redis addon) rewritten with defense-in-depth - uses the explicit destination from the message first, falls back to database state verification, and never blindly assumes an item should go to `EXPIRED`
- **Fixed** `CreateOptionsMigration` failing on MySQL with `errno: 150 "Foreign key constraint is incorrectly formed"` - the `player_unique_id` column used `uuid()` type which could produce a different collation than the existing `players` table (especially on MySQL 8.0+ with changed default collation). Changed to `string(36)` to match all other foreign key columns referencing `players.unique_id`
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" }