Scans a file or folder recursively for jar files that may be vulnerable to Log4Shell

Velocity

Build Status Join our Discord

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, 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.

Owner
PaperMC
PaperMC is a Minecraft Software organization focusing on improving the Minecraft ecosystem with faster and more secure software.
PaperMC
Comments
  • Modern Forge (1.13+) support

    Modern Forge (1.13+) support

    Adds a fix for https://github.com/PaperMC/Velocity/issues/248

    Updates the Forge connection logic for the new Forge client handshake and adds the "reset packet" sending implementation. There is a pending Forge fix for interpreting this packet, however this has to come first (especially given the fix doesn't have to exist in Forge for the solution to work to begin with).

    This has all been tested with Vanilla, Spigot, and Forge (and Forge with mods) clients and servers interchangeably.

  • Unable to join any server, stuck on

    Unable to join any server, stuck on "Joining World..."

    Hello,

    Every time I attempt to join a server, I get stuck on the "Joining World..." screen. I am running build #384, with a new install and no plugins. I have query disabled, and am using the legacy player info forwarding mode.

  • Help debugging

    Help debugging "A packet did not decode successfully (invalid data)"

    Problem

    I'm getting this error when entering certain locations on my modded server:

    [00:41:54 INFO]: [server connection] azokthedefiler1 -> dwr1 has connected [00:42:13 ERROR]: [server connection] azokthedefiler1 -> dwr1: exception encountered in com.velocitypowered.proxy.connection.backend.BackendPlaySessionHandler@16432293 com.velocitypowered.proxy.util.except.QuietDecoderException: A packet did not decode successfully (invalid data). If you are a developer, launch Velocity with -Dvelocity.packet-decode-logging=true to see more. [00:42:13 INFO]: [server connection] azokthedefiler1 -> dwr1 has disconnected

    Adding "-Dvelocity.packet-decode-logging=true" to java when starting velocity does nothing. There above error is replaced with:

    [00:10:30] [Netty epoll Worker #1/INFO]: [server connection] azokthedefiler1 -> dwr1 has connected [00:10:33] [Netty epoll Worker #1/INFO]: [server connection] azokthedefiler1 -> dwr1 has disconnected

    Minecraft server console logs error as:

    [00:58:02] [Server thread/INFO] [minecraft/DedicatedServer]: azokthedefiler1 joined the game [00:58:02] [Server thread/INFO] [minecraft/NetHandlerPlayServer]: azokthedefiler1 lost connection: Internal Exception: java.io.IOException: Connection reset by peer [00:58:02] [Server thread/INFO] [minecraft/DedicatedServer]: azokthedefiler1 left the game

    Version

    Velocity: velocity-proxy-1.1.0-SNAPSHOT-all.jar build #206

    Next steps

    • How do I enable debugging to get more info about what is happening here?
    • What other info do you need to fix this issue?
  • Relicense the Velocity proxy under the terms of GPLv3

    Relicense the Velocity proxy under the terms of GPLv3

    This PR relicenses the Velocity proxy under the terms of the GNU General Public License v3, with the exception of the Velocity API (which remains MIT-licensed).

    Code contributed to the Velocity project prior to March 24, 2021 will remain available under the MIT license, but future contributions outside of the API will be GPLv3-licensed. Although I have unilateral ability to relicense Velocity in one fell swoop, I wish to get other contributors on board who may or may not want this to happen. This change, though targeted at Velocity 1.1.0, will also apply to Velocity 2.0.0.

    Why are you doing this now?

    The reason for doing so is largely so that Velocity remains free, open source, and a valuable contribution to the Minecraft community, whilst also allowing the team to keep contributing to the project in the face of pressure from our real-life jobs. In addition, certain developers have been taking our work and reselling it commercially. While they did nothing necessarily wrong legally, in practice they are leeches unwilling to contribute back to the Velocity project (instead taking our code and shoving it into poor-quality BungeeCord and ancient forks of Paper), which has precipitated this move.

    Since the Velocity project was started in 2018, we've moved the needle on what a Minecraft proxy can do. We want to go further and have some big, unique features planned - but this licensing change is a necessary step for doing so.

  • Much error when use velocity

    Much error when use velocity

    forge 1.12.2 spongeforge 7.15 velocity latest plugin: bungeequack

    The following problems are all generated after the use of velocity, So I think this has something to do with velocity.

    1. Sometimes connect player from ServerA to ServerB , the ServerA will print "abc moved too quickly! 716.0050468618773,-18.5,-952.4585183223486",then print NPC exception, see gist "server A log" line 129.

    2. Server B crash more easily when player connect from Server A. see gist "server B log". And player will kick back to server A: You were moved from the server you were on because you were kicked

    The logs are all at the same time, so they can be viewed in combination

    https://gist.github.com/zhourui123/d372e2dff1fee3ffe816826d9373d8ca

  • Error when connecting to a server.

    Error when connecting to a server.

    This error occurred when connecting to an Engimatic 2: Expert Skyblock server AFTER connecting to a Sponge Vanilla lobby. Put here for tracking purposes.

    https://paste.ubuntu.com/p/yqJf7ydb8d/

  • A plugin tried to cancel a signed chat message.

    A plugin tried to cancel a signed chat message.

    So I'm preparing to upgrade my servers to 1.19.1, I decided to start with my network-wide-chat plugin and I immediately run into this problem:

    A plugin tried to cancel a signed chat message. This is no longer possible in 1.19.1 and newer. Disconnecting player

    Added in this line: https://github.com/PaperMC/Velocity/blob/c57fb489f3cc664fe05cdbdbb24fdca1347ef446/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java#L200

    Is there a technical reason why Velocity wants to turn this into an error? Because if I simply disable that line and rebuild, my original plugin works fine. Player chat messages are actually sent to all players across all servers as a simple system message.

  • New command API

    New command API

    Introduces a new command framework that supports both legacy String[] args commands and 1.13+ Brigadier commands.

    As discussed in https://github.com/VelocityPowered/Velocity/pull/329#discussion_r454969425 and https://github.com/VelocityPowered/Velocity/issues/232, the current command framework lacks support for new command features. This PR adds 3 subinterfaces to Command: BrigadierCommand, LegacyCommand and RawCommand. All execution-related methods such as execute and hasPermission now take a single CommandInvocation argument that includes the command source and additional execution metadata such as the String[] args for legacy commands.

    TODO:

    • [x] Decide on command execution context name. Candidates so far are CommandExecutionContext, CommandContext and CommandInvocation
    • [x] Move built-in commands to Brigadier
    • [x] Test all the things!!1!
      • [x] Brigadier aliases as redirects (see https://github.com/Mojang/brigadier/issues/46, do we need to create our own redirects system?)
  • Kick on joining

    Kick on joining

    Basically we have this one player that every time he joins it kicks only him and 2 other players at random and then throws all these errors in the console log.

    [19:11:48] [Netty epoll Worker #1/ERROR]: [server connection] Josua27176 -> pixel: exception encountered in com.velocitypowered.proxy.connection.backend.BackendPlaySessionHandler@22ebfecd
    java.lang.IllegalStateException: java.io.UTFDataFormatException: malformed input around byte 17
    	at com.velocitypowered.proxy.protocol.util.ByteBufDataInput.readUTF(ByteBufDataInput.java:107) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at com.velocitypowered.proxy.connection.backend.BungeeCordMessageResponder.processForwardToServer(BungeeCordMessageResponder.java:224) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at com.velocitypowered.proxy.connection.backend.BungeeCordMessageResponder.process(BungeeCordMessageResponder.java:292) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at com.velocitypowered.proxy.connection.backend.BackendPlaySessionHandler.handle(BackendPlaySessionHandler.java:101) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at com.velocitypowered.proxy.protocol.packet.PluginMessage.handle(PluginMessage.java:81) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at com.velocitypowered.proxy.connection.MinecraftConnection.channelRead(MinecraftConnection.java:113) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.flow.FlowControlHandler.dequeue(FlowControlHandler.java:191) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.flow.FlowControlHandler.channelRead(FlowControlHandler.java:153) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252]
    Caused by: java.io.UTFDataFormatException: malformed input around byte 17
    	at java.io.DataInputStream.readUTF(DataInputStream.java:656) ~[?:1.8.0_252]
    	at com.velocitypowered.proxy.protocol.util.ByteBufDataInput.readUTF(ByteBufDataInput.java:105) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	... 41 more
    [19:11:48] [Netty epoll Worker #1/INFO]: [connected player] Josua27176 (/24.34.161.59:43539) has disconnected: Your connection to pixel encountered an error.
    [19:11:48] [Netty epoll Worker #1/INFO]: [server connection] Josua27176 -> pixel has disconnected
    [19:11:48] [Velocity Event Executor - #0/INFO]: Josua27176 has left the proxy
    [19:11:50] [Netty epoll Worker #1/ERROR]: [server connection] Kobrakill00 -> pixel: exception encountered in com.velocitypowered.proxy.connection.backend.BackendPlaySessionHandler@735ee552
    java.lang.IllegalStateException: java.io.UTFDataFormatException: malformed input around byte 17
    	at com.velocitypowered.proxy.protocol.util.ByteBufDataInput.readUTF(ByteBufDataInput.java:107) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at com.velocitypowered.proxy.connection.backend.BungeeCordMessageResponder.processForwardToServer(BungeeCordMessageResponder.java:224) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at com.velocitypowered.proxy.connection.backend.BungeeCordMessageResponder.process(BungeeCordMessageResponder.java:292) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at com.velocitypowered.proxy.connection.backend.BackendPlaySessionHandler.handle(BackendPlaySessionHandler.java:101) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at com.velocitypowered.proxy.protocol.packet.PluginMessage.handle(PluginMessage.java:81) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at com.velocitypowered.proxy.connection.MinecraftConnection.channelRead(MinecraftConnection.java:113) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.flow.FlowControlHandler.dequeue(FlowControlHandler.java:191) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.flow.FlowControlHandler.channelRead(FlowControlHandler.java:153) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:311) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:425) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252]
    Caused by: java.io.UTFDataFormatException: malformed input around byte 17
    	at java.io.DataInputStream.readUTF(DataInputStream.java:656) ~[?:1.8.0_252]
    	at com.velocitypowered.proxy.protocol.util.ByteBufDataInput.readUTF(ByteBufDataInput.java:105) ~[velocity-proxy-1.1.0-SNAPSHOT-all.jar:1.1.0-SNAPSHOT (git-e83662e8-b117)]
    	... 43 more
    [19:11:50] [Netty epoll Worker #1/INFO]: [connected player] Kobrakill00 (/184.188.64.175:58698) has disconnected: Your connection to pixel encountered an error.
    [19:11:50] [Netty epoll Worker #1/INFO]: [server connection] Kobrakill00 -> pixel has disconnected
    [19:11:50] [Velocity Event Executor - #0/INFO]: Kobrakill00 has left the proxy
    
  • Add ability to play sounds and send particles via the API

    Add ability to play sounds and send particles via the API

    As the title say, I suggest to add ways to play sounds and to send particles to a player using the API. In my case I want to write a note block music plugin. Why can't I write my plugin at the server level ? Because I want the music the keep playing when the player changes server. Anyway, these functionalities could be also useful for a lot of other applications until then impossible at the proxy level. Sending sounds or particles almost always requires a position as parameter. And this position is often relative the player position. So I also suggest to add a way to get the player position. This position would be deduced by Velocity by tracking position packets. I don't know how heavy it would be to track these packets so if it's a potentially heavy task it could be interesting to make it optional and controlled by a config file or by plugins using the API, or both.

  • French translation

    French translation

    Hello, I translated Velocity in French. I want HookWood and Shawiz to verify my work as soon as they can.

    About the translation:

    • I didn't include the feminine variations of the sentences (it's just impossible to handle). If you want to help me to do that in another pr you can add me on Discord (toinouH#0780) :)
    • There is also no question of inclusive writing, which is currently the subject of so much debate in France. If and only if this "inclusive writing" is passed by parliament, implemented by the executive and approved by language academics, I will do a pr to remedy this. Thank you for your understanding and do not debate it here since this is not the place.
  • Velocity not syncing datapack registries correctly, affecting modded fabric platforms

    Velocity not syncing datapack registries correctly, affecting modded fabric platforms

    In the example of Supplementaries, players are kicked when using items that call to a specific api. I've reported this to the developers, and they're stating that velocity isn't handling the sync of datapack registries correctly.

    Here's the client crash that's happening: https://gist.github.com/purejosh/c6da9ecba61745eb4ccf69737ea2fc25

    image

    Please let me know what other info you may need. Might be easier to start an open conversation with the dev of Supplementaries, MehVahdJukaar.

  • Add ServerHandshakeEvent

    Add ServerHandshakeEvent

    The ServerHandshakeEvent hooks before the login handshake packet is sent and enables the values to be modified (after the various forwarding mode and connection type rules are applied).

    This is useful to me for changing the address sent to the server as an early means of sending custom data from velocity->paper without sending additional packets. This was previously possible with BungeeCord and is an impediment to porting plugins.

    I have not previously contributed to Velocity and I am unsure if this is the proper approach for implementing this behavior. Changes are welcome.

  • Kick-Problem with latest velocity devbuild (201)

    Kick-Problem with latest velocity devbuild (201)

    Hello! I face a strange problem on my network. I have 2 servers (survival and skyblock), most of the players are playing on skyblock (~50 skyblock, ~10 survival). After a while all players are getting kicked from skyblock (actually from proxy but just the skyblock players) with message "Timed Out". Basically the connection between skyblock server and velocity breaks somehow. After the kick happen all players can rejoin on lobby, but not on skyblock (everything is working in SkyBlock console, the server doesn't crash). When the players are trying to reconnect on skyblock it doesn't work, velocity doesn't detect the skyblock to be online but after a SkyBlock restart the players will be able to rejoin again. I tried more things, but after I downgrade velocity version from 201 to 196 the problem is not happening anymore.

    I thought it's from TCPShield so I contacted them, they told me that it's on my proxy side. image image image

  • Player get kicked due to out-of-order chat when sending messages rapidly

    Player get kicked due to out-of-order chat when sending messages rapidly

    Velocity version: 3.1.2-SNAPSHOT-201

    • No Velocity plugin installed
    • No matter whether the value of force-key-authentication is true or false, the player will be kicked
    • I've tested modern and none player info forwarding mode

    Server: 1.19.3, fabric with mods: fabric-api, fabric-carpet, carpet-tis-addition, fabricproxy-lite Velocity log:

    [16:02:00 INFO]: [connected player] AnnaNo (/113.x.x.x:56524) has connected
    [16:02:00 INFO]: [server connection] AnnaNo -> mirror has connected
    [16:02:38 INFO]: [connected player] AnnaNo (/113.x.x.x:56524) -> executed command /gamerule sendCommandFeedback
    [16:02:38 INFO]: [connected player] AnnaNo (/113.x.x.x:56524) -> executed command /fill 9 -32 256 10 -32 256 minecraft:iron_block replace air
    [16:02:38 INFO]: [connected player] AnnaNo (/113.x.x.x:56524) -> executed command /setblock 9 -32 257 minecraft:observer[facing=south,powered=false]
    [16:02:38 INFO]: [connected player] AnnaNo (/113.x.x.x:56524) -> executed command /fill 9 -29 256 9 -29 257 minecraft:redstone_wire[east=none,north=side,power=0,south=side,west=none] replace air
    ...
    [16:02:38 INFO]: [connected player] AnnaNo (/113.x.x.x:56524) -> executed command /setblock 11 -29 256 minecraft:white_stained_glass
    [16:02:38 INFO]: [connected player] AnnaNo (/113.x.x.x:56524): kicked from server mirror: multiplayer.disconnect.out_of_order_chat
    [16:02:38 INFO]: [server connection] AnnaNo -> mirror has disconnected
    [16:02:38 INFO]: [connected player] AnnaNo (/113.x.x.x:56524) has disconnected: You were kicked from mirror: multiplayer.disconnect.out_of_order_chat
    

    fabric server log:

    [16:02:00] [Server thread/INFO]: AnnaNo[/113.x.x.x:49340] logged in with entity id 142 at (-0.4497645856701771, -40.0, 248.48987400782113)
    [16:02:00] [Server thread/INFO]: AnnaNo joined the game
    [16:02:01] [Server thread/INFO]: Player AnnaNo joined with a matching carpet client
    [16:02:38] [Netty Epoll Server IO #3/WARN]: AnnaNo sent out-of-order chat: 'fill 9 -29 256 9 -29 257 minecraft:redstone_wire[east=none,north=side,power=0,south=side,west=none] replace air'
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -32, 257]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Successfully filled 2 blocks]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -34, 258]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -33, 258]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -32, 258]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -31, 258]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -30, 258]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -29, 258]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -28, 258]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -27, 258]
    [16:02:38] [Server thread/INFO]: AnnaNo lost connection: Out-of-order chat packet received. Did your system time change?
    [16:02:38] [Server thread/INFO]: AnnaNo left the game
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -26, 258]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -25, 258]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -24, 258]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -34, 259]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -33, 259]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -32, 259]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -25, 259]
    [16:02:38] [Server thread/INFO]: [AnnaNo: Changed the block at 9, -24, 259]
    [16:02:38] [Server thread/WARN]: handleDisconnection() called twice
    

    When directly connect to the fabric server or use Waterfall as proxy (delete fabricproxy-lite mod), player won't be kicked due to out-of-order chat

    To reproduce:

    1. Set-up a 1.19.3 fabric server and install mods: fabric-api, fabric-carpet, carpet-tis-addition, fabricproxy-lite
    2. Start the fabric server and enter carpet antiSpamDisabled true to disable spamming checks on players
    3. Set-up 3.1.2-SNAPSHOT-201 Velocity and start it
    4. Connect using a client with litematica mod and paste a schematic (or maybe some other methods that can send more than about 50 messages per second)
    5. Client get kicked due to out-of-order chat
  • [Bug] Stuck on encrypting

    [Bug] Stuck on encrypting

    Updated from build velocity-3.1.2-SNAPSHOT-179 to velocity-3.1.2-SNAPSHOT-200,

    Connecting is prompted with Encrypting..., and subsequent 'Timed out'

    Configuration: using proxy protocol

