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

anton3312578859

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

Приветствую! Вероятно, я уже опоздал с ответом, но все же. Вот мой вариант:
PHP:
@EventHandler
    public void GranitClick(PlayerInteractEvent e) {
    Player p = e.getPlayer();
if(e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
    if(p.getTargetBlock(null, 5).getType() != Material.GRANITE) return;
    p.getWorld().spawnEntity(p.getLocation(), EntityType.BEE);
    }
4 и 5 строчки - мы проверяем, если: 1) Игрок нажимает правой (можно и левой ( Action.LEFT_CLICK_BLOCK)) кнопкой по блоку (пока любому), 2) Блок, на который смотрит игрок - гранит (Ну, понятно зачем, игрок не может нажать ПКМ/ЛКМ по блоку, если не смотрит на него (Нет, ну, возможно, может, но я не знаю как)). Если эти оба условия не происходят - повторяем. Если происходит, то исполняется то, что написано ниже (В моем случае, для теста, появляется пчела). Возможно, это довольно костыльный метод, но и универсальный и подойдет для всех блоков в игре. Надеюсь, поможет.
UPD: Нашел небольшой баг, поправил, теперь все хорошо)
Спасибо, хоть я и так уже сделал плагин, но не будем забывать про челиков с поисковиков, у которых похожая проблема
 
Тогда мой метод тебе подойдет)
Я уже написал плагин который мне нужен, первая версия, которая для 1.12 у меня работает, но всё равно спасибо, так как есть челики с поисковиков, у которых такая же проблема
 
Я уже написал плагин который мне нужен, первая версия, которая для 1.12 у меня работает, но всё равно спасибо, так как есть челики с поисковиков, у которых такая же проблема
Я уже понял. Когда оставил тот комментарий у меня отображался лишь ответ "Чего? У меня 1.16.5 как бы". К нему и написал.
 
block.getType()==Material.GRANITE
Все изи же. Времена магик валуе прошли уже. Это было давно и не правда.
 
Спасибо, но ответ уже дан
тему нужно закрывать, чтобы подобных ситуаций не было.
вообще впредь используй документацию, и себе и людям сделаешь приятно =))
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/block/Block.html#getType()
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html#GRANITE

enum проверять вот так:
block.getType()==Material.GRANITE
 
Назад
Верх