14a69904f9d3603af2cb90c2116df1b6966ee94c
During configuration, a ServerboundCustomClickActionPacket arriving when connectionInFlight is null falls through to handleGeneric, which writes it to the connected backend without retaining. The encoder releases the packet, then MinecraftConnection.channelRead's finally block releases again - double-free. Two fixes: - handle() now uses getConnectionInFlightOrConnectedServer() so the packet is properly retained before being written - handleGeneric() retains any ByteBufHolder packet before write, not just PluginMessagePacket Closes #1841
Velocity
A Minecraft server proxy with unparalleled server support, scalability, and flexibility.
Velocity is licensed under the GPLv3 license.
Goals
- A codebase that is easy to dive into and consistently follows best practices for Java projects as much as reasonably possible.
- High performance: handle thousands of players on one proxy.
- A new, refreshing API built from the ground up to be flexible and powerful whilst avoiding design mistakes and suboptimal designs from other proxies.
- First-class support for Paper, Sponge, Fabric and Forge. (Other implementations may work, but we make every endeavor to support these server implementations specifically.)
Building
Velocity is built with Gradle. We recommend using the
wrapper script (./gradlew) as our CI builds using it.
It is sufficient to run ./gradlew build to run the full build cycle.
Running
Once you've built Velocity, you can copy and run the -all JAR from
proxy/build/libs. Velocity will generate a default configuration file
and you can configure it from there.
Alternatively, you can get the proxy JAR from the downloads page.
Localisation
Translations are handled using Crowdin. If you want to translate a language not available on Crowdin, you might want to ask in the Discord about it.
Languages
Java
99.3%
C
0.4%
Shell
0.2%