gophertunnel is composed of several packages that may be of use for creating Minecraft related tools
gophertunnel is composed of several packages that may be of use for creating Minecraft related tools

gophertunnel is composed of several packages that may be of use for creating Minecraft related tools. A brief overview of all packages may be found here.

Dec 31, 2022
EDR-Recon scans Windows services, drivers, processes, registry for installed EDRs.
EDR-Recon scans Windows services, drivers, processes, registry for installed EDRs.

EDR-Recon EDR-Recon scans Windows services, drivers, processes, registry for installed EDRs. Install Binary Download the latest release from the relea

Dec 29, 2022
Detect nmap TCP SYN scans (-sS) using gopacket in golang.

Setup Fetch dependencies using apt (PRs welcome for concise instructions for other package managers): sudo apt install libpcap-dev git clone https://

Apr 27, 2022
Log4Shell is a middleware plugin for Traefik which blocks JNDI attacks based on HTTP header values.

Log4Shell Mitigation Log4Shell is a middleware plugin for Traefik which blocks JNDI attacks based on HTTP header values. Related to the Log4J CVE: htt

Dec 20, 2022
Turning a folder into a gallery website to share your videos, songs and images in the local netwrok.

What Carp Web Gallery Turning a folder into a gallery website to share your videos, songs and images in the local netwrok. Browser videos and audios i

