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

Помогите Проверка Metadata

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

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

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

    Баллы:
    61
    Имя в Minecraft:
    _SEVENTYNINE_
    Потребовалось установить Metadata на блок, по которому ходит игрок, и сравнивать её. В итоге получился такой код, однако я не знаю, как сравнить Metadata
    Код:
        @EventHandler
        public void placegold(BlockPlaceEvent e) {
            Player p = e.getPlayer();
            if (p.getEquipment().getItemInMainHand().getItemMeta().getDisplayName().equalsIgnoreCase("finish") && e.getBlockPlaced().getType() == Material.GOLD_BLOCK) {
                e.getBlockPlaced().getRelative(BlockFace.DOWN).setMetadata("finish", new FixedMetadataValue(Main.getInstance(), "finish"));
                p.sendMessage("Metadata");
            }
            e.getPlayer().sendMessage(e.getBlockPlaced() + "");
        }

    Код:
        @EventHandler
        public void CoordRegister(PlayerMoveEvent e) {
            Player p = e.getPlayer();
            Block b = e.getTo().getBlock().getRelative(BlockFace.DOWN);
            if (e.getTo().getBlock().getRelative(BlockFace.DOWN).getType() == Material.GOLD_BLOCK) {
                if (pla.get(p) == null) {
                    pla.put(p, p.getLocation());
                    p.sendMessage("Parkour started");
                    }
                if (pla.get(p) != p.getLocation()) {
                    if (!pla.containsValue(p.getLocation())) {
                        if (pla.get(p).getBlockX() != p.getLocation().getBlockX() && pla.get(p).getBlockY() != p.getLocation().getBlockY() && pla.get(p).getBlockZ() != p.getLocation().getBlockZ()) {
                            p.sendMessage("Checkpoint");
                            pla.replace(p, p.getLocation());
                        }
                    }
                }
                if (b.hasMetadata("finish")) { // Проверка Metadata
                    p.sendMessage("Parkour completed");
                }
            }
        }
     
  2. iD3LSY

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

    Баллы:
    76
    Что именно не знаешь как сравнивать?
     
  3. Energy warrior

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

    Баллы:
    76
    Тут вот на 1.14.4 PersistentDataHolder вышел! Можете добавлять свои кастомные теги вместо метадаты, которая сотрётся после перезагрузки.
     
  4. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Угу, только работает оно лишь на тайлэнтити и сущностях, отличный план.
     
  5. Автор темы
    CreeperPro35

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

    Баллы:
    61
    Имя в Minecraft:
    _SEVENTYNINE_
    Кажется, я задал вопрос неправильно.
    Мне надо проверить, есть ли в блоке определённая MetadataValue. Если есть, делать что-то.
    Когда я проверяю
    Код:
    if (b.hasMetadata("finish")) {
                    p.sendMessage("Parkour completed");
                }
    ничего не идёт.
     
  6. alexandrage

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

    Баллы:
    173
    Метадата ведра временная. Она не сохраняется нигде и пропадет после рестарта.
     
  7. Автор темы
    CreeperPro35

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

    Баллы:
    61
    Имя в Minecraft:
    _SEVENTYNINE_
    У меня нет нужды держать её долгое время.
     
  8. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Проверяете вы правильно. Да и устанавливаете тоже. Но вот вопрос в чём: вы ставите один блок, а метадату добавляете на блок, что под ним, по-этому и не срабатывает проверка.
    e.getBlockPlaced().getRelative(BlockFace.DOWN).setMetadata("finish", new FixedMetadataValue(Main.getInstance(), "finish"));
     
  9. Автор темы
    CreeperPro35

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

    Баллы:
    61
    Имя в Minecraft:
    _SEVENTYNINE_
    Проблема решена, спасибо!
     
Статус темы:
Закрыта.

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