Помогите Персональные меню

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

swat1x

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
swat1x
Надо чтоб игроку при открытии в меню показывалась какие-то его значения (Баланс, лвл и т.п.), но как это сделать каждому игроку лично. Я попробовал выдать игроку хешмап при открытии, но он ложит туда обычную переменную, а не клонированную. (При открытии другим игроком, значения будут игрока, который последним открыл это меню)
 
Каждый раз когда открываешь инвентарь, делай предметам лор с данными игрока, которому этот инвентарь открываешь
 
Каждый раз когда открываешь инвентарь, делай предметам лор с данными игрока, которому этот инвентарь открываешь
Гений. Инвентарь 1. Как мне сделать так, чтобы при открытии другим игроком, этот инвентарь не выдавал значения других игроков.
 
Гений. Инвентарь 1. Как мне сделать так, чтобы при открытии другим игроком, этот инвентарь не выдавал значения других игроков.

Тебе готовое дали, ты даже это не понял
 
Тебе готовое дали, ты даже это не понял
Почитай вопрос пожалуйста. Я и без всех вас знаю, как сделать лор со своими данными. Вопрос в том, дать этот инветрать только одному игроку, ибо если по вашим методам идти, то ИНВЕТАРЬ БУДЕТ ПОКАЗЫВАТЬ ДАННЫЕ ИГРОКА, КОТОРЫЙ ПОСЛЕДНИМ ИНВЕНТАРЬ ОТКРЫЛ, ИБО ЭТО ОБЩИЙ ИНВЕТАРЬ
 
Как то так.
Код:
public class TestGui implements InventoryHolder {
    private List<ItemStack> stacks;
    private String title;
    private int line;

    public TestGui(List<ItemStack> stacks, String title, int line) {
        this.stacks = stacks;
        this.title = title;
        this.line = line;
    }

    public Inventory getInventory(Player player) {
        Inventory inventory = Bukkit.createInventory(this, 9 * line, title);
        for (ItemStack stack : this.stacks) {
            ItemStack clone = stack.clone();
            ItemMeta meta = clone.getItemMeta();
            String name = meta.getDisplayName();
            meta.setDisplayName(PlaceholderAPI.setPlaceholders(player, name));
            List<String> lores = meta.getLore();
            lores.replaceAll(lore -> PlaceholderAPI.setPlaceholders(player, lore));
            meta.setLore(lores);
            clone.setItemMeta(meta);
            inventory.addItem(clone);
        }
        return inventory;
    }

    @Override
    public Inventory getInventory() {
        return Bukkit.createInventory(this, 9);
    }
}
Код:
player.openInventory(testgui.getInventory(player));
 
Последнее редактирование:
Почитай вопрос пожалуйста. Я и без всех вас знаю, как сделать лор со своими данными. Вопрос в том, дать этот инветрать только одному игроку, ибо если по вашим методам идти, то ИНВЕТАРЬ БУДЕТ ПОКАЗЫВАТЬ ДАННЫЕ ИГРОКА, КОТОРЫЙ ПОСЛЕДНИМ ИНВЕНТАРЬ ОТКРЫЛ, ИБО ЭТО ОБЩИЙ ИНВЕТАРЬ
Inventory inv = Bukkit.create...
HashMap<Player, Inventory> invent = new HashMap<>();
invent.put(player, inv);
Inventory info = invent.put(player);
info.setItem(...);
player.openInventory(info);
 
Почитай вопрос пожалуйста. Я и без всех вас знаю, как сделать лор со своими данными. Вопрос в том, дать этот инветрать только одному игроку, ибо если по вашим методам идти, то ИНВЕТАРЬ БУДЕТ ПОКАЗЫВАТЬ ДАННЫЕ ИГРОКА, КОТОРЫЙ ПОСЛЕДНИМ ИНВЕНТАРЬ ОТКРЫЛ, ИБО ЭТО ОБЩИЙ ИНВЕТАРЬ
Facepalm
 
Inventory inv = Bukkit.create...
HashMap<Player, Inventory> invent = new HashMap<>();
invent.put(player, inv);
Inventory info = invent.put(player);
info.setItem(...);
player.openInventory(info);
От того что мы одну и ту же переменную будет по хешмапам тоскать - ничего не измениться
 
Как то так.
Код:
public class TestGui implements InventoryHolder {
    private List<ItemStack> stacks;
    private String title;
    private int line;

    public TestGui(List<ItemStack> stacks, String title, int line) {
        this.stacks = stacks;
        this.title = title;
        this.line = line;
    }

    public Inventory getInventory(Player player) {
        Inventory inventory = Bukkit.createInventory(this, 9 * line, title);
        for (ItemStack stack : this.stacks) {
            ItemStack clone = stack.clone();
            ItemMeta meta = clone.getItemMeta();
            String name = meta.getDisplayName();
            meta.setDisplayName(PlaceholderAPI.setPlaceholders(player, name));
            List<String> lores = meta.getLore();
            lores.replaceAll(lore -> PlaceholderAPI.setPlaceholders(player, lore));
            meta.setLore(lores);
            clone.setItemMeta(meta);
            inventory.addItem(clone);
        }
        return inventory;
    }

    @Override
    public Inventory getInventory() {
        return Bukkit.createInventory(this, 9);
    }
}
Код:
player.openInventory(testgui.getInventory(player));
При каждом использовании новый инвентарь создавать? Вроде от большого количества сервер крашнуться может.
 
Гений. Инвентарь 1. Как мне сделать так, чтобы при открытии другим игроком, этот инвентарь не выдавал значения других игроков.
Ахахахаха
Ржали всей тимой, спасибо)
 
При каждом использовании новый инвентарь создавать? Вроде от большого количества сервер крашнуться может.
Ну так ты не сохраняй его никуда, чтобы память не засорять.
 
При каждом использовании новый инвентарь создавать? Вроде от большого количества сервер крашнуться может.
Ну не больше чем игроков на сервере будет, при закрытие очищается.
Знал бы ты сколько раз подобные объекты в майне и ведре создаются. У тебя бы мозг крашнулся :D
 
Последнее редактирование:
Ну не больше чем игроков на сервере будет, при закрытие очищается.
Знал бы ты сколько раз подобные объекты в майне и ведре создаются. У тебя бы мозг крашнулся :D
Ну так ты не сохраняй его никуда, чтобы память не засорять.
А, спасибо. Где-то в гайде услышал что нельзя заново создавать, а надо с 1 работать
 
Назад
Верх