This technically can break backwards compatibility, but this seems to be very unlikely to be the practice in reality. (The Velocity implementation probably wasn't correct, anyway.)
* Adjust HAProxy's existance to log when the proxy protocol is enabled during bind.
* Added additional warning message, instead of changing the main one. We can see what the preference would be.
This required a not-insubstantial number of bug fixes, since the sync support had bit-rotted somewhat. This PR also corrects a number of bugs.
Finally. the per-plugin executor services are now used to execute all async event tasks.
This was unused and did little more than add unnecessary memory usage. The only time we need the dimension registry is during server switching - once that is done, we no longer need the registry.
This is an optimization that has been in BungeeCord for some time, but it's an idea that makes a lot of sense: avoid a memory copy when we don't need to do one. The OS will hopefully be smart enough to use `writev()` or similar for this.
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.