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

  • Автор темы Автор темы Deawilld
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Deawilld

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

Если все таки нужен HashMap то: <String, ?> - String имя игрока, ? доп параметр.
 
Надо некоторые данные онлайн игрока сохранять для использования, скажем, в следующей команде от этого же игрока. Полагаю, что для этого проще всего использовать HashMap, но какой тип лучше всего использовать для ключа? Вариантов несколько: Player, OfflinePlayer, CommandSender, String, UUID. Видел на форуме, что не рекомендуют использовать Player для хранения информации, т.к. он нестабилен. Так вот что будет самым оптимальным и простым вариантом? Может вообще получать игрока по имени или UUID? Так же необходимо учесть, что при выходе игрока эти данные желательно очистить, чтобы не занимать память. Как это обычно делается?
Если очищаешь при выходе, то имеет смысл использовать объект игрока (Player). Ибо как раз при выходе игрока он становится не актуальным, возможно по этому и не рекомендуют.
 
Если очищаешь при выходе, то имеет смысл использовать объект игрока (Player). Ибо как раз при выходе игрока он становится не актуальным, возможно по этому и не рекомендуют.
Главное чтобы он не менялся во время игры. Просто я так понял, что он в любой момент может стать неактуальным и замениться на другой объект с другой ссылкой и ещё утянет за собой кучу других ссылок, которые занимают память. Но как на самом деле я не знаю, поэтому и спросил.
 
Храни в бд. (Зависит от онлайна)

Если все таки нужен HashMap то: <String, ?> - String имя игрока, ? доп параметр.
А если я отношусь к тому меньшинству, которое не использует бд, и HashMap - проще. Но имя удобнее всего использовать?
 
Главное чтобы он не менялся во время игры. Просто я так понял, что он в любой момент может стать неактуальным и замениться на другой объект с другой ссылкой и ещё утянет за собой кучу других ссылок, которые занимают память. Но как на самом деле я не знаю, поэтому и спросил.
Ничего подобного.
Этот объект не может стать просто так неактуальным. Я имел ввиду, что если ты запишешь ссылку этого игрока и он перезайдет, ядро удалит в своих коллекциях эту ссылку, она останется только у тебя. При входе создастся новый экземпляр Player по этой то причине, по старой ссылке ты мало что сможешь сделать, но это не значит что ты потеряешь к ней доступ..
 
Не пишите ерунды. Пока игрок онлайн - объект Player стабилен. И такая ситуация как минимум с 1.8, но скорее всего гораздо раньше.
В качестве ключа стоит использовать именно Player, дабы не городить костыли для получения этого объекта по нику или uuid.

Главное не забывать удалять из мапы запись, когда игрок выходит.
Причём это относится вообще ко всем видам ключей - пускай это даже и ник, uuid или что-либо ещё.
 
Последнее редактирование:
Ничего подобного.
Этот объект не может стать просто так неактуальным. Я имел ввиду, что если ты запишешь ссылку этого игрока и он перезайдет, ядро удалит в своих коллекциях эту ссылку, она останется только у тебя. При входе создастся новый экземпляр Player по этой то причине, по старой ссылке ты мало что сможешь сделать, но это не значит что ты потеряешь к ней доступ..
Не пишите ерунды. Пока игрок онлайн - объект Player стабилен. И такая ситуация как минимум с 1.8, но скорее всего гораздо раньше.
В качестве ключа стоит использовать именно Player, дабы не городить костыли для получения этого объекта по нику или uuid.

Главное не забывать удалять из мапы запись, когда игрок выходит.
Причём это относится вообще ко всем видам ключей - пускай это даже и ник, uuid или что-либо ещё.
Спасибо!
 
Не пишите ерунды. Пока игрок онлайн - объект Player стабилен. И такая ситуация как минимум с 1.8, но скорее всего гораздо раньше.
В качестве ключа стоит использовать именно Player, дабы не городить костыли для получения этого объекта по нику или uuid.

Главное не забывать удалять из мапы запись, когда игрок выходит.
Причём это относится вообще ко всем видам ключей - пускай это даже и ник, uuid или что-либо ещё.
Конечно. Проще же хранить экземпляр класса Player чем обычную строку.
А если я отношусь к тому меньшинству, которое не использует бд, и HashMap - проще. Но имя удобнее всего использовать?
Да. Делай просто систему сессий.
 
Конечно. Проще же хранить экземпляр класса Player чем обычную строку.
Это сарказм или что? Да, Player хранить проще, чем строку, потому что потом не надо будет получать игрока по имени. Да и в целом это логично - использовать объект API.
 
Конечно. Проще же хранить экземпляр класса Player чем обычную строку.
Что значит хранить экземпляр класса? Он в любом случае хранится в памяти, если игрок онлайн. А в hashmap будет храниться только ссылка на него.
 
Что значит хранить экземпляр класса? Он в любом случае хранится в памяти, если игрок онлайн. А в hashmap будет храниться только ссылка на него.
Это вроде очевидно, тут можно и так сказать. Не придирайся к словам
 
Это сарказм или что? Да, Player хранить проще, чем строку, потому что потом не надо будет получать игрока по имени. Да и в целом это логично - использовать объект API.
Логично это не тратить память.
Что значит хранить экземпляр класса? Он в любом случае хранится в памяти, если игрок онлайн. А в hashmap будет храниться только ссылка на него.
Угу. Только вот перейдя по этой ссылке ты увидишь экземпляр Player который весит намного больше чем строка.
 
Логично это не тратить память.

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