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

Помогите Выполнить действие нажатием ПКМ с предметом в руке.

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

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

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

    Баллы:
    76
    Здравствуйте, формучане. Подскажите, пожалуйста, каким образом можно реализовать действие(в моём случае hidePlayer) нажатием ПКМ с белой шерстью в руках с названием "Спрятать". Игроки должны быть спрятаны, а шерсть сменить цвет на чёрный и получить название "Показать". Вот то, что у меня вышло:
    public class ItemHider implements Listener {
    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent e) {
    Player p = e.getPlayer();
    ItemStack item = e.getPlayer().getItemInHand();
    if (item.getItemMeta().getDisplayName().equalsIgnoreCase("PlayerHider ON")) {
    item.getItemMeta().setDisplayName("PlayerHider OFF");
    for (Player pls : Bukkit.getOnlinePlayers()) {
    p.hidePlayer(pls);
    }
    }
    if (item.getItemMeta().getDisplayName().equals("PlayerHider OFF")) {
    item.getItemMeta().setDisplayName("PlayerHider ON");
    for (Player pls : Bukkit.getOnlinePlayers()) {
    p.showPlayer(pls);
    }
    }
    }
    }
    @EventHandler
    public void onJoin(PlayerJoinEvent e) {
    if (plugin.getConfig().getBoolean("JoinMsg.enabled") == false) {
    e.setJoinMessage(null);
    ItemStack Hider = new ItemStack(Material.WOOL, 1);
    ItemMeta meta = Hider.getItemMeta();
    meta.setDisplayName("PlayerHider ON");
    Hider.setItemMeta(meta);
    e.getPlayer().getInventory().addItem(Hider);
    }
    }
    Что-то явно не так. Пока не пойму, что именно...
     
  2. DeethzzCoder

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

    Баллы:
    76
    Что конкретно не так? Есть ошибки в консоли?
     
  3. Автор темы
    NukerFall

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

    Баллы:
    76
    В консоли всё чисто. Предмет выдаётся, но при клике не происходит вообще ничего.
     
  4. DeethzzCoder

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

    Баллы:
    76
    Ну во первых, проверь, зарегистрирован ли ивент.
     
  5. Автор темы
    NukerFall

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

    Баллы:
    76
    Да, зарегистрирован, прописан. сейчас отправлю...
     
  6. Автор темы
    NukerFall

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

    Баллы:
    76
    Хех, он зарегистрирован неправильно)) Сейчас проверю, скажу результат.
     
  7. Автор темы
    NukerFall

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

    Баллы:
    76
    Слегка поправил код, теперь игрок поворачивается вместо скрытия... Название блока остаётся неизменным
     
  8. Автор темы
    NukerFall

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

    Баллы:
    76
    Я построил цепь сообщений и понял, что действие выполняется дважды за клик, поэтому ничего не происходит. Но когда ты просто рукой ломаешь землю, вылетает ошибка)
     
  9. Автор темы
    NukerFall

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

    Баллы:
    76
    Когда ломаешь блок шерстью, та же шняга в консоли
     
  10. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Проверяй каким предметом было совершено действие - e.getItem() - а не сам предмет из руки.
     
  11. alexandrage

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

    Баллы:
    173
    Код:
        @EventHandler
        public void hide(PlayerInteractEvent e) {
            ItemStack stack = e.getPlayer().getInventory().getItemInMainHand();
            if (stack == null) {
                return;
            }
            if (stack.isSimilar(WHITE_WOOL())) {
                for (Player p : Bukkit.getOnlinePlayers()) {
                    e.getPlayer().hidePlayer(this.plugin, p);
                }
                e.getPlayer().getInventory().setItemInMainHand(BLACK_WOOL());
            }
            if (stack.isSimilar(BLACK_WOOL())) {
                for (Player p : Bukkit.getOnlinePlayers()) {
                    e.getPlayer().showPlayer(this.plugin, p);
                }
                e.getPlayer().getInventory().setItemInMainHand(WHITE_WOOL());
            }
        }
    
        public ItemStack WHITE_WOOL() {
            ItemStack stack = new ItemStack(Material.WHITE_WOOL);
            ItemMeta meta = stack.getItemMeta();
            meta.setDisplayName("Спрятать");
            stack.setItemMeta(meta);
            return stack;
        }
    
        public ItemStack BLACK_WOOL() {
            ItemStack stack = new ItemStack(Material.BLACK_WOOL);
            ItemMeta meta = stack.getItemMeta();
            meta.setDisplayName("Показать");
            stack.setItemMeta(meta);
            return stack;
        }
     
  12. Автор темы
    NukerFall

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

    Баллы:
    76
    Спасибо за помощь! К сожалению нет такого обозначения чёрной шерсти, но это я уже исправил. Теперь осталось пофиксить проблему с постоянным добавлением предмета при перезаходе. Ну и отключить эвент выбрасывания.
     
  13. Автор темы
    NukerFall

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

    Баллы:
    76
    Ну вроде пофиксил, закрываю.
     
Статус темы:
Закрыта.

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