Inheriting from MobMeta caused incorrect metadata offsets for horses, leading to client disconnections when metadata packets were sent. Vanilla horses don't synchronize Owner UUID via metadata, making the previous owner methods non-functional client-side.
Changing inheritance to AgeableMeta also enables baby horse functionality.
The velocity variable is never set in the class construction, resulting in null pointer exception if the getVelocityPacket method try to change it when is called, and the variable is not set before-hand using the setVelocity method.
The default EntityIdProvider would assign entity IDs starting from a fixed number, which caused visibility issues when multiple plugins used the library simultaneously. Since plugins would receive the same IDs, newer entities would overwrite existing ones on the client side, making them disappear.
This new implementation delegates to the server's native ID allocation system, ensuring unique IDs across all plugins.
When adding a new viewer to an already spawned entity it was missing the passengers information. This is especially noticeable when updating the texture properties of a WrapperPlayer (due to the destroy and respawn of the entity).
Returning an empty optional for the entity spawn velocity packets would apply a negative velocity (-1 on all axes) due to PacketEvents implementation. This affects client-side updated entities like fireworks.