Бессмертные entity, не выпадающие вещи и предметы в рамках без имени

RemFex

Отключён
Пользователь
1) Каким образом защитить арморстенды и рамки от kill @e, clearlag'а и вообще запретить наносить урон?

2) Нужно сделать некоторые вещи не выпадающими.
Я планирую добавлять к таким вещам Lore "Невыпадающий".
При смерти игрока, собирать в лист предметы из инвентаря, проверять предметы на наличие этого лора, и уже выдавать их игроку который возродился. С остальными вещами что-нибудь придумаю.

3) Скрыть имя у всех рамок. Когда игрок кладет в рамку предмет с именем, у этой рамки появляется имя. Как его можно скрыть?

Авто объединение сообщений:

Сейчас посмотрел в док, и там как раз есть итемстак с дропом (лист)
PlayerDeathEvent(Player player, List<ItemStack> drops, int droppedExp, String deathMessage)
Осталось сделать проверку на лор, и сохранять предмет.
 

BuseSo

Разработчик
Пользователь
1) От /kill @e вроде никак не защитить энтити, потому что эта команда от майна.
2)
PlayerDeathEvent(Player player, List<ItemStack> drops, int droppedExp, String deathMessage)
Устаревший метод, наверное, на 1.13+ не прокатит.

Немного помучался с этим и пришёл к 1 выводу:
В ивенте PlayerDeathEvent с помощью ArrayList<ItemStack> сохраняем лист дропа (PlayerDeathEvent#getDrops()), далее перебираем через for все предметы, вытаскиваем из них лор, и проверяем, есть ли в лоре надпись "Невыпадающий". Если есть, то этот предмет записываем в HashMap<UUID, ItemStack>, где UUID - UUID умеревшего игрока (PlayerDeathEvent#getEntity()#getUniqueId()). Сразу после сохранения предмета в мапу, мы его удаляем из инвентаря умеревшего игрока.

В ивенте PlayerRespawnEvent мы выдаём игроку предметы из HashMap<UUID, ItemStack> также через for, удаляя их из мапы.

3) Отслеживаем ивентом, получаем предмет, который ставится в рамку и изменяем его имя на " ".
Может быть есть ещё способы, про которые я не знаю..
 

RemFex

Отключён
Пользователь
Устаревший метод, наверное, на 1.13+ не прокатит.
Метод из дока 1.14+

1) От /kill @e вроде никак не защитить энтити, потому что эта команда от майна.
Разве голограммы не бессмертны?
Немного помучался с этим и пришёл к 1 выводу:
В ивенте PlayerDeathEvent с помощью ArrayList<ItemStack> сохраняем лист дропа (PlayerDeathEvent#getDrops()), далее перебираем через for все предметы, вытаскиваем из них лор, и проверяем, есть ли в лоре надпись "Невыпадающий". Если есть, то этот предмет записываем в HashMap<UUID, ItemStack>, где UUID - UUID умеревшего игрока (PlayerDeathEvent#getEntity()#getUniqueId()). Сразу после сохранения предмета в мапу, мы его удаляем из инвентаря умеревшего игрока.

В ивенте PlayerRespawnEvent мы выдаём игроку предметы из HashMap<UUID, ItemStack> также через for, удаляя их из мапы.
Примерно так я и хотел сделать, спасибо за точную наводку.

3) Отслеживаем ивентом, получаем предмет, который ставится в рамку и изменяем его имя на " ".
Я хотел сначала так сделать, но проблема в том, что используется ресурспак, в котором текстура зависит от названия.
Может поставить рамке атрибут скрывающий имя? Рамка это же ентити, где то я помню что-то связанное с именами..

Спасибо за ответ.
 

Комнаты в чате

Верх Низ