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

Помогите Как сделать действие по нажатию на гранит?

Тема в разделе "Разработка плагинов для новичков", создана пользователем anton3312578859, 3 апр 2021.

  1. Автор темы
    anton3312578859

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

    Баллы:
    66
    Дело в том что ID гранита это STONE:1 или 1:1, а мне надо что бы действие активировалось только при нажатии на гранит, то есть не камень а именно гранит. Скажите пожалуйста, как это сделать?
     
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
  3. Автор темы
    anton3312578859

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

    Баллы:
    66
    Спасибо, работает!
     
  4. fx8320e

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

    Баллы:
    66
    Приветствую! Вероятно, я уже опоздал с ответом, но все же. Вот мой вариант:
    PHP:
    @EventHandler
        
    public void GranitClick(PlayerInteractEvent e) {
        
    Player p e.getPlayer(); 
    if(
    e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
        if(
    p.getTargetBlock(null5).getType() != Material.GRANITE) return;
        
    p.getWorld().spawnEntity(p.getLocation(), EntityType.BEE);
        }
    4 и 5 строчки - мы проверяем, если: 1) Игрок нажимает правой (можно и левой ( Action.LEFT_CLICK_BLOCK)) кнопкой по блоку (пока любому), 2) Блок, на который смотрит игрок - гранит (Ну, понятно зачем, игрок не может нажать ПКМ/ЛКМ по блоку, если не смотрит на него (Нет, ну, возможно, может, но я не знаю как)). Если эти оба условия не происходят - повторяем. Если происходит, то исполняется то, что написано ниже (В моем случае, для теста, появляется пчела). Возможно, это довольно костыльный метод, но и универсальный и подойдет для всех блоков в игре. Надеюсь, поможет.
    UPD: Нашел небольшой баг, поправил, теперь все хорошо)
     
    Последнее редактирование: 3 апр 2021
  5. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    У @оп версия 1.12.2 - там гранит и прочее были подтипом камня, а не отдельным материалом. Алсо, в PlayerInteractEvent есть метод getBlock(), который возвращает кликнутый блок.
     
  6. Автор темы
    anton3312578859

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

    Баллы:
    66
    Чего? У меня 1.16.5 как бы

    Спасибо, хоть я и так уже сделал плагин, но не будем забывать про челиков с поисковиков, у которых похожая проблема
     
  7. fx8320e

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

    Баллы:
    66
    Тогда мой метод тебе подойдет)
     
  8. Автор темы
    anton3312578859

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

    Баллы:
    66
    Я уже написал плагин который мне нужен, первая версия, которая для 1.12 у меня работает, но всё равно спасибо, так как есть челики с поисковиков, у которых такая же проблема
     
  9. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Tогда зачем было упоминать STONE:1? Циферные ID уже 2-3 года как не используются.
     
  10. fx8320e

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

    Баллы:
    66
    Я уже понял. Когда оставил тот комментарий у меня отображался лишь ответ "Чего? У меня 1.16.5 как бы". К нему и написал.
     
  11. alexandrage

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

    Баллы:
    173
    block.getType()==Material.GRANITE
    Все изи же. Времена магик валуе прошли уже. Это было давно и не правда.
     
  12. Автор темы
    anton3312578859

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

    Баллы:
    66
    Спасибо, но ответ уже дан
     
  13. _helper_

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

    Баллы:
    76
    тему нужно закрывать, чтобы подобных ситуаций не было.
    вообще впредь используй документацию, и себе и людям сделаешь приятно =))
    https://hub.spigotmc.org/javadocs/spigot/org/bukkit/block/Block.html#getType()
    https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html#GRANITE

    enum проверять вот так:
     
  14. alexandrage

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

    Баллы:
    173
    equals тоже работает, но это уже другая история.
     

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