Commit Graph
100 Commits
Author SHA1 Message Date
Andrew Steinborn 718f615d3f Simplify and improve the startup timer. 2018-08-13 07:23:49 -04:00
Andrew Steinborn 671df77c1f Forward the keep-alive packet directly onto the client.
This improves anti-cheat compatibility.
2018-08-12 08:06:50 -04:00
Andrew Steinborn 21e72556c9 Correctly handle rapid disconnects. Fixes #31 2018-08-11 06:46:40 -04:00
Andrew Steinborn 8068f72729 Fix up player info forwarding. 2018-08-11 00:22:24 -04:00
Andrew Steinborn 95bd152fee More protocol sanity. 2018-08-10 23:44:52 -04:00
Andrew Steinborn 8bf3b99b10 Make sure the client has time to respond to the player info packet.
Apparently, Minecraft 1.13 can take a little too long to respond to
Velocity's player info forwarding packet. This especially noticeable in
offline mode: by the time the client does respond, Velocity has already
completed the login process and tried connecting to the server (it is
very quick under offline mode).

Noticed by Leymooo.
2018-08-10 23:40:51 -04:00
Andrew Steinborn 8998bc7c8f Presize the maps.
TODO: Replace that ugly autoboxed primitive without excessively blowing
up the size of the JAR
2018-08-10 20:56:22 -04:00
Andrew Steinborn 9af6829688 Fix sending commands to remote server. 2018-08-10 03:05:59 -04:00
Andrew Steinborn 58e072ab94 Bumped to kyoripowered/text 1.12-1.6.2 2018-08-09 20:56:12 -04:00
Andrew Steinborn 0834bec997 Merge branch 'tab-complete' 2018-08-09 10:15:22 -04:00
Andrew Steinborn b78ddf7b85 Fix scoreboard teams on Minecraft 1.8. 2018-08-09 10:15:19 -04:00
Andrew Steinborn 2e1de306fb Complete tab-complete support back to Minecraft 1.8. 2018-08-09 10:14:44 -04:00
Andrew Steinborn 9a36bd6cae Merge branch 'master' into tab-complete 2018-08-09 09:47:30 -04:00
Andrew Steinborn 1f0a4a8228 Add support for HMACed player forwarding data.
This provides a small degree of security but also makes Velocity "secure
by default", especially on shared hosts.
2018-08-09 05:24:47 -04:00
Andrew Steinborn 254508a5cf Add connection attempt rate-limiting. 2018-08-09 03:23:27 -04:00
Andrew Steinborn db8b7c807c Add kqueue transport support 2018-08-08 10:10:11 -04:00
Andrew Steinborn 512b1c2403 Remove erroneously added getter 2018-08-08 09:45:38 -04:00
Andrew SteinbornandGitHub 84717a11da Update README.md 2018-08-08 09:22:47 -04:00
Andrew Steinborn 6bc5413038 Exclude all Gradle build folders 2018-08-08 05:59:26 -04:00
Andrew Steinborn a261823302 Add favicon support 2018-08-08 04:44:27 -04:00
Andrew Steinborn 54f9de04dc Add MC tab complete (incomplete, only 1.12.2 works) 2018-08-07 11:53:13 -04:00
Andrew Steinborn bb601dca4b Add console tab complete, shutdown command, gracefully kick players. 2018-08-07 11:02:35 -04:00
Andrew Steinborn a88d27af76 Ignore repeated shutdown requests. 2018-08-07 10:37:38 -04:00
Andrew Steinborn a7a227ed05 Add shutdown flag. 2018-08-07 10:14:34 -04:00
Andrew Steinborn 05693425bf Add a basic command handling framework inspired by Bukkit/BungeeCord.
This doesn't yet support tab complete, that will come later. Additionally,
a /server command (using your configuration) and /velocity (shows basic
copyright information about the proxy) have been added.
2018-08-07 09:34:31 -04:00
Andrew Steinborn 09eff5a2fb GS4 clients generally don't understand MC color codes (or JSON chat). 2018-08-07 07:56:28 -04:00
Andrew Steinborn b5fcc1b34a Fix GS4 issues. 2018-08-07 07:51:09 -04:00
Andrew Steinborn 3e0df79c98 Fix GS4 "can't bind to null" error. 2018-08-07 07:34:41 -04:00
Andrew Steinborn b983cdb7b3 Fix some spirous "connection closed" errors. 2018-08-07 07:18:54 -04:00
Andrew Steinborn a2b4291b36 Use Guava immutable integer arrays. 2018-08-07 07:18:21 -04:00
Andrew Steinborn abbdf70d5e [Experimental] Remove PacketWrapper objects
In both Velocity and BungeeCord, the most commonly created object is an
object that encapsulates a Minecraft packet and a its associated byte
data.

