Помогите Обновить кастомный инвентарь

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

reZero

Активный участник
Пользователь
Баллы
76
У меня есть кастомный инвентарь, в нем есть предмет, в лоре которого есть текущий баланс игрока. Как мне обновить инвентарь, чтобы при пополнении счет не выходя из гуи, информация на предмете обновлялась?
P.S p.updateInventory() не робит
 
Достаточно сменить мету итемстаку и все. Дальше само все.
Код:
        ItemStack s = inv.getItem(0);
        ItemMeta m = s.getItemMeta();
        m.setLore(Arrays.asList(new String[]{money}));
        s.setItemMeta(m);
На чистом серваке точно работает, на счет протоколхакнутых не могу сказать.
 
После изменения предмета ставишь его заново в инвентарь (Inventory#setItem(...))
 
Достаточно сменить мету итемстаку и все. Дальше само все.
Код:
        ItemStack s = inv.getItem(0);
        ItemMeta m = s.getItemMeta();
        m.setLore(Arrays.asList(new String[]{money}));
        s.setItemMeta(m);
На чистом серваке точно работает, на счет протоколхакнутых не могу сказать.
PHP:
        ItemMeta meta = item.getItemMeta();
выбивает npe почему-то...
UPD: Исправил ошибку. Но значение в лоре все равно не меняется

После изменения предмета ставишь его заново в инвентарь (Inventory#setItem(...))
Ты походу неправильно понял. Допустим, у меня в середине гуи есть айтем, который показывает какое-то число в своем лоре. При нажатии на предмет рядом, это число будет увеличиваться на 1, следовательно и в лоре предмета из середины гуи, цифра должна меняться. Сам предмет я не трогаю.
 
Последнее редактирование:
PHP:
        ItemMeta meta = item.getItemMeta();
выбивает npe почему-то...
UPD: Исправил ошибку. Но значение в лоре все равно не меняется


Ты походу неправильно понял. Допустим, у меня в середине гуи есть айтем, который показывает какое-то число в своем лоре. При нажатии на предмет рядом, это число будет увеличиваться на 1, следовательно и в лоре предмета из середины гуи, цифра должна меняться. Сам предмет я не трогаю.
Ну так и получаешь предмет из середины гуи и меняешь там лоре моим кодом.
inv.getItem(индекс того предмета);
 
Ну так и получаешь предмет из середины гуи и меняешь там лоре моим кодом.
inv.getItem(индекс того предмета);
Есть у меня такой метод
PHP:
    public void update()
    {
        ItemStack s = this.openSavingsAccount().getItem(4);
        ItemMeta m = s.getItemMeta();
        m.setLore(Arrays.asList(new String[]{"zhopa"}));
        s.setItemMeta(m);
    }
Я его вызываю, когда игрок кликает на нужный предмет, но ничего не изменяется.
Конечно, работает способ просто закрыть и открыть инвентарь заново, но мне этот способ не очень подходит, т.к при выполнении вышеуказанных действий, курсор игрока всегда бросается в середину экрана (как и при обычном открытии гуи в общем-то), а для меня это неудобно.
 
Есть у меня такой метод
PHP:
    public void update()
    {
        ItemStack s = this.openSavingsAccount().getItem(4);
        ItemMeta m = s.getItemMeta();
        m.setLore(Arrays.asList(new String[]{"zhopa"}));
        s.setItemMeta(m);
    }
Я его вызываю, когда игрок кликает на нужный предмет, но ничего не изменяется.
Конечно, работает способ просто закрыть и открыть инвентарь заново, но мне этот способ не очень подходит, т.к при выполнении вышеуказанных действий, курсор игрока всегда бросается в середину экрана (как и при обычном открытии гуи в общем-то), а для меня это неудобно.
попробуй обновить инвентарь, player -> updateInventory
 
Я сделал метод, при вызове которого, в инвентаре появляются все нужные мне предметы
PHP:
public Inventory openSavingsAccount()
    {
        ItemStack account = new ItemStack(Material.getMaterial(Main.getInstance().getConfig().getInt("SavingsAccount.Item")));
        ItemMeta accountmeta = account.getItemMeta();
        accountmeta.setDisplayName("testItem");
        new Buttons().addButtons(this.getInventory(), 0, 1, 2, 3, 5, 6, 7, 8);
        account.setLore(Arrays.asList(new String[] {"money"}))
        account.setItemMeta(accountmeta);
        this.saacmeny.setItem(4, account);
        return this.saacmeny;
    }
Создание инвентаря

PHP:
public Inventory saacmeny;
public myclass(Player player)
{
    this.saacmeny = Bukkit.createInventory(null, 9, "Test")
}

Чтобы открыть этот инвентарь, я просто вызываю
PHP:
p.openInventory(myclass.openSavingsAccount());

При клилке на определенный предмет, я добавляю n число к числу из лора того самого предмета и пытаюсь обновить этот предмет этим методом
PHP:
    public void update()
    {
        ItemStack s = this.openSavingsAccount().getItem(4);
       ItemMeta m = s.getItemMeta();
       m.setLore(Arrays.asList(new String[]{"zhopa"}));
       m.setDisplayName("TEST");
       s.setItemMeta(m);
     }
В чем может быть ошибка??
P.S не кидайтесь помидорами за говнокод, лучше укажите, где было бы лучше что-то сделать по-другому, я буду Вам очень благодарен!
 
Я сделал метод, при вызове которого, в инвентаре появляются все нужные мне предметы
PHP:
public Inventory openSavingsAccount()
    {
        ItemStack account = new ItemStack(Material.getMaterial(Main.getInstance().getConfig().getInt("SavingsAccount.Item")));
        ItemMeta accountmeta = account.getItemMeta();
        accountmeta.setDisplayName("testItem");
        new Buttons().addButtons(this.getInventory(), 0, 1, 2, 3, 5, 6, 7, 8);
        account.setLore(Arrays.asList(new String[] {"money"}))
        account.setItemMeta(accountmeta);
        this.saacmeny.setItem(4, account);
        return this.saacmeny;
    }
Создание инвентаря

PHP:
public Inventory saacmeny;
public myclass(Player player)
{
    this.saacmeny = Bukkit.createInventory(null, 9, "Test")
}

Чтобы открыть этот инвентарь, я просто вызываю
PHP:
p.openInventory(myclass.openSavingsAccount());

При клилке на определенный предмет, я добавляю n число к числу из лора того самого предмета и пытаюсь обновить этот предмет этим методом
PHP:
    public void update()
    {
        ItemStack s = this.openSavingsAccount().getItem(4);
       ItemMeta m = s.getItemMeta();
       m.setLore(Arrays.asList(new String[]{"zhopa"}));
       m.setDisplayName("TEST");
       s.setItemMeta(m);
     }
В чем может быть ошибка??
P.S не кидайтесь помидорами за говнокод, лучше укажите, где было бы лучше что-то сделать по-другому, я буду Вам очень благодарен!
Фейспальмов не наберешься на тебя.
 
Тема до сих пор актуальна

Чем не идет? Ты сетишь новый измененный предмет в инвентарь. И все.
После изменения предмета ставишь его заново в инвентарь (Inventory#setItem(...))
Ну так и получаешь предмет из середины гуи и меняешь там лоре моим кодом.
inv.getItem(индекс того предмета);
 
Назад
Верх