Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Прицепить к Player данные (рантайм)

saharNooby

Активный участник
Девелопер
Пользователь
Баллы
78
Имя в Minecraft
saharNooby
Вот нужно с каждым игроком Player ассоциировать какой-то объект, пусть PlayerData. По-идее, делаем так:
Код:
class PlayerDatas {
    public static final Map<Player, PlayerData> = new ...
}
Но что-то я не хочу. Можно ли как-то прицепить непосредственно к Player что-нибудь своё?
Сижу такой, смотрю src ChestCommands. Перед ними стояла задача -- проверить, открыл ли игрок созданный инвентарь. Я, как элитный кодер, сделал бы лист List<Player> игроков, открывших инвентарь. Оказалось, что разрабы поступили иначе: они сделали наследника от Inventory, и суют для открытия наследника, а не Inventory. И проверка -- простой instanceof. Гораздо красивей. Может, и в моём случае можно как-то по-другому?
 
Аж слезу смахнул, именно то, о чём я мечтал, спасибки. :oops:
 
Метадата не очищается при выходе игрока, так что удялять придётся вручную, не забывай это.
(А всё из-за того что метадата - тупо хэшмап)
 
Метадата не очищается при выходе игрока, так что удялять придётся вручную, не забывай это.
(А всё из-за того что метадата - тупо хэшмап)
Тем лучше. Просто в плагине нужна работа с выделениями, топориками и регионами, а так как этой работы там немного, юзать целый WE не нужно, и приходится реализовывать самому. В метадате же сохраняю поставленные топориком точки.
 
Метадата не очищается при выходе игрока, так что удялять придётся вручную, не забывай это.
(А всё из-за того что метадата - тупо хэшмап)
А при рестарте сервера?
Или метадата хранится в .dat файле игрока?
 
А при рестарте сервера?
Или метадата хранится в .dat файле игрока?
При рестарте сервера убирается. А при выходе игрока - нет, так что можно схватить нехилую утечку памяти.
 
При рестарте сервера убирается. А при выходе игрока - нет, так что можно схватить нехилую утечку памяти.
Каким образом? Например, я использую 1 ключ, перезапишу в него сотню объектов, и они все останутся в памяти?
 
Каким образом? Например, я использую 1 ключ, перезапишу в него сотню объектов, и они все останутся в памяти?
Внутри это обычная HashMap<Entity, MetadataValue>. Если энтитя выйдет а вы метадату не удалите, то энтитя останется висеть в хэшмапе до рестарта сервера.
 
Всё равно без лишних карт. А сэйвинг не так ух сложно прикрутить.
Ну мне порой приходится ради сохранения маленькой информации реализовывать целое постоянное хранилище, а это доставляет
 
Всегда создаю врапперы. Врапперы ftw.
 
Грубо говоря то что вы описали под PlayerData, только если вы еще в середину запихнете сам объект игрока (что я не рекомендую) или же имя / UUID

UPD:
Выразился немного некорректно.
Имел ввиду: https://ru.wikipedia.org/wiki/Декоратор_(шаблон_проектирования)
Враппер - немного другое
 
Грубо говоря то что вы описали под PlayerData, только если вы еще в середину запихнете сам объект игрока (что я не рекомендую) или же имя / UUID

UPD:
Выразился немного некорректно.
Имел ввиду: https://ru.wikipedia.org/wiki/Декоратор_(шаблон_проектирования)
Враппер - немного другое
Типа как я написал в посте под спойлером? Или как-то по другому? С декораторами знаком только по стримам.
 

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

Назад
Верх