Вопрос Дублируются сообщение и удаление предмета

Версия Minecraft
1.16.X

CemeteryBlind

Заблокирован
Сообщения
12
Код:
HashMap<UUID, Player> checker = new HashMap<>();

@EventHandler
public void onClick(PlayerInteractEntityEvent event) {
Player player = event.getPlayer();
    Player victim = (Player) event.getRightClicked();
    if (player.getInventory().getItemInMainHand().hasItemMeta()) {
String offhandName = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName();
        if (offhandName.equals(ColorUtil.color(Main.cfg.getString("nonHand.name")))) {
if (checker.containsKey(victim.getUniqueId())) {
player.sendMessage("123");
                return;
            }
ItemStack click = player.getInventory().getItemInMainHand();
            if (player.getInventory().getItemInMainHand().equals(click)) {
ItemStack n = player.getInventory().getItemInMainHand();
                n.setAmount(n.getAmount() - 1);
                player.getInventory().setItemInMainHand(n);
            }
checker.put(victim.getUniqueId(), victim);
            for (String s : Main.cfg.getStringList("nonHand.message"))
player.sendMessage(ColorUtil.color(s
.replace("%victim%", victim.getName())));
            victim.sendTitle(ColorUtil.color(Main.cfg.getString("nonHand.victim-title-start")), "");
            new BukkitRunnable() {
@Override
                public void run() {
checker.remove(victim.getUniqueId());
                    victim.sendTitle(ColorUtil.color(Main.cfg.getString("nonHand.victim-title-end")), "");
                }
}.runTaskLater(Main.getPlugin(Main.class), Main.cfg.getInt("nonHand.timer") * 20L);
            event.setCancelled(true);
        }
else if (offhandName.equals(ColorUtil.color(Main.cfg.getString("magicCounter.name")))) {
ItemStack click = player.getInventory().getItemInMainHand();
            if (player.getInventory().getItemInMainHand().equals(click)) {
ItemStack n = player.getInventory().getItemInMainHand();
                n.setAmount(n.getAmount() - 1);
                player.getInventory().setItemInMainHand(n);
            }
            player.sendMessage("12345")
event.setCancelled(true);
        }
    }
}
Сначала по предмету nonHand: когда victim находится в листе и игрок кликает по нему выводится 2 раза сообщение "123". Ещё если предмет nonHand находится в руке в количестве больше одного, при клике на victim которого нет в листе сначала пишется текст nonHand.message и потом сразу пишется один раз "123"

Теперь по предмету magicCounter: Когда в руке предмет находится в количестве 2-х и более штук, он использует сразу по 2 этих предмета и соответственно выводит 2 сообщения "12345"

Как это можно исправить?
 
Код:
HashMap<UUID, Player> checker = new HashMap<>();

