#Cannot send packets from client to server

8 messages · Page 1 of 1 (latest)

charred robin
#

Hello,

I have been trying to send a packet from the client to the server using

 ClientPlayNetworking.send(
            Hennequince.PLAYER_STATE_PACKET_2_ID,
            PlayerStatePacket().apply { uuid = player; state = newState }.toBuf()
        )

Here is my packet

class PlayerState(
    var skinId: String? = null,
) {
    fun writeNbt(nbt: NbtCompound) {
        nbt.putBoolean("hasSkin", skinId != null);
        if (skinId != null)
            nbt.putString("skinId", skinId)
    }

    fun readNbt(nbt: NbtCompound) {
        if (nbt.getBoolean("hasSkin"))
            skinId = nbt.getString("skinId")
    }

    fun writeBuf(buf: PacketByteBuf): PacketByteBuf {
        var nbt = NbtCompound();
        writeNbt(nbt);

        buf.writeNbt(nbt);
        return buf;
    }

    fun readBuf(buf: PacketByteBuf) {
        val nbt = buf.readNbt() ?: error("unable to read nbt");
        readNbt(nbt)
    }
}

class PlayerStatePacket() {
    lateinit var uuid: UUID;
    lateinit var state: PlayerState;

    fun toBuf(): PacketByteBuf {
        val buf = PacketByteBufs.create();

        buf.writeString(uuid.toString());
        state.writeBuf(buf);
        return buf;
    }

    companion object {
        fun fromBuf(buf: PacketByteBuf): PlayerStatePacket {
            var state = PlayerStatePacket()
            state.uuid = UUID.fromString(buf.readString())
            state.state = PlayerState()
            state.state.readBuf(buf)
            return state
        }
    }
}

On the server side i simply try to register it like this

override fun onInitialize() {
        ServerPlayNetworking.registerGlobalReceiver(Hennequince.PLAYER_STATE_PACKET_2_ID) { server, player, networkHandler, buf, sender -> {
                        // Current code never reaches here
            var state = PlayerStatePacket.fromBuf(buf); 
            if (!player.uuid.equals(state.uuid)) {
                Hennequince.LOGGER.warn("Skipping player state packet as the player ${player.uuid} is trying to mutate a different user that himself")
            } else {
                getServerState(server).players.put(state.uuid, state.state);
                server.playerManager.playerList.filter { !it.uuid.equals(state.uuid) }.forEach {
                    sendPlayersState(it, listOf(player.uuid), server)
                }
            }
        } }
}

but for some reason i cannot get the packet to received by the server.

Thank you in advance for your help 🙏

charred robin
#

1.20.1

#

is there any way i could see if the packet is at least sent from the client? is there debuging for looking at all the packets sent?

queen shoal
charred robin
#

this is killing me .... i can send packets from server to client just fine but it wont go from client to server

charred robin
#

Hey more updates about this

#

this syntax works

        ServerPlayNetworking.registerGlobalReceiver(Hennequince.PLAYER_STATE_PACKET_2_ID, object : ServerPlayNetworking.PlayChannelHandler {
            override fun receive(
                p0: MinecraftServer?,
                p1: ServerPlayerEntity?,
                p2: ServerPlayNetworkHandler?,
                p3: PacketByteBuf?,
                p4: PacketSender?
            ) {
                println("WORKS?")
            }
        })

but not this one

        ServerPlayNetworking.registerGlobalReceiver(Hennequince.PLAYER_STATE_PACKET_2_ID) { server, player, networkHandler, buf, sender -> {
            println("NOT WORKS?")
        } }