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

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

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

Статус темы:
Закрыта.
  1. Автор темы
    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")));
                };
            }
     
  2. NoooobKa

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

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    if (i.getItem(num).equals(playerSkull)) num++; Если бошка уже в слоте то num становится на один больше.

    if (map.contains(id)) {
    i.setItem(num, playerSkull); Если мапа содержит айди то ты вставляешь в слот (num + 1) бошку
    break; Завершаешь цикл!?
    }
     
  3. NoooobKa

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

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    И лучше расскажи, что ты хочешь сделать. Мб пока пишешь сам поймешь, что в твоём коде лишнее
     
  4. Автор темы
    Sergeo

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

    Баллы:
    76
    Имя в Minecraft:
    Solomka
    Добавление игрока в мапу, а после добавление его голову в меню, если он не в мапе - удаление. Как сделать проверка на то, что есть ли голова игрока уже в меню, если да и происходит попытка еще раз ее добавить - игнор, а если нет - добавление в меню.

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

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

    Код:
    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;
        }
     
    Последнее редактирование: 29 мар 2021
  5. Автор темы
    Sergeo

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

    Баллы:
    76
    Имя в Minecraft:
    Solomka
    решено
     
Статус темы:
Закрыта.

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