At first, I considered trying to recycle these objects, but then I
discovered that this object has no reason to exist, and actually somewhat
complicates the implementation. Thus, this commit removes these objects,
making Velocity more more GC-friendly by not allocating frequently-created
objects.

This is still an experimental change, but it's a fairly safe one to make.
2018-08-07 04:28:07 -04:00
Andrew Steinborn fdf5f27da6 Improve server list ping, especially for legacy MC versions. 2018-08-07 01:02:39 -04:00
Andrew Steinborn 48822fe55c Better case-insensitivity. 2018-08-05 17:14:39 -04:00
Andrew Steinborn a778825152 Add server registration API. 2018-08-05 17:10:18 -04:00
Andrew Steinborn 23a6488a39 Add default config again. Closes #12 2018-08-05 16:12:16 -04:00
Andrew Steinborn 4e64b04464 Avoid duplicate logins. 2018-08-05 01:30:40 -04:00
Andrew Steinborn 22d1398f73 Extend the API with a ProxyServer type. 2018-08-05 01:26:07 -04:00
Andrew Steinborn 06a6493605 Cleaned up connection code. 2018-08-04 03:18:57 -04:00
Andrew Steinborn 0ba85fe83f Introduce a fluent connection request API. 2018-08-04 03:13:17 -04:00
Andrew Steinborn fbdaae5ac7 Actually, this would be a better name... 2018-08-04 01:45:18 -04:00
Andrew Steinborn 9bcdc413d7 ProxiedPlayer interface 2018-08-04 01:40:37 -04:00
Andrew Steinborn 9438d087e2 Refactor cipher logic. 2018-08-04 00:09:25 -04:00
Andrew Steinborn 6f3397f76f Adjustments. 2018-08-03 17:49:35 -04:00
Andrew Steinborn 68ded7ca7f Allow tweaking compression. 2018-08-03 16:56:19 -04:00
Andrew Steinborn 0191b74840 Remove another memory copy with compression.
I considered using composite byte buffers but they would have added GC
overhead and would've been incompatible with any native code we added
unless special care was taken.
2018-08-03 05:21:35 -04:00
Andrew Steinborn 44932cfddb Nuke some debug output. 2018-08-03 02:27:18 -04:00
Andrew Steinborn 7eea1a3ac6 Introduce a connection pool for Mojang's session servers.
This has the potential to cut the time that players spend at the
"logging in..." (or "encrypting..." for 1.13+) screen by a fair
amount (gains of 200+ ms were noted for my own home connection).

While this sounds minor, I really do like to aim for all the details
and this is one of them.
2018-08-03 02:25:57 -04:00
Andrew Steinborn 0c481d828d Remove PluginMessage slicing for now.
This was causing leak issues and needs to be reimplemented. If anyone's
willing to undertake the work, I will gladly accept the PR!
2018-08-03 02:23:58 -04:00
Andrew Steinborn d38c7467d9 Various Netty changes.
- Potentially fixed a reference count leak with plugin messages.
- Cleaned up plugin message handling.
- Optimized the pipeline for better throughput by eliminating copying
  in the varint encoder and reduced object churn elsewhere.
