* game.processAction() instead of game.getState().processAction(game)
* add simpler method name and docs
* find/replace to new method
* remove old method
* deprecate applyEffects
Mystery Booster rework:
* added images download support from scryfall (closes#11806);
* added virtual sets support (remix);
* fixed Commander set name (closes#12110);
* gui: removed public deck hash info;
* gui: improved xmage dck-file - now it correctly load a card's amount (related to files from third party services);
* server: fixed wrong cheating warning on deck construction (closes#11877);
* refactor: removed outdated hash code and calculations;
* other: added docs, added multiple deck hash tests;
Face down changes:
* GUI: added visible face down type and real card name for controller/owner (opponent can see it after game ends);
* GUI: added day/night button to view real card for controller/owner (opponent can see it after game ends);
* game: fixed that faced-down card can render symbols, abilities and other hidden data from a real card;
* images: added image support for normal faced-down cards;
* images: added image support for morph and megamorph faced-down cards;
* images: added image support for foretell faced-down cards;
Other changes:
* images: fixed missing tokens from DDD set;
* images: no more client restart to apply newly downloaded images or render settings;
* images: improved backface image quality (use main menu -> symbols to download it);
tests: fixed wrong permanent structure for battlefield cards (addCard command);
tests: added docs and additional runtime checks;
game: Modal double-faced cards - improved support, no more other side effects on battlefield;
game: Copy abilities - improved stability and cards support;
game: Player under control - improved stability and related cards support (possible NPE errors, additional runtime checks);
server: fixed bloated logs with game timer;
AI: fixed wrong timer in computer games;
* server: fixed that a critical errors ignored in user commands threads (now it will be added to the logs);
* network: fixed frozen user responses in some use cases;
* network: fixed accidental and incorrect user responses (only latest response will be used now);
* network: improved freeze logs, added problem method name and code's line number;
* cheats: removed outdated deck and card load logic (only init.txt commands supports now);
* cheats: fixed wrong priority after add card dialog (closes#11437);
* cheats: improved stability and random errors on cheat executes (related to #11437);
* docs: added details on network and thread logic, human feedback life cycle, etc (see HumanPlayer, ThreadExecutorImpl);
* Implement Costs Tag Map system
* Use Costs Tag Map system to store X value for spells, abilities, and resolving permanents
* Store Bestow without target's tags
Change functions for getting tags and storing the tags of a new permanent
* Create and use deep copy function in CardUtil, add Copyable<T> to many classes
* Fix Hall Of the Bandit Lord infinite loop
* Add additional comments
* Don't store null/empty costs tags maps (saves memory)
* Fix two more Watchers with Ability variable
* Add check for exact collection types during deep copy
* Use generics instead of pure type erasure during deep copy
* convert more code to using deep copy helper, everything use Object copier, add EnumMap
* fix documentation
* Don't need the separate null checks anymore (handled in deepCopyObject)
* Minor cleanup