The ServerPlayNetworking. canSend() of the Fabric API may not work in some cases
Crystal0404 opened this issue · 11 comments
Version
Minecraft 1.20.4
Fabric Loader 0.15.6
Fabric API 0.95.0+1.20.4
Methods for reproducing errors
This is the code, For the convenience of comparison, I used Fallen_Breath's template
/*
* fabric_api_version=0.91.0+1.20.1
* fabric_api_version=0.95.0+1.20.4
*/
package me.fallenbreath.template_mod;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayNetworkHandler;
import net.minecraft.util.Identifier;
public class network implements ServerPlayConnectionEvents.Join{
public static final Identifier HELLO = new Identifier(TemplateMod.MOD_ID, "hello");
public static void regS2C(){
ClientPlayNetworking.registerGlobalReceiver(HELLO, (
MinecraftClient,
ClientPlayNetworking,
PacketByteBuf,
PacketSender
) -> {
TemplateMod.LOGGER.warn("hello world");
});
}
@Override
public void onPlayReady(ServerPlayNetworkHandler handler, PacketSender sender, MinecraftServer server) {
TemplateMod.LOGGER.warn(ServerPlayNetworking.canSend(handler.player, HELLO));
ServerPlayNetworking.send(handler.player, HELLO, PacketByteBufs.create());
}
}
This is a partial log output from the 1.20.4 server
[20:12:31] [Server thread/INFO] (Minecraft) Player479[/127.0.0.1:59519] logged in with entity id 190 at (127.5, 63.0, -297.5)
[20:12:31] [Server thread/WARN] (TemplateMod) false
[20:12:31] [Server thread/INFO] (Minecraft) Player479 joined the game
[20:12:39] [Server thread/INFO] (Minecraft) Player479 lost connection: Disconnected
[20:12:39] [Server thread/INFO] (Minecraft) Player479 left the game
This is a partial log output from the 1.20.4 client
[20:12:24] [IO-Worker-1/INFO] (Minecraft) Could not authorize you against Realms server: Invalid session id
[20:12:31] [Render thread/INFO] (Minecraft) Connecting to localhost, 25565
[20:12:31] [Netty Client IO #1/WARN] (TemplateMod) hello world
The client successfully received the packet sent by the server, but returned false, But version 1.20.1 has no errors
This is a partial log output from the 1.20.1 server
[20:26:24] [Server thread/INFO] (Minecraft) Player481[/127.0.0.1:59717] logged in with entity id 192 at (120.5, 65.0, -303.5)
true
[20:26:24] [Server thread/INFO] (Minecraft) Player481 joined the game
[20:26:28] [Server thread/INFO] (Minecraft) Player481 lost connection: Disconnected
[20:26:28] [Server thread/INFO] (Minecraft) Player481 left the game
This is a partial log output from the 1.20.1 client
[20:26:19] [Render thread/INFO] (Minecraft) Created: 128x128x0 minecraft:textures/atlas/mob_effects.png-atlas
[20:26:23] [Render thread/INFO] (Minecraft) Connecting to localhost, 25565
[20:26:24] [Netty Client IO #1/WARN] (TemplateMod) hello world
[20:26:25] [Render thread/INFO] (Minecraft) Loaded 2 advancements
The Boolean values here are output using System. out. println(), as there is a slight error in the log output of the 1.20.1 example code
The attachment size exceeds the limit, so I created a project to store it(The attachment is a template for running the code above me)
你能打开调试日志记录并发送结果吗?
debug.log
Is this the file? If not, please tell me how to do it. I am not a professional programmer: P
I also noticed that in 1.20.1, if forwarded through Velocity, a successful packet transmission will also appear, but false will be returned.
你能打开调试日志记录并发送结果吗?
debug.log
This is the client's log
@Crystal0404 I couldn't find "(TemplateMod) false" in the server log. Hmm.
libs.zip
This is the jar I built, and its function is to print the return value of ServerPlayNetworking.canSend()
on the server. And printing hello world on the client after receiving the data packet may be helpful for you ,When the player enters the server, it will trigger
@Crystal0404 I couldn't find "(TemplateMod) false" in the server log. Hmm.
debug.log
When outputting to the log at 1.20.1, it crashes, so I used System.out.println();
to output it. However, 1.20.4 does not crash, so I printed it into the log(line 1138)
It appears that ClientConfigurationNetworkAddon
didn't receive any packets including the c:register
packet, this is wrong.
It appears that
ClientConfigurationNetworkAddon
didn't receive any packets including thec:register
packet, this is wrong.
Sdebug.log
Cdebug.log
There is another possible related issue. ServerPlayNetworking. canSend()
at 1.20.1 was originally working properly, but when connected to the server through Velocity, it encountered the same error as ServerPlayNetworking. canSend()
at 1.20.4