Помогите Добавление предмета в GUI

  • Автор темы Автор темы Sergeo
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Sergeo

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Solomka
Почему-то добавляет два раза голову игрока в меню, а так же не удаляет из меню, когда игрок не в HashMap. Почему так?

Метод, который добавляет предмет

Код:
    public static void addItems(Player p, String string) {
        BasicMethods.string = string;

        UUID id = p.getUniqueId();

        if (i != null) {

            ArrayList<String> Lore = new ArrayList<>();
            ItemStack playerSkull = getHead(p);
            ItemStack barrier = new ItemStack(Material.BARRIER);
            ItemMeta meta = playerSkull.getItemMeta();

            Lore.add(translateAlternateColorCodes('&', "&cВопрос от &f" + p.getName()));
            Lore.add(translateAlternateColorCodes('&', "&fВопрос: " + sb.toString()));
            Lore.add(translateAlternateColorCodes('&', "&7Нажмите, чтобы узнать больше... "));
            meta.setLore(Lore);
            playerSkull.setItemMeta(meta);

            for (int num = 0; num < i.getSize(); num++) {

                if(i.getItem(num) == null) {
                    i.setItem(num, barrier);
                    continue;
                }

                if (i.getItem(num).equals(playerSkull)) num++;

                if (map.contains(id)) {
                    i.setItem(num, playerSkull);
                    break;
                }
                i.setItem(num, null); - Не удаляет предмет(Тупо игнорирует... Без break такая же история)
            }
        }
    }

Использование в классе:
Код:
        public GUI() {
            super(null, null);

            func = (sender, args) -> {
                final List<ECommand> cmds = new ArrayList<>(instance.getRegisteredCommands());

                cmds.add(this);

                if (!(sender instanceof Player)) return;

                Player p = (Player) sender;

                UUID id = p.getUniqueId();

                if (sender.hasPermission(getPermission()) || sender.isOp()) {
                    if(join.contains(id)) {
                        createMenu();
                        openInventory(p);
                        for (Player pl : Bukkit.getOnlinePlayers()) {
                            UUID pl_id = pl.getUniqueId();
                            if (map.contains(pl_id)) {
                                addItems(pl, sb.toString()); <--- 
                            }
                        }
                        return;
                    }
                    send(sender, translateAlternateColorCodes('&', ConfigManager.getString("JoinHelperMode")));
                    return;
                }
                send(sender, translateAlternateColorCodes('&', getString("NotHavePermission")));
            };
        }
 
if (i.getItem(num).equals(playerSkull)) num++; Если бошка уже в слоте то num становится на один больше.

if (map.contains(id)) {
i.setItem(num, playerSkull); Если мапа содержит айди то ты вставляешь в слот (num + 1) бошку
break; Завершаешь цикл!?
}
 
И лучше расскажи, что ты хочешь сделать. Мб пока пишешь сам поймешь, что в твоём коде лишнее
 
И лучше расскажи, что ты хочешь сделать. Мб пока пишешь сам поймешь, что в твоём коде лишнее
Добавление игрока в мапу, а после добавление его голову в меню, если он не в мапе - удаление. Как сделать проверка на то, что есть ли голова игрока уже в меню, если да и происходит попытка еще раз ее добавить - игнор, а если нет - добавление в меню.

Удаление предмета в тупую игнорится

Текущий код: (В таком виде он бесконечно добавляет головы в меню при вводе команды по одной штуке)

Код:
public static Inventory addItems(Inventory inv, Player p, String string) {
        BasicMethods.string = string;

        UUID id = p.getUniqueId();

        if (inv != null) {

            ArrayList<String> Lore = new ArrayList<>();
            ItemStack playerSkull = getHead(p);
            ItemMeta meta = playerSkull.getItemMeta();
            ItemStack NULL_PLAYER = new ItemStack(Material.AIR);

            Lore.add("Вопрос от " + p.getName());
            Lore.add("Вопрос: " + sb.toString());

            for (int num = 0; num < inv.getSize(); num++) {

                if(inv.getItem(num) == null) continue;

                if (!inv.getItem(num).equals(NULL_PLAYER)) num++;
                if (map.contains(id)) {
                    meta.setLore(Lore);
                    playerSkull.setItemMeta(meta);
                    inv.setItem(num, playerSkull);
                }
                inv.remove(num);
            }
        }
        return inv;
    }
 
Последнее редактирование:
решено
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх