This time around, instead of the very ad hoc approach I have historically taken, this time we actually have a convenient script that takes care of basically all the hard work necessary, including cross-compilation.
We compile natives for Ubuntu 20.04 LTS (OpenSSL 1.1.x native and libdeflate) and Ubuntu 22.04 LTS (OpenSSL 3.x.x native), for both x86_64 and aarch64.
The macOS natives have also been recompiled on macOS Sonoma.
There is little expectation that we should get a -ve number in here, but
it is sadly seen in the wild. We will use an alternative exception path rather
than returing a magic number to indicate an invalid value.
once primative classes arrive, this should probably be written to use those
for passing up the result.
* feat: Add server registered/unregistered events
* Annotate new API with `@Beta`
* Migrate from classes to records
* Add null checks
* Fix code style indent
* Add links in documentation
* Fix docs indent
---------
Co-authored-by: powercas_gamer <cas@mizule.dev>
In this case, we don't even need a concurrency-friendly MPSC queue, since this code only ever gets run in the event loop associated to the channel, so a simple `ArrayDeque` is enough for our needs.
* Configuring the player (i.e. sending resource packs) should now be done in the new PlayerConfigurationEvent.
* The new PlayerEnteredConfigurationEvent is called when a player acknowledged the switch to configuration state.
* The PlayerEnterConfigurationEvent is no longer called twice. It is now called when the backed wants to reconfigure the player.
* The PlayerFinishConfigurationEvent should no longer be used to configure the player (i.e. sending resource packs). This is because since 1.20.5 the backend server can't send keep alive packets between switching state anymore and the connection will thus time out.
The Vanilla client will send 'last seen' even if the message is not signed, so this is much stricter than it needs to be. This should allow commands without any signed arguments to be modified/consumed by the proxy.
This is hardly useful in the case of signed player chat messages, as these fundamentally cannot be spoofed or modified - however, for any unsigned input (particularly commands without any signed arguments), 'last seen' updates are still required and should be passed through in a consistent state.