## Added - Plugin system: `config.blade.php` as default config file name. - Plugin system: Allow to registering service providers automatically. - Plugin system: Added Filters API. - Allow to enable a plugin by running `php artisan plugin:enable {name}`. - Allow to disable a plugin by running `php artisan plugin:disable {name}`. - Allow to cache options by running `php artisan options:cache`. - Support multiple plugins directories. (Splited by comma in ".env" file.) - Added "Status" page. - Added support of customizing UI text. - Spanish support (Greatly thanks [@poopingpenis](https://github.com/poopingpenis)) - Brand new website theme color settings. - Detect Readme file of plugin automatically. - Added badge "STAFF" for administrators. - Added badges at texture detail page. - Added FAQ link at error page. - Added login with 3rd-party services. (GitHub and Microsoft Live are supported currently.) - Added support of character "ยง" for player name. (Under CJK mode.) - New password hash algorithm: Argon2i. - Support searching players when applying textures. - Support customizing textures storage directory. - Support searching players at players page. - Added Blessing Skin Shell. - Support specifying "from" email address and name when sending email. - 3D skin viewer can be with background now. - Added support of installing plugin by uploading archive. - Added support of installing plugin by submitting remote URL. ## Tweaked - Tweaked policy of retrieve CA cert for GuzzleHttp. - Refactor account system. - PHP version requirement is increased to 7.2.5. - Use `install.lock` file to detect status of installation. - Load front end i18n text from `lang/front-end.yml` of a plugin automatically. - Upgraded AdminLTE to v3. - Lengthened `ip` field in order to support IPv6. - Optimized performance of validating player name. - Changed method of retrieving IP. - Use `utf8mb4` encoding in MySQL/MariaDB. - Respond with unformatted Profile JSON to reduce bytes. - Switched to a new PHP texture renderer. - Display 3D avatar of player when applying texture to player. - New "Plugins Management" page. - "Choose Player" Dialog won't be showed if no texture is selected at closet page. - Make "CSRF token mismatched" error friendly. - Reduced times of sending verification email. - Changed icon of "Walking/Running" button of skin viewer. ## Fixed - Some fields at administration panel shouldn't be sortable. - Add missing l10n text. - Fixed that model was reset after resetting skin previewing. - Fixed that error stack doesn't show paths from plugins when AJAX has an error. - Fixed that error page doesn't display when using an unsupported hash algorithm. - Fixed fallback when unknown locale is detected. - Fixed compatibility with PHP 7.4. - Fixed the display problem for too long texture name. - Fixed that dependencies and conflicts haven't been checked before installing plugin. - Fixed retrieving search keyword from query string in skin library. - Fixed that `lang` attribute of HTML can't be configured correctly. - Fixed that avatar can't be resized when requesting an non-existed user. - Fixed that the same texture files with different models were treated as different textures. - Fixed when uploading duplicated texture, alert is missing. - Fixed that "score cost per closet item" isn't calculated at "texture upload" page. ## Removed - Removed Artisan command `php artisan key:random`. - Removed Artisan commands of migration for v3 to v4. - Dropped support of IIS. - Removed package `swiggles/memcache`. - Removed `commit` property from `blessing` global. - Removed Element UI. - Removed restriction of texture name and nickname. - Removed settings of "Method of Retrieving IP". - Removed "3rd-party comment", and please install separated plugin if you need it. - Removed enabling or disabling Redis via Web UI. - Removed Legacy API from core. (Install plugin if you need it.) - Removed Universal Skin API from core. (Install plugin if you need it.) - Removed auto update check. - Removed cache for Profile JSON. - Removed cache for existence of player. - Removed settings of "Respond 204 for unexisted players". (Install plugin if you need it.) ## Internal Changes - Upgraded Laravel to v6. - Rewritten almost templates with Twig.