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

Помогите Выбираем класс для отслеживания сессии

Тема в разделе "Разработка плагинов для новичков", создана пользователем Deawilld, 8 сен 2019.

Статус темы:
Закрыта.
  1. Автор темы
    Deawilld

    Deawilld Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Deawilld
    Надо некоторые данные онлайн игрока сохранять для использования, скажем, в следующей команде от этого же игрока. Полагаю, что для этого проще всего использовать HashMap, но какой тип лучше всего использовать для ключа? Вариантов несколько: Player, OfflinePlayer, CommandSender, String, UUID. Видел на форуме, что не рекомендуют использовать Player для хранения информации, т.к. он нестабилен. Так вот что будет самым оптимальным и простым вариантом? Может вообще получать игрока по имени или UUID? Так же необходимо учесть, что при выходе игрока эти данные желательно очистить, чтобы не занимать память. Как это обычно делается?
     
  2. Nikolai_Faint

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

    Баллы:
    96
    Храни в бд. (Зависит от онлайна)

    Если все таки нужен HashMap то: <String, ?> - String имя игрока, ? доп параметр.
     
  3. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    UUID подойдет или ник.
     
  4. MurlikMurlik

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

    Баллы:
    96
    Если очищаешь при выходе, то имеет смысл использовать объект игрока (Player). Ибо как раз при выходе игрока он становится не актуальным, возможно по этому и не рекомендуют.
     
  5. Автор темы
    Deawilld

    Deawilld Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Deawilld
    Главное чтобы он не менялся во время игры. Просто я так понял, что он в любой момент может стать неактуальным и замениться на другой объект с другой ссылкой и ещё утянет за собой кучу других ссылок, которые занимают память. Но как на самом деле я не знаю, поэтому и спросил.
     
  6. Автор темы
    Deawilld

    Deawilld Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Deawilld
    А если я отношусь к тому меньшинству, которое не использует бд, и HashMap - проще. Но имя удобнее всего использовать?
     
  7. Автор темы
    Deawilld

    Deawilld Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Deawilld
    Спасибо
     
  8. Автор темы
    Deawilld

    Deawilld Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Deawilld
    А для пиратки всё же лучше UUID или ник? Или для кратковременного хранения разницы нет?
     
  9. MurlikMurlik

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

    Баллы:
    96
    Ничего подобного.
    Этот объект не может стать просто так неактуальным. Я имел ввиду, что если ты запишешь ссылку этого игрока и он перезайдет, ядро удалит в своих коллекциях эту ссылку, она останется только у тебя. При входе создастся новый экземпляр Player по этой то причине, по старой ссылке ты мало что сможешь сделать, но это не значит что ты потеряешь к ней доступ..
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Там неважно.
     
  11. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Не пишите ерунды. Пока игрок онлайн - объект Player стабилен. И такая ситуация как минимум с 1.8, но скорее всего гораздо раньше.
    В качестве ключа стоит использовать именно Player, дабы не городить костыли для получения этого объекта по нику или uuid.

    Главное не забывать удалять из мапы запись, когда игрок выходит.
    Причём это относится вообще ко всем видам ключей - пускай это даже и ник, uuid или что-либо ещё.
     
    Последнее редактирование: 9 сен 2019
  12. Автор темы
    Deawilld

    Deawilld Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Deawilld
    Спасибо!
     
  13. Nikolai_Faint

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

    Баллы:
    96
    Конечно. Проще же хранить экземпляр класса Player чем обычную строку.
    Да. Делай просто систему сессий.
     
  14. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Это сарказм или что? Да, Player хранить проще, чем строку, потому что потом не надо будет получать игрока по имени. Да и в целом это логично - использовать объект API.
     
  15. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Что значит хранить экземпляр класса? Он в любом случае хранится в памяти, если игрок онлайн. А в hashmap будет храниться только ссылка на него.
     
  16. Автор темы
    Deawilld

    Deawilld Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Deawilld
    Это вроде очевидно, тут можно и так сказать. Не придирайся к словам
     
  17. Nikolai_Faint

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

    Баллы:
    96
    Логично это не тратить память.
    Угу. Только вот перейдя по этой ссылке ты увидишь экземпляр Player который весит намного больше чем строка.
     
  18. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    У тебя в любом случае в памяти лежит экземпляр плеера. В мапе содержится лишь ссылка на него.
    В каком месте тут экономия памяти сможешь обьяснить?
     
  19. Nikolai_Faint

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

    Баллы:
    96
    В том что по новой ссылке будет хранится лишь строка, а не билд огромного экземпляра.
     
  20. Автор темы
    Deawilld

    Deawilld Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Deawilld
    Player и ссылка на него будет храниться в любом случае на сервере независимо от того, используешь ты её или нет. А чтобы память не тратить зря, нужно всего лишь удалять ссылку из своих структур данных при выходе игрока. Тут я бы сказал вообще нет разницы в плане памяти, какую ссылку хранить. Ибо ссылка на строку с именем игрока будет указывать на тот же объект, на который она указывает в объекте класса Player, OfflinePlayer и других.
     
Статус темы:
Закрыта.

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