Помогите Выдает null из hasmap

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

koliab

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
kolia1_1
Код:

PHP:
public class MainGUI implements Listener {

    private HashMap<Player, Inventory> map = new HashMap<>();

    public void onLoad(Player player) {
        map.put(player, Bukkit.createInventory(null, 9 * 6));
        player.openInventory(getInventory(player));
        Bukkit.broadcastMessage(map.toString());
    }

    @EventHandler
    private void onClick(InventoryClickEvent event) {
        Player player = (Player) event.getWhoClicked();
        player.sendMessage(String.valueOf(getInventory(player)));
    }

    private Inventory getInventory(Player player) {
        return map.get(player);
    }
}

Выдает null при клике на инвентарь
 
Ну дак ты onLoad перед этим не вызвал и getInventory() вернул null.
 
1. Попробуй использовать ключом не Player, а его UniqueId.
2. Уверен, что вызвал MainGUI#onLoad?
 
Код:

PHP:
public class MainGUI implements Listener {

    private HashMap<Player, Inventory> map = new HashMap<>();

    public void onLoad(Player player) {
        map.put(player, Bukkit.createInventory(null, 9 * 6));
        player.openInventory(getInventory(player));
        Bukkit.broadcastMessage(map.toString());
    }

    @EventHandler
    private void onClick(InventoryClickEvent event) {
        Player player = (Player) event.getWhoClicked();
        player.sendMessage(String.valueOf(getInventory(player)));
    }

    private Inventory getInventory(Player player) {
        return map.get(player);
    }
}

Выдает null при клике на инвентарь
Проще использовать ключ ввиде его ника, а значение это какой нибудь обьект который содержит ссылку на Player и его Inventory. Не очень хорошо хранить ссылку на обьект игрока где то, ибо если игрок перезайдет, для него создаться новый экземпляр Player а тот что ввиде ключа, так и останется там по сути "устаревшим".

Вообще не понятно, где и когда ты вызываешь метод onLoad()?
 
Проще использовать ключ ввиде его ника, а значение это какой нибудь обьект который содержит ссылку на Player и его Inventory. Не очень хорошо хранить ссылку на обьект игрока где то, ибо если игрок перезайдет, для него создаться новый экземпляр Player а тот что ввиде ключа, так и останется там по сути "устаревшим".

Вообще не понятно, где и когда ты вызываешь метод onLoad()?
Если пиратка, то да, лучше ники, но в ином случае легче убиться...
 
Если пиратка, то да, лучше ники, но в ином случае легче убиться...
Ну почему же.
Все тоже самое только ключ это String uuid.
Тут смотря куда это пишется. Можно и на пиратку юзать uuid, но в этом смысла особого нет, разве что для обратной совместимости.
 
Ну почему же.
Все тоже самое только ключ это String uuid.
Тут смотря куда это пишется. Можно и на пиратку юзать uuid, но в этом смысла особого нет, разве что для обратной совместимости.
Ну че, на никах делаем?)

upload_2019-3-19_17-50-31.png
 
Емае, что это такое?
Создай всего лишь 1 класс (например testObject), в нем создай все эти 6 приватных полей.
Создай сеттеры и геттеры.
А далее
public Map<String, testObject> test = new HashMap<String, testObject>();

test.put(name, new testObject(аргументы..));
А далее тупо
testObject to = test.get(name);
if (to != null) {
//То что нужно
int level = to.getLevel();
}


По моему ооп куда удобнее.
 
Емае, что это такое?
Создай всего лишь 1 класс (например testObject), в нем создай все эти 6 приватных полей.
Создай сеттеры и геттеры.
А далее
public Map<String, testObject> test = new HashMap<String, testObject>();

test.put(name, new testObject(аргументы..));
А далее тупо
testObject to = test.get(name);
if (to != null) {
//То что нужно
int level = to.getLevel();
}


По моему ооп куда удобнее.
Ого, эксперт по ООП
 
К чему сейчас это?
Разве то что я написал, не является использованием ооп (пусть даже на "минималках") или ты имеешь ввиду что то другое?
Ну судя по тому, что ты пишешь, ты не знаешь ооп.
 
Ну судя по тому, что ты пишешь, ты не знаешь ооп.
Не спорю, я только недавно начал познавать озы java.
Однако хотя бы на этом моменте, хотел бы узнать, почему тот код который я написал "не ооп"?
Это же простой пример использования обьекта на коленке. Фактически, в примере есть инкапсуляция (что уже имеет вроде причастность к ооп), правда нет смысла же исписывать все подробно..
 
Не спорю, я только недавно начал познавать озы java.
Однако хотя бы на этом моменте, хотел бы узнать, почему тот код который я написал "не ооп"?
Это же простой пример использования обьекта на коленке. Фактически, в примере есть инкапсуляция (что уже имеет вроде причастность к ооп), правда нет смысла же исписывать все подробно..
"Я создал объект - это ооп". Умно.
 
"Я создал объект - это ооп". Умно.
Разве ООП не является работой с объектами?

Да и я создавал свой экземпляр который по сути не имеет функционала кроме как хранения информации. Или мы друг друга не понимаем.
 
Разве ООП не является работой с объектами?

Да и я создавал свой экземпляр который по сути не имеет функционала кроме как хранения информации. Или мы друг друга не понимаем.
Чтобы не задавать столь глупые вопросы, лучше продолжай изучать, как правильно применять ООП.
 
Последнее редактирование:
Назад
Верх