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 🙏