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

Помогите NullPointerException

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

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

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Stacktrace ошибки:
    Код:
    [16:46:34] [Server thread/ERROR]: Could not pass event InventoryClickEvent to PINAuth v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[core.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[core.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [core.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1630) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:31) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(SourceFile:9) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [core.jar:git-Spigot-db6de12-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_211]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_211]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [core.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [core.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
    Caused by: java.lang.NullPointerException
        at ru.sintezgames.pinauth.InventoryManager.onClick(InventoryManager.java:192) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_211]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_211]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[core.jar:git-Spigot-db6de12-18fbb24]
        ... 15 more
    192 строка класса InventoryManager (согласно stacktrace'у):
    Код:
    String newInput = inputedPIN.get(player).replaceFirst("x", "" + number);
     
  2. _Nanit_

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

    Баллы:
    76
    Имя в Minecraft:
    _Nanit_
    Ну проверяй, либо inputedPIN null, либо inputedPIN.get(player) возвращает null
     
  3. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Проверил, inputedPIN.get(player) возвращает null, но с чем это связано?
     
  4. Meltionix

    Meltionix Участник Пользователь

    Баллы:
    31
    Может с тем, что в коллекции отсутствует элемент player?)
     
  5. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Может быть, но я его везде, где только можно и нельзя, инициализирую...
     
  6. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Что значит инициализируешь? Игрока инициализирует ядро, тебе нужно его в свою мапу добавлять...
     
  7. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Поди под ключом используешь объект Player. Если так - попробуй вместо этого использовать UUID игрока.
     
  8. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Я смотрел, player в моем случае не равен null.
     
  9. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Ну, да, я это имел в виду. Спасибо, что исправил.
     
  10. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Твой player с текущего ивента может не быть тем же player'ом, что ты записывал ранее, пускай это один и тот же игрок. Используй UUID.
     
  11. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Хорошо, попробую.
     
  12. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Заменил все на UUID, это не помогло. Ошибка та же. Помогите, пожалуйста.)
     
  13. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Бред какой) Не надо хранить ууид вместо плеера, у тебя будут разные объекты плеера только в том случае если игрок перезайдет
     
  14. Meltionix

    Meltionix Участник Пользователь

    Баллы:
    31
    Пошевели мозгами чуть-чуть, если элемента нет в коллекции, значит его либо удалили, либо не добавляли туда. Возможно мешают какие-нибудь условные операторы. Если совсем не соображаешь, то кидай код добавления в коллекцию.
     
  15. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
    Код:
                if(inventoryName.equals("PINAuth - Регистрация")) {
                        event.setCancelled(true);
                        ItemStack pinInfo = inventory.getItem(10);
                        if(selectedMaterial.equals(Material.IRON_BLOCK)) {
                        int number = selectedItem.getAmount();
                        String newInput = inputedPIN.get(player.getUniqueId()).replaceFirst("x", "" + number); // Problem: inputedPIN.get(player.getUniqueId()) == null. \\ player != null, inputedPIN != null.
                        inputedPIN.put(player.getUniqueId(), newInput);
                        ItemMeta meta = pinInfo.getItemMeta();
                        List<String> lore = new ArrayList<String>();
                        lore.add(ChatColor.WHITE + "Введенный PIN-код: " + inputedPIN.get(player.getUniqueId()));
                        meta.setLore(lore);
                        pinInfo.setItemMeta(meta);
                        inventory.setItem(10, pinInfo);
                        if(!inputedPIN.get(player.getUniqueId()).contains("x")) {
                            String playerPin = inputedPIN.get(player.getUniqueId());
                            plugin.getPins().set(playerName, playerPin);
                            plugin.savePins();
                            player.sendMessage("[PINAuth] Вы успешно зарегистрировались! Приятной игры!");
                        }
                    }
                }
    Код:
        public void openPINRegistration(Player player) {
            player.closeInventory();
            inputedPIN.put(player.getUniqueId(), "xxxx");
            Inventory inventory = Bukkit.createInventory(null, 27, "PINAuth - Регистрация");
            ItemStack deco = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
            ItemStack pinInfo = new ItemStack(Material.PAPER); {
                ItemMeta meta = pinInfo.getItemMeta();
                meta.setDisplayName("Информация");
                List<String> lore = new ArrayList<String>();
                lore.add(ChatColor.WHITE + "Введенный PIN-код: " + inputedPIN.get(player.getUniqueId()));
                meta.setLore(lore);
                pinInfo.setItemMeta(meta);
            }
            for(int i = 0; i < 9; i++) {
                inventory.setItem(i, deco);
            }
            for(int i = 17; i < 27; i++) {
                inventory.setItem(i, deco);
            }
            inventory.setItem(9, deco);
            inventory.setItem(11, deco);
            inventory.setItem(15, deco);
            inventory.setItem(17, deco);
            inventory.setItem(10, pinInfo);
            inventory.setItem(16, deco);
            for(int i = 3, j = 1; i < 6 && j < 4; i++, j++) {
                ItemStack pinButton = new ItemStack(Material.IRON_BLOCK, j); {
                    ItemMeta meta = pinButton.getItemMeta();
                    meta.setDisplayName("[" + j + "]");
                    pinButton.setItemMeta(meta);
                }
                inventory.setItem(i, pinButton);
            }
            for(int i = 12, j = 4; i < 15 && j < 7; i++, j++) {
                ItemStack pinButton = new ItemStack(Material.IRON_BLOCK, j); {
                    ItemMeta meta = pinButton.getItemMeta();
                    meta.setDisplayName("[" + j + "]");
                    pinButton.setItemMeta(meta);
                }
                inventory.setItem(i, pinButton);
            }
            for(int i = 21, j = 7; i < 24 && j < 10; i++, j++) {
                ItemStack pinButton = new ItemStack(Material.IRON_BLOCK, j); {
                    ItemMeta meta = pinButton.getItemMeta();
                    meta.setDisplayName("[" + j + "]");
                    pinButton.setItemMeta(meta);
                }
                inventory.setItem(i, pinButton);
            }
            player.openInventory(inventory);
        }
     
  16. Exception_Prototype

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

    Баллы:
    96
  17. Автор темы
    SintezGames

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

    Баллы:
    66
    Имя в Minecraft:
    EstrangedFury
  18. iD3LSY

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

    Баллы:
    76
    Попробуй продебажить все нажатия. Убедись, что строка вообще выполняется)
    PHP:
    inputedPIN.put(blabla);
     

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