@EventHandler
public void onClick(PlayerInteractEntityEvent event) {
    Player player = event.getPlayer();
    Player victim = (Player) event.getRightClicked();
    if (player.getInventory().getItemInMainHand().hasItemMeta()) {
        String offhandName = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName();

        if (offhandName.equals(ColorUtil.color(Main.cfg.getString("nonHand.name")))) {
            if (checker.containsKey(victim.getUniqueId())) {
                player.sendMessage("123");
                return;
            }

            ItemStack click = player.getInventory().getItemInMainHand();
            if (player.getInventory().getItemInMainHand().getAmount() > 1) {
                player.sendMessage(ColorUtil.color(Main.cfg.getString("nonHand.message")));
                player.sendMessage("123");
                event.setCancelled(true);
                return;
            }

            ItemStack n = player.getInventory().getItemInMainHand();
            n.setAmount(n.getAmount() - 1);
            player.getInventory().setItemInMainHand(n);

            checker.put(victim.getUniqueId(), victim);
            for (String s : Main.cfg.getStringList("nonHand.message")) {
                player.sendMessage(ColorUtil.color(s.replace("%victim%", victim.getName())));
            }
            victim.sendTitle(ColorUtil.color(Main.cfg.getString("nonHand.victim-title-start")), "");

            new BukkitRunnable() {
                @Override
                public void run() {
                    checker.remove(victim.getUniqueId());
                    victim.sendTitle(ColorUtil.color(Main.cfg.getString("nonHand.victim-title-end")), "");
                }
            }.runTaskLater(Main.getPlugin(Main.class), Main.cfg.getInt("nonHand.timer") * 20L);

            event.setCancelled(true);
        } else if (offhandName.equals(ColorUtil.color(Main.cfg.getString("magicCounter.name")))) {
            if (player.getInventory().getItemInMainHand().getAmount() >= 1) {
                ItemStack n = player.getInventory().getItemInMainHand();
                n.setAmount(n.getAmount() - 1);
                player.getInventory().setItemInMainHand(n);
                player.sendMessage("12345");
                event.setCancelled(true);
            }
        }
    }

попробуй этот код.
 
Код:
HashMap<UUID, Player> checker = new HashMap<>();

@EventHandler
public void onClick(PlayerInteractEntityEvent event) {
    Player player = event.getPlayer();
    Player victim = (Player) event.getRightClicked();
    if (player.getInventory().getItemInMainHand().hasItemMeta()) {
        String offhandName = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName();

        if (offhandName.equals(ColorUtil.color(Main.cfg.getString("nonHand.name")))) {
            if (checker.containsKey(victim.getUniqueId())) {
                player.sendMessage("123");
                return;
            }

            ItemStack click = player.getInventory().getItemInMainHand();
            if (player.getInventory().getItemInMainHand().getAmount() > 1) {
                player.sendMessage(ColorUtil.color(Main.cfg.getString("nonHand.message")));
                player.sendMessage("123");
                event.setCancelled(true);
                return;
            }

            ItemStack n = player.getInventory().getItemInMainHand();
            n.setAmount(n.getAmount() - 1);
            player.getInventory().setItemInMainHand(n);

            checker.put(victim.getUniqueId(), victim);
            for (String s : Main.cfg.getStringList("nonHand.message")) {
                player.sendMessage(ColorUtil.color(s.replace("%victim%", victim.getName())));
            }
            victim.sendTitle(ColorUtil.color(Main.cfg.getString("nonHand.victim-title-start")), "");

            new BukkitRunnable() {
                @Override
                public void run() {
                    checker.remove(victim.getUniqueId());
                    victim.sendTitle(ColorUtil.color(Main.cfg.getString("nonHand.victim-title-end")), "");
                }
            }.runTaskLater(Main.getPlugin(Main.class), Main.cfg.getInt("nonHand.timer") * 20L);

            event.setCancelled(true);
        } else if (offhandName.equals(ColorUtil.color(Main.cfg.getString("magicCounter.name")))) {
            if (player.getInventory().getItemInMainHand().getAmount() >= 1) {
                ItemStack n = player.getInventory().getItemInMainHand();
                n.setAmount(n.getAmount() - 1);
                player.getInventory().setItemInMainHand(n);
                player.sendMessage("12345");
                event.setCancelled(true);
            }
        }
    }

попробуй этот код.
с предметом nonHand стало только хуже, во-первых сообщение "123" продолжает писаться 2 раза где проверка на наличие игрока в листе, во-вторых теперь если игрок есть в листе и игрок кликает по нему пишется то, что на скрине
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
с предметом nonHand стало только хуже, во-первых сообщение "123" продолжает писаться 2 раза где проверка на наличие игрока в листе, во-вторых теперь если игрок есть в листе и игрок кликает по нему пишется то, что на скрине
Вам необходимо зарегистрироваться для просмотра изображений-вложений
секунду.
 
с предметом nonHand стало только хуже, во-первых сообщение "123" продолжает писаться 2 раза где проверка на наличие игрока в листе, во-вторых теперь если игрок есть в листе и игрок кликает по нему пишется то, что на скрине
Вам необходимо зарегистрироваться для просмотра изображений-вложений

Код:
HashMap<UUID, Player> checker = new HashMap<>();

@EventHandler
public void onClick(PlayerInteractEntityEvent event) {
    Player player = event.getPlayer();
    Player victim = (Player) event.getRightClicked();
    if (player.getInventory().getItemInMainHand().hasItemMeta()) {
        String offhandName = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName();
        if (offhandName.equals(ColorUtil.color(Main.cfg.getString("nonHand.name")))) {
            if (checker.containsKey(victim.getUniqueId())) {
                return;
            }
            ItemStack click = player.getInventory().getItemInMainHand();
            if (player.getInventory().getItemInMainHand().equals(click)) {
                ItemStack n = player.getInventory().getItemInMainHand();
                n.setAmount(n.getAmount() - 1);
                player.getInventory().setItemInMainHand(n);
            }
            checker.put(victim.getUniqueId(), victim);
            for (String s : Main.cfg.getStringList("nonHand.message"))
                player.sendMessage(ColorUtil.color(s
                        .replace("%victim%", victim.getName())));
            victim.sendTitle(ColorUtil.color(Main.cfg.getString("nonHand.victim-title-start")), "");
            new BukkitRunnable() {
                @Override
                public void run() {
                    checker.remove(victim.getUniqueId());
                    victim.sendTitle(ColorUtil.color(Main.cfg.getString("nonHand.victim-title-end")), "");
                }
            }.runTaskLater(Main.getPlugin(Main.class), Main.cfg.getInt("nonHand.timer") * 20L);
            event.setCancelled(true);
        } else if (offhandName.equals(ColorUtil.color(Main.cfg.getString("magicCounter.name")))) {
            ItemStack click = player.getInventory().getItemInMainHand();
            if (player.getInventory().getItemInMainHand().equals(click)) {
                int amount = click.getAmount();
                if (amount > 1) {
                    click.setAmount(amount - 1);
                    player.getInventory().setItemInMainHand(click);
                } else {
                    player.getInventory().setItemInMainHand(null);
                }
                player.sendMessage("12345");
                event.setCancelled(true);
            }
        }
    }
}
 
magicCounter всё по-прежнему, а в nonHand я так понял ты решил исправить проблему удалением сообщения "123"?)
ну да. А в чем проблема? с magicCounter необходимо сделать нормальную логику с удалением 1го предмета.
 
ну да. А в чем проблема?
со стороны игроков могут быть вопросы по типу "почему я кликаю по игроку, но ничего не происходит". Поэтому мне и нужно выводить сообщение игроку, что он не может кликать по игроку в момент когда victim в листе
 
со стороны игроков могут быть вопросы по типу "почему я кликаю по игроку, но ничего не происходит". Поэтому мне и нужно выводить сообщение игроку, что он не может кликать по игроку в момент когда victim в листе
ну тогда тебе нужно отправлять это 1 раз, но никак не 2.
Объединено

Код:
        if (offhandName.equals(ColorUtil.color(Main.cfg.getString("nonHand.name")))) {

            if (checker.containsKey(victim.getUniqueId())) {

                player.sendMessage("123");

                return;

            }


            ItemStack click = player.getInventory().getItemInMainHand();

            if (player.getInventory().getItemInMainHand().getAmount() > 1) {

                player.sendMessage(ColorUtil.color(Main.cfg.getString("nonHand.message")));

                player.sendMessage("123");

                event.setCancelled(true);

                return;

            }
 
Назад
Сверху Снизу