Помогите Не видит переменную в лоре предмета

  • Автор темы Автор темы Sergeo
  • Дата начала Дата начала

Sergeo

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Solomka
Проблема заключается в том, что при установке лора (Листа) я делаю реплейс несколько раз, НО
самый первый предмет (Остальные все прекрасно отображают), который я устанавливаю в меню их НЕ БЕРЕТ (Если конкретнее, то три переменные он не видит, а другие он спокойно отображает)

Вот эти три переменные он не видит в первом предмете(Не отображает в том плане, что выводит 0, а не значение в конфиге)
Код:
list.replaceAll(s -> s.replace("%cost_buy%", String.valueOf(cfg.getInt("Menu." + id + ".Cost"))));
        list.replaceAll(s -> s.replace("%cost_update%",  String.valueOf(cfg.getInt("Menu." + id +".UpdateCost"))));
list.replaceAll(s -> s.replace("%level%", getLevelRune(p,id)));

Код реплейса листа:
Код:
    public List<String> replaceList(Player p, int id, List<String> list) {
        list.replaceAll(s -> s.replace("%cost_buy%", String.valueOf(cfg.getInt("Menu." + id + ".Cost"))));
        list.replaceAll(s -> s.replace("%cost_update%",  String.valueOf(cfg.getInt("Menu." + id + ".UpdateCost"))));
        list.replaceAll(s -> s.replace("%status_rune%", getStatusRune(p,id)));
        list.replaceAll(s -> s.replace("%status_power%", getStatusPower(p,id)));
        list.replaceAll(s -> s.replace("%level%", getLevelRune(p,id)));
        return list;
    }

Установка первого предмета в инвентарь: (id - Номер предмета в конфиге)

Код:
                inventory.setItem( 11, setItemMeta(BOOK_FIRST, replaceList(p,0,cfg.getStringList("Menu." + perm.getId(p, 0) + ".Lore")),
                        cfg.getString("Menu." + perm.getId(p, 0) + ".Name")));
zSsLbH6
 
Последнее редактирование:
итерируешь 4 лишних раза по листу, когда можно всего один:
list.replaceAll(s -> s.replace(r, v).replace(r2, v2).replace(r3, v3));

в этот метод ты передаешь интерфейс UnaryOperator, реализованный при помощи лямды, который в самом методе выполняется на каждом элементе листа, заменяя на тот, что ты вернул в лямбде.

учи джаву дальше.

то, что выводит 0, значит в конфиге этого пути нет или неправильно к нему обращаешься. также, не показаны методы, указанные в посте
 
Могу ошибаться, но как и со string, чтобы при замене переменная приняла само значение надо приравнивать каждый раз, типо list = list.replaceAll(...);
 
Могу ошибаться, но как и со string, чтобы при замене переменная приняла само значение надо приравнивать каждый раз, типо list = list.replaceAll(...);
Не, в списке все сразу заменяется. Достаточно заглянуть в реализацию этого метода
PHP:
    default void replaceAll(UnaryOperator<E> operator) {
        Objects.requireNonNull(operator);
        final ListIterator<E> li = this.listIterator();
        while (li.hasNext()) {
            li.set(operator.apply(li.next()));
        }
    }
 
Назад
Верх