Fix ClientMovementPredictionSync packet
This commit is contained in:
@@ -48,19 +48,7 @@ func (*ClientMovementPredictionSync) ID() uint32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (pk *ClientMovementPredictionSync) Marshal(io protocol.IO) {
|
func (pk *ClientMovementPredictionSync) Marshal(io protocol.IO) {
|
||||||
var bitsetSize int
|
io.Bitset(&pk.ActorFlags, proto.EntityDataFlagsLength(proto.FetchProtoID(io)))
|
||||||
if proto.IsProtoGTE(io, proto.ID898) {
|
|
||||||
bitsetSize = 127
|
|
||||||
} else if proto.IsProtoGTE(io, proto.ID844) {
|
|
||||||
bitsetSize = 126
|
|
||||||
} else if proto.IsProtoGTE(io, proto.ID818) {
|
|
||||||
bitsetSize = 125
|
|
||||||
} else if proto.IsProtoGTE(io, proto.ID786) {
|
|
||||||
bitsetSize = 123
|
|
||||||
} else {
|
|
||||||
bitsetSize = 120
|
|
||||||
}
|
|
||||||
io.Bitset(&pk.ActorFlags, bitsetSize)
|
|
||||||
io.Float32(&pk.BoundingBoxScale)
|
io.Float32(&pk.BoundingBoxScale)
|
||||||
io.Float32(&pk.BoundingBoxWidth)
|
io.Float32(&pk.BoundingBoxWidth)
|
||||||
io.Float32(&pk.BoundingBoxHeight)
|
io.Float32(&pk.BoundingBoxHeight)
|
||||||
|
|||||||
17
legacyver/proto/entity_metadata.go
Normal file
17
legacyver/proto/entity_metadata.go
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package proto
|
||||||
|
|
||||||
|
func EntityDataFlagsLength(protoID int32) int {
|
||||||
|
if protoID >= ID898 {
|
||||||
|
return 127
|
||||||
|
}
|
||||||
|
if protoID >= ID844 {
|
||||||
|
return 126
|
||||||
|
}
|
||||||
|
if protoID >= ID818 {
|
||||||
|
return 125
|
||||||
|
}
|
||||||
|
if protoID >= ID786 {
|
||||||
|
return 123
|
||||||
|
}
|
||||||
|
return 120
|
||||||
|
}
|
||||||
@@ -702,10 +702,7 @@ func (p *Protocol) downgradePackets(pks []packet.Packet, conn *minecraft.Conn) [
|
|||||||
case *packet.PlayerSkin:
|
case *packet.PlayerSkin:
|
||||||
pk.Skin.GeometryDataEngineVersion = []byte(p.Ver())
|
pk.Skin.GeometryDataEngineVersion = []byte(p.Ver())
|
||||||
case *packet.ClientMovementPredictionSync:
|
case *packet.ClientMovementPredictionSync:
|
||||||
actorFlags := pk.ActorFlags
|
actorFlags := fitBitset(pk.ActorFlags, proto.EntityDataFlagsLength(p.ID()))
|
||||||
if p.ID() < proto.ID786 {
|
|
||||||
actorFlags = fitBitset(actorFlags, 120)
|
|
||||||
}
|
|
||||||
pks[pkIndex] = &legacypacket.ClientMovementPredictionSync{
|
pks[pkIndex] = &legacypacket.ClientMovementPredictionSync{
|
||||||
ActorFlags: actorFlags,
|
ActorFlags: actorFlags,
|
||||||
BoundingBoxScale: pk.BoundingBoxScale,
|
BoundingBoxScale: pk.BoundingBoxScale,
|
||||||
@@ -1308,7 +1305,7 @@ func (p *Protocol) upgradePackets(pks []packet.Packet, conn *minecraft.Conn) []p
|
|||||||
pks[pkIndex] = &packet.UpdateAbilities{AbilityData: pk.AbilityData.ToLatest()}
|
pks[pkIndex] = &packet.UpdateAbilities{AbilityData: pk.AbilityData.ToLatest()}
|
||||||
case *legacypacket.ClientMovementPredictionSync:
|
case *legacypacket.ClientMovementPredictionSync:
|
||||||
pks[pkIndex] = &packet.ClientMovementPredictionSync{
|
pks[pkIndex] = &packet.ClientMovementPredictionSync{
|
||||||
ActorFlags: fitBitset(pk.ActorFlags, protocol.EntityDataFlagCount),
|
ActorFlags: fitBitset(pk.ActorFlags, proto.EntityDataFlagsLength(p.ID())),
|
||||||
BoundingBoxScale: pk.BoundingBoxScale,
|
BoundingBoxScale: pk.BoundingBoxScale,
|
||||||
BoundingBoxWidth: pk.BoundingBoxWidth,
|
BoundingBoxWidth: pk.BoundingBoxWidth,
|
||||||
BoundingBoxHeight: pk.BoundingBoxHeight,
|
BoundingBoxHeight: pk.BoundingBoxHeight,
|
||||||
|
|||||||
Reference in New Issue
Block a user