Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Метки:
Теги Теги
eclipse minecraft 1.12 plugin
Статус
Закрыто для дальнейших ответов.

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

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

Назад
Верх