1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

обычный uuid и online uuid: какой лучше использовать

Тема в разделе "Оффтопик", создана пользователем Yourbreath, 10 янв 2023.

  1. Автор темы
    Yourbreath

    Yourbreath Активный участник Пользователь

    Баллы:
    61
    Всем привет, расскажу по порядку.

    Недавно я решил написать один плагин, функционал которого в контексте этого вопроса не важен. Позволю себе лишь оговорится о том, что прогресс игроков хранился под их uuid'ми (далее - уиды).

    И каково же было мое удивление, когда я начал получать разные уровни прокачки системы моего плагина на одном и том же персонаже. Начав разбираться в этом я понял, что мой персонаж имеет два разных уида. Сначала меня заинтересовал вопрос: "а это, собсна, как? это должен быть уникальный идентификатор для каждого игрока и на него должно быть можно положиться", но, опять же, копнув глубже я выяснил, что уиды есть обычные (буду называть их офлайн уиды для моего удобства) и онлайн уиды, а еще что они отличаются. Как я понял, онлайн уиды - это такие уиды, которые привязаны к майнкрафтовской учетке и, соответственно, более актуальны для сервер с онлайн модом. Для нас же, обычных снг работяг, существует оффлайн мод, с его оффлайн уидами, которые генирируются по никнейму и к нему же привязываются какой-то общей системой.

    И вот, есть у меня на сервере плагин для авторизации - JPremium. Он позволяет игроку сидеть под пираткой и под лицензией (если она куплена). Причем он (плагин) позволяет менять лицензию на пиратку (и наоборот) "на лету", одной командой. Соответственно, уиды так же меняются.

    Из-за этого моя система в плагине терпит крах: один и тот же игрок может иметь два разных уида и я больше не могу идентифицировать этого игрока. Проблемы бы не было, если бы мне нужно было работать только с онлайн игроками, но, к сожалению, мне часто нужно получать уид игрока по его никнейму когда его нет на сервере, из-за чего мне возвращается оффлайн уид (который может отличаться от онлайновского).

    Назрел вопрос: что с этой байдой я могу поделать?
    Хранить два уида и при поиске игрока в бд доставать его объект по соответствию обоих уидов?
    Или проще (как мне кажется, может это и не так): всегда использовать именно оффлайн вариант уида, даже если я работаю с онлайн игроком (получать его оффлайн версию через Bukkit#getOfflinePlayerIfCached) ?

    Направьте на путь истинный, братья и сестры.
    Проясните мне некоторые моменты, в которых я могу быть не прав.
    Какой вариант лучше использовать?
     
  2. Автор темы
    Yourbreath

    Yourbreath Активный участник Пользователь

    Баллы:
    61
    @alexandrage
    @Dymeth
    @imDaniX
    часто вижу вас в ответах на технического рода вопросы, помогите, парни, пожалуйста
     
  3. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Сам по себе UUID не меняется с оффлайнового на онлайновый, это происходит только после переключения с пиратского аккаунта на лицензионный на уровне авторизации твоего сервера (JPremium).
    Как только игрок перешел с одного режима на другой - у него действительно меняется UUID, из-за чего теряются все внутриигровые данные. Не только в твоём плагине, а вообще во всех. Теряются даже ванильные данные - содержимое инвентаря, позиция в мире и так далее.

    Так что это косяк именно авторизации, а не твоего плагина. В своих плагинах использовать нужно именно тот UUID, с которым играет игрок. И неважно, онлайновый он, оффлайновый или вовсе кастомный.
    Если UUID заранее неизвестен, то необходимо искать его в базе зарегистрированных игроков по нику. Но учти, что может быть несколько игроков с одинаковым ником, но разными UUID.

    Касаемо косяка авторизации - конкретно в JPremium есть какое-то решение этой проблемы. То ли своя собственная система UUID, то ли для лицензионных игроков можно включить использование offline-mode UUID.
    В любом случае, проблему с исчезновением данных надо исправлять в авторизации, а не где-либо ещё. Вполне возможно, что нормального решения ты не найдёшь, и тогда придётся либо смириться с потерей данных, либо вовсе отключить возможность переключать режим с оффлайн на онлайн (и обратно).
    Все-таки майн под это не заточен.

    В своём плагине авторизации я использую собственную систему UUID - для каждого игрока генерируется собственный UUID случайным образом. И даже после подключения входа по лицензии UUID остаётся прежним, что гарантирует сохранность всех данных. Возможно в JPermium как раз есть что-то подобное
     
    Последнее редактирование: 10 янв 2023
  4. Автор темы
    Yourbreath

    Yourbreath Активный участник Пользователь

    Баллы:
    61
    Я попробую в ближайшее время протестировать кое-какую настройку JPremium. Возможно, проблема решится. Как проверю - отпишусь. Спасибо за развернутый ответ!
     
  5. Автор темы
    Yourbreath

    Yourbreath Активный участник Пользователь

    Баллы:
    61
    В JPremium действительно есть настррйка, которая позволяет выбирать, какой UUID будет ичпользовать игрок. Пока, вроде, проблема решена. Спасибо
     

Поделиться этой страницей