Вопрос Что за ивент когда используется тотем?

Версия Minecraft
1.16.X

Mikita

Заблокирован
Сообщения
57
Решения
3
Всем привет, можете помочь почему код не работает? (В инвентаре предмет есть)

Java:
    private boolean searchItemPersistentDataContainer(Player player, String name) {
        Inventory inventory = player.getInventory();

        for (ItemStack item : inventory.getContents()) {
            if (item != null) {
                if (name != null) {
                    ItemMeta itemMeta = item.getItemMeta();
                    if (itemMeta != null && itemMeta.getPersistentDataContainer().has(
                            NamespacedKey.fromString(name),
                            PersistentDataType.STRING)) {
                        return true;
                    }
                }
            }
        }

        return false;
    }

    @EventHandler
    public void onResurrect2(PlayerDeathEvent e) {
        if (!(e.getEntity() instanceof Player)) {
            if (searchItemPersistentDataContainer(e.getEntity().getPlayer(), "test")) {
                if (!e.isCancelled())
                e.getEntity().sendMessage("Ты не помер, поздравляю");
            }
        }
    }
 
«[EntityResurrectEvent] called when an entity dies and may have the opportunity to be resurrected. Will be called in a cancelled state if the entity does not have a totem equipped».
1. Как будто бы достаточно проверять, отменен ивент или нет. Если не отменен – значит тотем был и игрок не умер, можно еще принудительно приоритет @EventHandler задать, если это необходимо.
2. Почему в первом блоке if условие инвертировано?
Java:
if (!(e.getEntity() instanceof Player)) { ... }
 
«[EntityResurrectEvent] called when an entity dies and may have the opportunity to be resurrected. Will be called in a cancelled state if the entity does not have a totem equipped».
1. Как будто бы достаточно проверять, отменен ивент или нет. Если не отменен – значит тотем был и игрок не умер, можно еще принудительно приоритет @EventHandler задать, если это необходимо.
2. Почему в первом блоке if условие инвертировано?
Java:
if (!(e.getEntity() instanceof Player)) { ... }
Про 2 честно не знаю, я этот код нашел в интернете
 
Тут вообще какая-то глупость с этим ивентом и instanceof в случае использования PlayerDeathEvent вообще не нужен.
Java:
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onResurrect(EntityResurrectEvent e) {
    if (!(e.getEntity() instanceof Player)) return;
    e.getEntity().sendMessage("Ты не помер ☺");
}
 
это наоборот хуже, так как из за этого больше таких моментов появляется (но не визуально)
не знаю про что ты но ладно
если так то можешь просто чекать finaldamage если он больше чем current hp у игрока отменяешь событие и делаешь все те штуки которые происходят при смерти (тп на спавн выпадение вещей тушение от огня восстановление хп и голода и т.д и т.п)
 
Назад
Сверху Снизу