Войти или зарегистрироваться

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

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

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);
}
}
Что-то явно не так. Пока не пойму, что именно...
 
Хех, он зарегистрирован неправильно)) Сейчас проверю, скажу результат.
 
Слегка поправил код, теперь игрок поворачивается вместо скрытия... Название блока остаётся неизменным
 
Я построил цепь сообщений и понял, что действие выполняется дважды за клик, поэтому ничего не происходит. Но когда ты просто рукой ломаешь землю, вылетает ошибка)
 
Когда ломаешь блок шерстью, та же шняга в консоли
 
Код:
    @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;
    }
 
Код:
    @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;
    }
Спасибо за помощь! К сожалению нет такого обозначения чёрной шерсти, но это я уже исправил. Теперь осталось пофиксить проблему с постоянным добавлением предмета при перезаходе. Ну и отключить эвент выбрасывания.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх