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

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

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

  1. Автор темы
    koliab

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

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    Код:

    PHP:
    public class MainGUI implements Listener {

        private 
    HashMap<PlayerInventorymap = new HashMap<>();

        public 
    void onLoad(Player player) {
            
    map.put(playerBukkit.createInventory(null6));
            
    player.openInventory(getInventory(player));
            
    Bukkit.broadcastMessage(map.toString());
        }

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

        private 
    Inventory getInventory(Player player) {
            return 
    map.get(player);
        }
    }
    Выдает null при клике на инвентарь
     
  2. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Ну дак ты onLoad перед этим не вызвал и getInventory() вернул null.
     
  3. Lemar98

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

    Баллы:
    76
    PHP:
    public MainGUI()
    {
         
    map = new HashMap<PlayerInventory>();
    }
     
  4. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Бред, у него поле и так инициализируется)
    Это ниче не поменяет.
     
  5. iD3LSY

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

    Баллы:
    76
    1. Попробуй использовать ключом не Player, а его UniqueId.
    2. Уверен, что вызвал MainGUI#onLoad?
     
  6. MurlikMurlik

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

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

    Вообще не понятно, где и когда ты вызываешь метод onLoad()?
     
  7. iD3LSY

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

    Баллы:
    76
    Если пиратка, то да, лучше ники, но в ином случае легче убиться...
     
  8. MurlikMurlik

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

    Баллы:
    96
    Ну почему же.
    Все тоже самое только ключ это String uuid.
    Тут смотря куда это пишется. Можно и на пиратку юзать uuid, но в этом смысла особого нет, разве что для обратной совместимости.
     
  9. iD3LSY

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

    Баллы:
    76
    Ну че, на никах делаем?)

    upload_2019-3-19_17-50-31.png
     
  10. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
  11. MurlikMurlik

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

    Баллы:
    96
    Емае, что это такое?
    Создай всего лишь 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();
    }


    По моему ооп куда удобнее.
     
  12. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ого, эксперт по ООП
     
  13. MurlikMurlik

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

    Баллы:
    96
    К чему сейчас это?
    Разве то что я написал, не является использованием ооп (пусть даже на "минималках") или ты имеешь ввиду что то другое?
     
  14. iD3LSY

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

    Баллы:
    76
    Это код Каргонда 3-х летней давности)
     
  15. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну судя по тому, что ты пишешь, ты не знаешь ооп.
     
  16. MurlikMurlik

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

    Баллы:
    96
    Не спорю, я только недавно начал познавать озы java.
    Однако хотя бы на этом моменте, хотел бы узнать, почему тот код который я написал "не ооп"?
    Это же простой пример использования обьекта на коленке. Фактически, в примере есть инкапсуляция (что уже имеет вроде причастность к ооп), правда нет смысла же исписывать все подробно..
     
  17. alexandrage

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

    Баллы:
    173
    ТС уже слинял, а срач продолжается. == норма.
     
  18. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    "Я создал объект - это ооп". Умно.
     
  19. MurlikMurlik

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

    Баллы:
    96
    Разве ООП не является работой с объектами?

    Да и я создавал свой экземпляр который по сути не имеет функционала кроме как хранения информации. Или мы друг друга не понимаем.
     
  20. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Чтобы не задавать столь глупые вопросы, лучше продолжай изучать, как правильно применять ООП.
     
    Последнее редактирование: 21 мар 2019

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