2018-08-03 00:48:19 -04:00
Andrew Steinborn 68d315d1d3 Improvements for natives. 2018-08-02 23:52:21 -04:00
Andrew Steinborn 12ad629d4d If the channel becomes inactive, the connection's closed, too. 2018-08-02 22:10:55 -04:00
Andrew Steinborn b720b691de Revert experimental change 2018-08-02 14:22:42 -04:00
Andrew Steinborn 4bc4a1ec6a Use singular plurals, clean up some stuff. 2018-08-02 14:07:32 -04:00
Andrew Steinborn 2e59138428 Cleaned up native code. 2018-08-02 00:43:38 -04:00
Andrew Steinborn 850b2f7958 Add disposal checks. 2018-08-01 23:14:22 -04:00
Andrew Steinborn 9815837472 Fix directory structure 2018-08-01 22:27:40 -04:00
Andrew Steinborn fb4e6fd8f1 JNI native zlib compression 🔥 2018-08-01 22:22:09 -04:00
Andrew Steinborn 22dd4bbb99 Split natives. Add proper disposal for natives. 2018-08-01 00:20:51 -04:00
Andrew Steinborn 284a2a67a2 Remove unused entity remapper. 2018-08-01 00:20:51 -04:00
Andrew Steinborn c3e5784b64 This time, it needs to cache. 2018-07-31 16:23:22 -04:00
Andrew Steinborn 8b1e1f20cf A little more documentation. 2018-07-31 16:22:21 -04:00
Andrew Steinborn bbf861d3bc Convert into a multi-module project.
For now, the API module only contains a few assorted utilities. More
will be added later.
2018-07-31 16:12:41 -04:00
Andrew Steinborn f9fd58eea5 Update README. 2018-07-31 15:48:52 -04:00
Andrew Steinborn 25d13b2cc4 Bump to Gradle 4.9, fix deprecation warnings. 2018-07-31 15:25:34 -04:00
Andrew Steinborn 908aeb062d Add fancy badge 2018-07-31 15:03:13 -04:00
Andrew Steinborn 4b3675b571 Clean this up a bit 2018-07-31 13:44:10 -04:00
Andrew Steinborn cfc67c97f8 Update for recent protocol support. 2018-07-31 02:51:27 -04:00
Andrew Steinborn 91e977a7bd UUID before username 2018-07-31 00:48:56 -04:00
Andrew Steinborn 2f5ca386a6 Actually fix the login plugin messaging 2018-07-31 00:47:05 -04:00
Andrew Steinborn 2f5f93a427 Write UUID in MSB/LSB format instead 2018-07-30 23:56:00 -04:00
Andrew Steinborn d9f68140d6 Implement Velocity native IP forwarding for 1.13+
No other server implements this (as of yet). We plan to get support for
this into at least Paper and Sponge.
2018-07-30 23:40:25 -04:00
Andrew Steinborn a45adbc8ec Fix scoreboard issue 2018-07-30 22:28:07 -04:00
Andrew Steinborn ed8a279cd1 Initial 1.13 support
Still kind of wonky but mostly works
2018-07-30 22:19:27 -04:00
Andrew Steinborn 8c4d710725 Gracefully fall back for STATUS/HANDSHAKE/LOGIN states 2018-07-30 21:35:11 -04:00
Andrew Steinborn cc1d8f8184 Initial Minecraft 1.9.x support 2018-07-30 21:27:34 -04:00
Andrew Steinborn 515248fa99 Expand the remapping stuff. 2018-07-30 20:49:43 -04:00
Andrew Steinborn 6b5cd703f0 Initial remapping support, fix protocol crap. 2018-07-30 20:35:05 -04:00
Andrew Steinborn 47bea89146 Support Minecraft 1.10 2018-07-30 19:35:16 -04:00
Andrew Steinborn 8ddddba1cd Update Netty to 4.1.28.Final 2018-07-30 19:02:08 -04:00
Andrew Steinborn 4a0847f06c Support 1.11.x and 1.12/1.12.1 2018-07-30 18:51:53 -04:00
Andrew Steinborn 9b59587e58 Make this permissive enough for FeatherBoard 2018-07-30 18:38:18 -04:00
Andrew Steinborn 2d4d9e42b5 Properly handle scoreboard removal while switching between servers 2018-07-30 18:21:25 -04:00
Andrew Steinborn 972ef73d35 Scoreboard packets (1.12.2 only) 2018-07-30 17:38:02 -04:00
Andrew Steinborn bc1dc457e7 Initial scoreboard objects
We need to make these nicer, but for internal use they're fine.
2018-07-30 16:36:15 -04:00
Andrew Steinborn dde6560a5a More efficient message handling 2018-07-30 15:05:24 -04:00
Andrew Steinborn 8a73e3f12b More proper plugin messaging support. 2018-07-30 14:20:15 -04:00
Andrew Steinborn b345d3aba3 Finishing up plugin message stuff for tonight. 2018-07-30 02:21:44 -04:00
Andrew Steinborn a216d25a1a Fix ID for 1.11 2018-07-30 01:36:14 -04:00
Andrew Steinborn 153f09ae70 Add support for Plugin Message packet, full implementation later. 2018-07-30 01:35:47 -04:00
Andrew Steinborn 48fafc73be Correctly handle boss bars on server transfers 2018-07-30 01:03:42 -04:00
Andrew Steinborn 1616d097eb Respect try list in velocity.toml 2018-07-29 22:47:54 -04:00
Andrew Steinborn 201c484247 Actually handle that 2018-07-29 22:31:41 -04:00
Andrew Steinborn 64ff0683c9 Handle proxy<->server exceptions 2018-07-29 22:28:56 -04:00
Andrew Steinborn 5be8452d1f Fix a couple of protocol issues 2018-07-29 20:53:51 -04:00
Andrew Steinborn 029d3a2044 Update README 2018-07-29 20:37:27 -04:00
Andrew Steinborn 7546270624 Support Minecraft 1.11/1.11.1+ 2018-07-29 18:39:25 -04:00
Andrew Steinborn dcc40dd06b Fix the tests for now. More extensive ones later. 2018-07-29 17:51:18 -04:00
Andrew Steinborn e672f8d7cd Preserve client settings packets 2018-07-29 17:44:16 -04:00
Andrew Steinborn b79e7df039 Initial 1.12/1.12.1 support. Bug fixes! 2018-07-29 17:09:27 -04:00
Andrew Steinborn a9279072c1 Autocreate velocity.toml 2018-07-27 21:15:57 -04:00