Mar 14, 2022
DeepCopy a portable app that allows you to copy all forms of specified file types from your entire file system of the computer

DeepCopy a portable app that allows you to copy all forms of specified file types from your entire file system of the computer

Dec 20, 2021
Generates file.key file for IPFS Private Network.

ipfs-keygen Generates file.key file for IPFS Private Network. Installation go get -u github.com/reixmor/ipfs-keygen/ipfs-keygen Usage ipfs-keygen > ~/

Jan 18, 2022
File Collector is an application that uses HTTP protocol to collect homework and files.
File Collector is an application that uses HTTP protocol to collect homework and files.

File Collector File Collector is an application that uses HTTP protocol to collect homework and files. Usage When filecollector is run, it will automa

Jun 16, 2022
View, edit, and save text files via http to the file system.

go-wiki View, edit, and save text files via http to the file system. (DONE) https://golang.org/doc/articles/wiki/ Instructions go run main.go In a web

Nov 25, 2021
golibwireshark - Package use libwireshark library to decode pcap file and analyse dissection data.

golibwireshark Package golibwireshark use libwireshark library to decode pcap file and analyse dissection data. This package can only be used in OS li

Nov 26, 2022
Simple hosts file management in Golang (deprecated).
Simple hosts file management in Golang (deprecated).

