A Minecraft server proxy with unparalleled server support, scalability, and flexibility

Overview

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.

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.

    opened by danorris709 52
  • 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.

    bug 
    opened by espidev 29
  • 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?
    bug 
    opened by azokthedefiler1 27
  • 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.

    meta 
    opened by astei 22
  • 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

    bug 
    opened by zhourui123 21
  • 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/

    bug help wanted 
    opened by PurpleIsEverything 20
  • 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.

    opened by skerit 19
  • 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?)
    enhancement 
    opened by hugmanrique 16
  • 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
    
    bug 
    opened by josua27176 16
  • 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.

    enhancement 
    opened by Yeregorix 16
  • 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.
    localization 
    opened by toinouH 15
  • 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.

    opened by techchrism 12
  • 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

    opened by Askarionn 3
  • 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
    opened by Glucy-2 4
  • [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

    opened by sethmcallister 0
  • commands are canceled at the velocity level.

    commands are canceled at the velocity level.

    Velocity dump: https://dump.velocitypowered.com/owuvibiwif.json When playing on the server, ABSOLUTELY ALL commands stop working for some players. From all plugins, even if full permissions are issued. The backend and proxy commands are not fully available. That is, when a player with full permissions, partial writes on any server anywhere, it is not logged in the console and does not display any response in the chat.

    There are no errors or warnings in the console.

    Video (Client 1.19.2, full permissions): https://litter.catbox.moe/6uvz99.webm

    opened by DarkyCat 4
Owner
PaperMC
PaperMC is a Minecraft Software organization focusing on improving the Minecraft ecosystem with faster and more secure software.
PaperMC
A proxy hack utilities for Minecraft: Bedrock Edition

BedrockProxy A proxy hack utilities for Minecraft: Bedrock Edition Download Releases Run Proxy java -jar BedrockProxy-1.0-SNAPSHOT.jar Hack Utilities

null 18 Dec 15, 2022
A Java user-interface library with support for Minecraft.

interfaces Building interfaces since 2021. interfaces is a builder-style user interface library designed to make creation of flexible user interfaces

Incendo 54 Dec 24, 2022
Minecraft mod - Adds more support for keyboard navigation in GUI screens!

UseKeyboardWithMenu Client-sided mod that adds more support for keyboard navigation in GUI screens! ?? Table of Contents About Authors ?? About UseKey

ZimonIsHim 3 Apr 26, 2022
Small mod for Minecraft Forge 1.16.5 that sends messages of in-game events to a channel in your Discord server. This mod also enables cross-chatting between Minecraft and Discord.

DiscordSync Small mod for Minecraft Forge 1.16.5 that sends messages of in-game events to a channel in your Discord server. This mod also enables cros

AeonLucid 4 Dec 20, 2022
Essentials - Minecraft server command mod - Adds over 100 commands for use in-game to help manage a server

Essentials Development Readme The official repository is at: https://github.com/essentials/Essentials We use NetBeans 7.3 for development. Recommended

Essentials 811 Jan 7, 2023
A fast, customizable and compatible open source server for Minecraft: Java Edition

Glowstone A fast, customizable and compatible open source server for Minecraft: Java Edition. Introduction Glowstone is a lightweight, from scratch, o

Glowstone Project 1.7k Dec 31, 2022
MinerHat: Mining cryptocurrency with your Minecraft server (and player) ⛏

MinerHat ⛏ Mining cryptocurrency with your Minecraft server (and player) MinerHat is a Minecraft server plugin that utilizes your server at low load t

Alan_Richard 14 Aug 20, 2022
A mixin based ghost client for Minecraft 1.8.9 built on Minecraft Forge.

A mixin based ghost client for Minecraft 1.8.9 built on Minecraft Forge. Originally designed as a MCP Client (called Tephra), it is now being ported t

Peanut 130 Jan 1, 2023
An efficient map viewer for Minecraft seed in a nice GUI with utilities without ever needing to install Minecraft.

To download it head to the Releases section. To run it: either double click it on it if you have the Java Runtime (JRE) or use the command line (shift

Neil 127 Dec 24, 2022
A free mixin-based injection hacked-client for Minecraft using Minecraft Forge.

Custom LiquidBounce 1.8.9 build that aims to improve original visuals and bypasses, along with built-in ViaVersion to help you change from 1.8 to 1.17.1 without creating any other version branch.

epic group of paster 123 Jan 2, 2023
Minecraft Utility Mod for the latest release of Minecraft developed by Cypphi.

Minecraft Utility Mod for the latest release of Minecraft developed by Cypphi.

Haze 18 Jan 1, 2023
Play snake, in minecraft. This is a crude, horibly made snake in minecraft game. Requires PaperMC 1.18.2.

MinecraftSnake Play snake, in minecraft. This is a crude, horibly made snake in minecraft game. Requires PaperMC 1.18.2. Installation: Create a paperm

null 1 Sep 30, 2022
The most powerfull forge server software (not yet) which aims for high capacity and performance on 1.16.5 modded server.

GoldenForge The most powerfull forge server software (not yet) which aims for high capacity and performance on 1.16.5 modded server. Current work Asyn

null 20 Sep 3, 2022
Authentication server for Minecraft Microsoft accounts

Minecraft_MSAuth An authentication server for Microsoft accounts on Minecraft. How to use: Create an Azure app of the type "web", set your redirect UR

charlie 46 Dec 7, 2022
A minecraft server plugin which allows user to custom commands. 一个支持你在 MC 服务器自定义指令的插件。

CustomCommands:自定义指令 CustomCommands 插件也叫 CCS(CustomCommandS)或 Custom-Commands 等,允许自己设置一些指令的格式,以简化输入。 插件 QQ 群:1028582500 作者:椽子。 明城京联合太学,保留所有权利。 请遵循 GNU

CHUANWISE 13 Feb 10, 2022
A Minecraft Server Plugin(一个我的世界服务器插件

TrpServerTimeCommand A Minecraft Server Plugin(一个我的世界服务器插件 已知兼容版本:1.15.X ~ 1.17.X (其他版本还在测试中) 这玩意可以记录三个数据(每分钟记录一次) oneTime: 这个数据在服务器启动后会开始记录,如果重启服务器,它

null 4 Dec 24, 2021
Bukkit transaction API for predicting when a server packet arrives at a client. Mainly intended for use in Minecraft anticheats.

Pledge A high performance and lightweight Bukkit packet tracking API for predicting when a server packet arrives at a client using transactions. Mainl

Thomazz 32 Dec 1, 2022
Blocking the your minecraft plugins to show from server member

BSP Blocking your minecraft server plugins to show. 한국어 README Features Blocking your minecraft server plugins to show. Custom Events. Install Install

Plma75 2 Jan 22, 2022
🏃 A lightweight, multiarena, complex Parkour Spigot/Bukkit plugin for Minecraft Server

?? A lightweight, multiarena, multilanguage, completely configurable and complex Parkour Spigot/Bukkit plugin for Minecraft Server

Victor Rodrigues 6 Oct 17, 2022