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

Статус
Закрыто для дальнейших ответов.

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");
            }
        }
    }
 
Тут вот на 1.14.4 PersistentDataHolder вышел! Можете добавлять свои кастомные теги вместо метадаты, которая сотрётся после перезагрузки.
 
Тут вот на 1.14.4 PersistentDataHolder вышел! Можете добавлять свои кастомные теги вместо метадаты, которая сотрётся после перезагрузки.
Угу, только работает оно лишь на тайлэнтити и сущностях, отличный план.
 
Что именно не знаешь как сравнивать?
Кажется, я задал вопрос неправильно.
Мне надо проверить, есть ли в блоке определённая MetadataValue. Если есть, делать что-то.
Когда я проверяю
Код:
if (b.hasMetadata("finish")) {
                p.sendMessage("Parkour completed");
            }
ничего не идёт.
 
Метадата ведра временная. Она не сохраняется нигде и пропадет после рестарта.
 
Проверяете вы правильно. Да и устанавливаете тоже. Но вот вопрос в чём: вы ставите один блок, а метадату добавляете на блок, что под ним, по-этому и не срабатывает проверка.
e.getBlockPlaced().getRelative(BlockFace.DOWN).setMetadata("finish", new FixedMetadataValue(Main.getInstance(), "finish"));
 
Проверяете вы правильно. Да и устанавливаете тоже. Но вот вопрос в чём: вы ставите один блок, а метадату добавляете на блок, что под ним, по-этому и не срабатывает проверка.
e.getBlockPlaced().getRelative(BlockFace.DOWN).setMetadata("finish", new FixedMetadataValue(Main.getInstance(), "finish"));
Проблема решена, спасибо!
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх