Помогите NullPointerException

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);
 
Ну проверяй, либо inputedPIN null, либо inputedPIN.get(player) возвращает null
 
Может быть, но я его везде, где только можно и нельзя, инициализирую...
Что значит инициализируешь? Игрока инициализирует ядро, тебе нужно его в свою мапу добавлять...
 
Может быть, но я его везде, где только можно и нельзя, инициализирую...
Поди под ключом используешь объект Player. Если так - попробуй вместо этого использовать UUID игрока.
 
Я смотрел, player в моем случае не равен null.
Твой player с текущего ивента может не быть тем же player'ом, что ты записывал ранее, пускай это один и тот же игрок. Используй UUID.
 
Твой player с текущего ивента может не быть тем же player'ом, что ты записывал ранее, пускай это один и тот же игрок. Используй UUID.

Заменил все на UUID, это не помогло. Ошибка та же. Помогите, пожалуйста.)
 
Твой player с текущего ивента может не быть тем же player'ом, что ты записывал ранее, пускай это один и тот же игрок. Используй UUID.
Бред какой) Не надо хранить ууид вместо плеера, у тебя будут разные объекты плеера только в том случае если игрок перезайдет
 
Заменил все на UUID, это не помогло. Ошибка та же. Помогите, пожалуйста.)
Пошевели мозгами чуть-чуть, если элемента нет в коллекции, значит его либо удалили, либо не добавляли туда. Возможно мешают какие-нибудь условные операторы. Если совсем не соображаешь, то кидай код добавления в коллекцию.
 
Пошевели мозгами чуть-чуть, если элемента нет в коллекции, значит его либо удалили, либо не добавляли туда. Возможно мешают какие-нибудь условные операторы. Если совсем не соображаешь, то кидай код добавления в коллекцию.

Код:
            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);
    }
 
Попробуй продебажить все нажатия. Убедись, что строка вообще выполняется)
PHP:
inputedPIN.put(bla, bla);
 
Назад
Верх