hurt() method will call the knockback() method, but it doesnt send ClientboundSetEntityMotionPacket to the victim player's client. This will make the knock back from another entity (which is not LivingEntity, such as Arrow) too small.
Player attacks player causing correct knock back effect because there is a ClientboundSetEntityMotionPacket which is sent after the knockback() is called.