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

Помогите странный баг с lore предмета

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

Статус темы:
Закрыта.
  1. Автор темы
    Studenikin

    Studenikin Старожил Пользователь

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    Имеется следующий код, если вкратце - создается инвентарь в в нем в lore предмета пишет статистику игрока:

    Код:
      
        public static void open(Player p, Inventory profile) {
             for (int i = 0; i < profile.getSize(); i++) {
                ItemStack item = profile.getItem(i);
                if (item != null) {
                    replace(p, item);
                    profile.setItem(i, item);
                    System.out.println("NEW2lore: " + profile.getItem(i).getItemMeta().getLore());
                }
            }
            p.openInventory(profile);
        }
    
        public static void replace(Player p, ItemStack item) {
            ItemMeta itemMeta = item.getItemMeta();
            List<String> nlore = new ArrayList<>();
    
            if (itemMeta.getLore() == null) return;
    
            for (String lore : itemMeta.getLore()) {
                lore = lore.replace("%privilege%", PexFormatter.getPrefix(p));
                lore = lore.replace("%level%", EconomyAPI.getLevel(p));
                lore = lore.replace("%procent%", EconomyAPI.getProcent(p));
                lore = lore.replace("%money%", EconomyAPI.getCoins(p).toString());
                nlore.add(lore);
            }
    
    
            itemMeta.setLore(nlore);
            item.setItemMeta(itemMeta);
        }
    В логе дебаг выводится так:

    Код:
    [10:30:19 INFO]: NEW2lore: [Здесь Вы можете сменить язык., , Доступные языки:, ,    • Русский(100%),    • English(50%), , Со временем будут дополняться, старые и выходить новые.]
    [10:30:19 INFO]: NEW2lore: [Нажмите, чтобы увидеть, наши социальные сети.]
    [10:30:19 INFO]: NEW2lore: [Привилегия: ADMIN , Уровень: 1 (Прогресс: 8.00%), Монеты: 77380]
    [10:30:19 INFO]: NEW2lore: [Скоро...]
    [10:30:19 INFO]: NEW2lore: [Дополнительная информация.]
    [10:30:19 INFO]: NEW2lore: [Играя в различные режимы,, получая достижения, выполняя, квесты, Вы получаете опыт., От количества опыта зависит, уровень., , Ваш уровень: 1 (Прогресс: 8.00%)]
    [10:30:19 INFO]: NEW2lore: [Скоро...]
    [10:30:19 INFO]: NEW2lore: [Здесь Вы можете, изменить настройки.]
    
    То есть вроде все как и должно быть, но игрок видит это:

    Снимок экрана от 2019-08-13 11-30-24.png

    Причем раньше на 1.12 апи все работало нормально, проблема возникла при переписывании на 1.14
     
    Последнее редактирование: 13 авг 2019
  2. Mr.Vlad2208

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

    Баллы:
    66
    Имя в Minecraft:
    DoorMatt47
    Не уверен в том что написал, но возможно так ?
    Код:
        public static void open(Player p, Inventory profile) {
             for (int i = 0; i < profile.getSize(); i++) {
                ItemStack item = profile.getItem(i);
                if (item != null) {
                    replace(p, item);
                    profile.setItem(i, replace(p, item)); // Изменено
                    System.out.println("NEW2lore: " + profile.getItem(i).getItemMeta().getLore());
                }
            }
            p.openInventory(profile);
        }
    
        public static ItemStack replace(Player p, ItemStack item) { // Изменено
            ItemMeta itemMeta = item.getItemMeta();
            List<String> nlore = new ArrayList<>();
    
            if (itemMeta.getLore() == null) return;
    
            for (String lore : itemMeta.getLore()) {
                lore = lore.replace("%privilege%", PexFormatter.getPrefix(p));
                lore = lore.replace("%level%", EconomyAPI.getLevel(p));
                lore = lore.replace("%procent%", EconomyAPI.getProcent(p));
                lore = lore.replace("%money%", EconomyAPI.getCoins(p).toString());
                nlore.add(lore);
            }
    
    
            itemMeta.setLore(nlore);
            item.setItemMeta(itemMeta);
            return item; // Добавлено
        }
     
  3. Luminate_

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

    Баллы:
    76
    Имя в Minecraft:
    Luminate_
    Не костыляй, String#format
     
Статус темы:
Закрыта.

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