Merge branch 'multiplayer_mount_sync' into 'main'

Multiplayer mount sync

Closes #2023

See merge request cable-mc/cobblemon!2315
This commit is contained in:
Polymeta
2026-06-22 12:23:42 +00:00
2 changed files with 10 additions and 0 deletions
+1
View File
@@ -358,6 +358,7 @@
- Fixed fished up Pokémon not being added as "seen" to the Pokedex - Fixed fished up Pokémon not being added as "seen" to the Pokedex
- Fixed surprised Gimmighoul encounters not being added as "seen" to the Pokedex - Fixed surprised Gimmighoul encounters not being added as "seen" to the Pokedex
- Fixed a crash involving berry trees that have been world edited. - Fixed a crash involving berry trees that have been world edited.
- Fixed visual desync in multiplayer for players mounting Pokémon outside other players' loaded chunks
### Developer ### Developer
- Added `PokeSnackSpawnerFactory` which allows influence registration on PokeSnack encounters - Added `PokeSnackSpawnerFactory` which allows influence registration on PokeSnack encounters
@@ -64,6 +64,7 @@ class SpawnPokemonPacket(
var rideStamina: Float, var rideStamina: Float,
var isAlpha: Boolean, var isAlpha: Boolean,
var silent: Boolean, var silent: Boolean,
var riders: List<Int>,
vanillaSpawnPacket: ClientboundAddEntityPacket, vanillaSpawnPacket: ClientboundAddEntityPacket,
) : SpawnExtraDataEntityPacket<SpawnPokemonPacket, PokemonEntity>(vanillaSpawnPacket) { ) : SpawnExtraDataEntityPacket<SpawnPokemonPacket, PokemonEntity>(vanillaSpawnPacket) {
@@ -98,6 +99,7 @@ class SpawnPokemonPacket(
entity.entityData.get(PokemonEntity.RIDE_STAMINA), entity.entityData.get(PokemonEntity.RIDE_STAMINA),
entity.entityData.get(PokemonEntity.IS_ALPHA), entity.entityData.get(PokemonEntity.IS_ALPHA),
entity.isSilent, entity.isSilent,
entity.occupiedSeats.map { entry -> entry.value.id }.toList(),
vanillaSpawnPacket vanillaSpawnPacket
) )
@@ -134,6 +136,7 @@ class SpawnPokemonPacket(
buffer.writeFloat(rideStamina) buffer.writeFloat(rideStamina)
buffer.writeBoolean(isAlpha) buffer.writeBoolean(isAlpha)
buffer.writeBoolean(silent) buffer.writeBoolean(silent)
buffer.writeCollection(this.riders) { pb, value -> pb.writeInt(value) }
} }
override fun applyData(entity: PokemonEntity, level: ClientLevel) { override fun applyData(entity: PokemonEntity, level: ClientLevel) {
@@ -184,6 +187,10 @@ class SpawnPokemonPacket(
entity.tickSpawned = this.tickSpawned entity.tickSpawned = this.tickSpawned
entity.delegate.updateAge(this.tickSpawned) entity.delegate.updateAge(this.tickSpawned)
if (this.riders.isNotEmpty()) {
this.riders.forEach { level.getEntity(it)?.startRiding(entity) }
}
} }
override fun checkType(entity: Entity): Boolean = entity is PokemonEntity override fun checkType(entity: Entity): Boolean = entity is PokemonEntity
@@ -222,6 +229,7 @@ class SpawnPokemonPacket(
val rideStamina = buffer.readFloat() val rideStamina = buffer.readFloat()
val isAlpha = buffer.readBoolean() val isAlpha = buffer.readBoolean()
val silent = buffer.readBoolean() val silent = buffer.readBoolean()
val riders = buffer.readList { it.readInt() }.toList()
val vanillaPacket = decodeVanillaPacket(buffer) val vanillaPacket = decodeVanillaPacket(buffer)
return SpawnPokemonPacket( return SpawnPokemonPacket(
@@ -253,6 +261,7 @@ class SpawnPokemonPacket(
rideStamina, rideStamina,
isAlpha, isAlpha,
silent, silent,
riders,
vanillaPacket vanillaPacket
) )
} }