- Converted all existing pack definitions (including code-defined ones) to use new hjson definitions
- Created ProductLibrary to replace PacksStorage
- Created a hundred unit tests to confirm that the PL packs are the same as the PS packs
- Replaced all references to PacksStorage with ProductLibrary
- Absorbed CardSets into the CardBlueprintLibrary
- Adjusted library initialization to take filenames during the constructor and immediately initializing, instead of waiting for that for every single instance.
- Changed the library CountDownLatch to use a Semophore instead.
- Adjusted library to be able to hot reload the blueprint mapping and setconfig files (this is not exposed to an endpoint yet)
- Adjusted all public-facing functions of the blueprint library to block if in use
- As a result, reloading should now cause all operations that use the library to pause during the reload
- Added server-wide messages when card reload is invoked
- Fixed chat messages to make all URLs open in a new tab
- Set up the loading of draft files to use the shared functionality in AppConfig
- Enabled draft definition hot reload
- Refactored various draft system files to be static
- Fixed the hobbit draft tests needing to be invoked manually
- Moved all text files that are loaded at runtime to gemp-lotr-cards/src/main/resources
- Updated ApplicationConfiguration (renamed AppConfig) to handle finding text data files based on configuration
- Updated gemp-lotr.properties to contain dev and test versions of the resource path (used for in-IDE execution and JUnit execution, respectively)
- Updated all references to text files to go through AppConfig
- Added shutdown enter/exit and JSON card reload to the admin panel.
- Greatly expanded the MOTD functionality in the admin panel.
- Converted server cache clear command to the new admin panel.
- fixed slash commands not working in chat
- added a warning if an invite-only table is made for a user that doesn't exist
- fixed the CoC not rendering properly
- Combined the chopped-up help messages so that spam is avoided (as <br> can just be used now)
- fixed league games being eligible for custom descriptions (this breaks anonymity)
- removed chat lock icon and added functionality to just automatically lock when at the bottom of the scroll bar
- removed some niggling grid stuff
- created buttons for deck builder and merchant, freeing up room for the center bar
- added dark mode support for all game hall controls in both Firefox and Chrome
- revamped colors from the table creation bar down to use solid colors
- Overhauled how Discounts work for json cards to support all the existing DiscountEffects.
- Altered InZoneData to now be preserved when the data was set in the void/void-from-hand.
- Converted the original Mountain-troll to json
- Added unit tests for errata + original
- Added ReinforceTokens effect
- Added limit field to ChooseAndRemoveTokens, which permits devs to set a range besides [0-max tokens]
- Added requires field to CostToEffect, which in reality is here because two consecutive ChooseAndRemoveToken actions never resolves properly due to the separate nature of the two behaviors assuming they can remove the same tokens
- Updated verbiage for share button from Export deck list -> Share deck list