Goodhosts (deprecated) This library is now deprecated. See the goodhosts organisation for the current maintained version. Simple hosts file (/etc/host

Mar 17, 2022
Open Source Continuous File Synchronization
Open Source Continuous File Synchronization

Goals Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers. We strive to fulfill the goals belo

Dec 31, 2022
Fast Static File Analysis Framework
Fast Static File Analysis Framework

Florentino; Fast Static File Analysis Framework Story Florentino is named after a fiction warrior. Flarentino: "I'd wear a fedora but they haven't inv

Nov 9, 2022
Simple, secure and modern Go HTTP server to serve static sites, single-page applications or a file with ease

srv srv is a simple, secure and modern HTTP server, written in Go, to serve static sites, single-page applications or a file with ease. You can use it

Sep 7, 2022
Automatically compress podcasts to tiny file sizes for bandwidth constrained devices like cellular.
Automatically compress podcasts to tiny file sizes for bandwidth constrained devices like cellular.

tinycast Automatically compress podcasts to tiny file sizes for bandwidth constrained connections like cellular or satellite.

Sep 18, 2022
Reverse Proxying + Static File Serving + Let's Encrypt + multiple hosts

Slashing This is a HTTPS server, which aims to replace my personal nginx usages. Currently, it serves Reverse Proxying (e.g. to a Python-Flask,Java,PH

Jul 29, 2021
go implementation of fissions web-native file system

wnfs-go go language implementation of the fission web-native file system, using the typescript implementation as a reference. Development Status: Work

Oct 15, 2022
To Make frp with no arguments and ini file ,which Conveniently in red teaming
To Make frp with no arguments and ini file ,which Conveniently in red teaming

frpBuilder To Make frp with no arguments ,which Conveniently in red teaming I will give a simple modified source code of frp and Builder(MFC C++) in t

Oct 25, 2022
Sep 23, 2022