individual commits combined here:
send active plugins
compute plugin sha hash
single position for defining Hash type
request plugins from the server
Server sending the plugin to the client
store received plugin in file and use it
handle plugin data at the right place
pass config_dir to client init
load local plugins
operational plugin caching
simplify the interface
clippy suggestions
remove artifacts
fix compilation of test world
ChangeLog entry
code quality fixes
improve readability
adapt to multiple systems
* use version of shred that has an added SendDispatcher so we can
construct the dispatcher and send it between threads (only State to
remain sendable)
* move closure for adding systems from State::tick to the creation
functions
* this does mean some voxygen systems always run instead of just in the
session state, but that should not cause issues and we can always
configure them to do nothing if needed
As a side effect, this moves the initial game server sync message into
the login code, since that's the first place we can check for admin
permissions and we want to avoid sending large messages to users who are
not authenticated (especially if the player cap has been reached;
previously, the player cap check limited the damage that could be done
by unauthenticated players).
Some fallout from this is that we don't synchronize the Player component
anymore, which had some minor effects on voxygen. This update also
breaks Torvus, since Client::new now expects the username and password
to be provided from the getgo--an accompanying MR will be submitted to
fix it.