NEZNAMY / TAB

"That" TAB plugin.
Apache License 2.0
877 stars 247 forks source link

The "Network Protocol Error" problem still present on ReplayMod #1341

Closed SundayMC closed 7 hours ago

SundayMC commented 1 month ago

TAB version

4.1.6

Software causing compatibility issue

ReplayMod 1.20.6-2.6.18

Additional info

The kick bug for “Network Protocol Error” that had been patched for clients in 4.1.6, however affect replaymod files (you get instantly kicked from the replay for the same scoreboard issue).

As a result, all replays recorded on servers with TAB in 1.20.6+ are corrupted...

Checklist

NEZNAMY commented 1 month ago

How is this a TAB issue? What does the mod do? Replicate all packets? Does that include scoreboards? If yes, double registering will obviously cause this (one from TAB and one from replay mod). What error was shown in the client?

SundayMC commented 1 month ago

From what I've seen here, it does seem that ReplayMod works by listening/retranscribing all packets (but I'm not sure).

However, from what I could quickly see, ReplayMod doesn't seem to add a second recording layer for scoreboards (so there's not necessarily redundancy).

And finally, here's the error returned in the client console:

[Render thread/ERROR]: Failed to handle packet net.minecraft.class_2751@6e081c48
java.lang.IllegalArgumentException: An objective with the name 'TAB-BelowName' already exists!
    at net.minecraft.class_269.method_1168(class_269.java:51) ~[client-intermediary.jar:?]
    at net.minecraft.class_634.method_11144(class_634.java:1943) ~[client-intermediary.jar:?]
    at net.minecraft.class_2751.method_11838(class_2751.java:71) ~[client-intermediary.jar:?]
    at net.minecraft.class_2751.method_11054(class_2751.java:17) ~[client-intermediary.jar:?]
    at net.minecraft.class_2600.method_11072(class_2600.java:25) ~[client-intermediary.jar:?]
    at net.minecraft.class_1255.method_18859(class_1255.java:162) [client-intermediary.jar:?]
    at net.minecraft.class_4093.method_18859(class_4093.java:23) [client-intermediary.jar:?]
    at net.minecraft.class_1255.method_16075(class_1255.java:136) [client-intermediary.jar:?]
    at net.minecraft.class_1255.method_5383(class_1255.java:121) [client-intermediary.jar:?]
    at net.minecraft.class_310.method_1523(class_310.java:1275) [client-intermediary.jar:?]
    at net.minecraft.class_310.method_1514(class_310.java:888) [client-intermediary.jar:?]
    at net.minecraft.client.main.Main.main(Main.java:265) [client-intermediary.jar:?]
    at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470) [fabric-loader-0.15.11.jar:?]
    at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) [fabric-loader-0.15.11.jar:?]
    at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) [fabric-loader-0.15.11.jar:?]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?]
    at java.base/java.lang.reflect.Method.invoke(Method.java:586) ~[?:?]
    at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:243) [NewLaunch.jar:?]
    at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:278) [NewLaunch.jar:?]
    at org.multimc.EntryPoint.listen(EntryPoint.java:143) [NewLaunch.jar:?]
    at org.multimc.EntryPoint.main(EntryPoint.java:34) [NewLaunch.jar:?]
NEZNAMY commented 1 month ago

The fastest solution would be to ask the developer if the mod resends scoreboard packets as well, because if it does, it makes sense you ran into this issue. TAB has several layers of checks to make sure this does not happen on its own, which you also confirmed by saying it only happens when adding the mod.

SundayMC commented 1 month ago

Okok, I'll try to do that ;)

NEZNAMY commented 3 weeks ago

Any news @SundayMC ?

NEZNAMY commented 2 weeks ago

@SundayMC if you do not respond, issue will be closed as caused by another plugin.

LindaJuffermans commented 1 week ago

Hi, I'm one of the staff members of ReplayMod support.

ReplayMod records the network packets that the client receives from the Minecraft server and stores those in the recording. When the recording is being replayed, a virtual server is created that sends the packets to the client and lets the Minecraft client handle them.

If the client received scoreboard packets, they are also stored and then resent to the client on playback.

I hope this helps.

NEZNAMY commented 1 week ago

Then the answer is clear. Replay mod has sent scoreboard packets while player still had TAB's packets active, causing double register. There is absolutely no kind of malfunction on TAB's end.

LindaJuffermans commented 1 week ago

Can you clarify what you mean with "has TAB's packets active"? Why are they active, shouldn't they be processed the same way they were originally processed at recording time?

NEZNAMY commented 1 week ago

Does player's scoreboard view get reset when replay starts? If not, there are still objectives registered from before and registering them again will result in this. Alternatively try it with other scoreboard plugins and see if you get the same result.

NEZNAMY commented 2 days ago

Any news @LindaJuffermans ?

LindaJuffermans commented 7 hours ago

Yes, our developer has found the problem in the ReplayMod code which is used to cut recordings into smaller snippets. Should be an updated release out this week.

NEZNAMY commented 7 hours ago

So can this issue be closed as caused by another software?