PaperMC / PaperMC/Velocity

Packets immediately following JoinGame can be dropped during backend transition (26.2 clock desync)

Open
#1,873 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

type: bug
Dominant language
Java
Stars
2.3k
Forks
959
Avg merge
5d 10h
Merged PRs (30d)
2

Description

Expected Behavior

Packets sent by a backend immediately after JoinGame should be delivered to the client in their original order once the backend transition is complete.

On Minecraft 26.2, when the target world's default clock is paused at a non-zero time, the client should display that configured time and keep it paused.

Actual Behavior

When connecting through Velocity to a backend whose default world clock is paused, the client displays the world as if the clock had been initialized with totalTicks = 0 and rate = 1.

The sky starts around time 0 and continues advancing instead of remaining at the server's paused time. The server-side clock itself remains paused.

This also happens when the affected backend is the player's initial server. Switching from another backend is not required.

Connecting directly to the same backend does not show the problem.

No exception or protocol error is logged by Velocity.

Steps to Reproduce
  1. Start Velocity 4.1.1 build 24 with a Minecraft 26.2 Paper backend.
  2. Join the target world and run:
    /time set 6000
    /time pause
  3. Disconnect.
  4. Connect to that backend through Velocity, with it configured as the player's initial server.
  5. Observe that the client-side sky starts around time 0 and advances instead of remaining fixed at 6000.
  6. Connect directly to the same backend and observe that the time is correctly displayed and remains paused.

The same behavior can also be observed when switching from another backend into the paused backend.

Plugin List
Velocity

velocity, packetevents, antipopup, carbkotlin, commandwhitelist, slimemasternext, cubozoa, logfilter, luckperms, maintenance, velocity-scoreboard-api, tab, multiauth, oneversionremake, serverutils, spark

Backend

[02:09:43] [Server thread/INFO]: ℹ Server Plugins (35):
[02:09:43] [Server thread/INFO]: Paper Plugins (4):
[02:09:43] [Server thread/INFO]: - CraftEngine, PlugManX, PurpurBars, WhaleMechanism
[02:09:43] [Server thread/INFO]: Bukkit Plugins (31):
[02:09:43] [Server thread/INFO]: - Adapt, AxiomPaper, CarbKotlin, CommandWhitelist, CustomCrops, CustomFishing, CustomNameplates, DecentHolograms, DolphinSync, Hault
[02:09:43] [Server thread/INFO]: ItemEdit, LobbyGames, LuckPerms, Multiverse-Core, NBTAPI, Opossum, OrangDomain, packetevents, Pipes, PlaceholderAPI
[02:09:43] [Server thread/INFO]: ProtocolLib, Raven, RealisticSeasons, SharkChest, SlimeCargoNext, Spectator, TAB-Bridge, Tardigrade, VoidGen, WorldEdit
[02:09:43] [Server thread/INFO]: WorldEditSUI

Velocity Version

[02:11:36 INFO]: Velocity 4.1.1
[02:11:36 INFO]: Copyright 2018-2021 Velocity Contributors。Velocity 以 GNU 通用公共许可证第三版授权。
[02:11:36 INFO]: PaperMC - GitHub

Additional Information

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing how Velocity forwards packets immediately after JoinGame during an initial connection or backend switch, focusing on the ordering of world-clock initialization packets. Reproduce the issue using the listed Minecraft 26.2, Paper, and paused-clock steps, then compare proxied and direct connections. Done means the client receives the configured paused time in order and the behavior is covered by verification for both initial connections and backend switches.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.