IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Spigot - openInventory hází java.lang.NullPointerException

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Erik Bystroň:3.7.2017 15:55

Ahoj, mám zde problém s

openInventory

když se pokusím otevřít inventář vyhodí to null, zkusil jsem jestli je chyba v proměnné(hráčovo jméno), ale není, když jsem nechal vypsat hráči správu fungovalo to...

log:

[15:38:58] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'shops' in plugin ShopsManager v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_121]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_121]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
Caused by: java.lang.NullPointerException
        at org.bukkit.craftbukkit.v1_8_R3.entity.CraftHumanEntity.openInventory(CraftHumanEntity.java:176) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at cz.flay.shopsmanager.MainMenu.onCommand(MainMenu.java:64) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        ... 15 more

kod:
main:

package cz.flay.shopsmanager;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import cz.flay.shopsmanager.MainMenu;

public class Main extends JavaPlugin{

    @Override
    public void onEnable() {
        Bukkit.getServer().getLogger().info("ShopsManager started !");
        getCommand("shops").setExecutor(new MainMenu());
    }


    @Override
    public void onDisable() {
        Bukkit.getServer().getLogger().info("ShopsManager stoped !");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        Player player = (Player) sender;

        if (cmd.getName().equalsIgnoreCase("smversion")) {
            player.sendMessage("ShopsManager v. 1.0");
            return true;
        }

        return false;
    }


}

mainmenu:

package cz.flay.shopsmanager;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.material.Sandstone;
import sun.plugin2.main.server.Plugin;

import java.util.Arrays;

public class MainMenu implements Listener, CommandExecutor {

    private Inventory inv;
    private ItemStack teststack;

    public void Menu(Plugin p){
        inv = Bukkit.getServer().createInventory(null, 9, "Shops List");

        teststack = createItem(ChatColor.AQUA + "Test");

        inv.setItem(2, teststack);

        Bukkit.getServer().getPluginManager().registerEvents(this, (org.bukkit.plugin.Plugin) p);
    }

    private ItemStack createItem(String name){
        ItemStack i = new Sandstone().toItemStack(1);
        ItemMeta im = i.getItemMeta();
        im.setDisplayName(name);
        im.setLore(Arrays.asList("Lore"));
        i.setItemMeta(im);
        return i;
    }
    public void Show(Player p){
        p.openInventory(inv);
    }

    @EventHandler
    public void onInventoryClick(InventoryClickEvent e){
        if (!e.getInventory().equals(inv)){
            return;
        }

        if (e.getCurrentItem().getItemMeta().getDisplayName().contains("Test")){
                e.getWhoClicked().setGameMode(GameMode.CREATIVE);
        }
    }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        Player player = (Player) sender;

        if (cmd.getName().equalsIgnoreCase("shops")) {
            player.sendMessage("Working !");
            player.openInventory(inv);
            return true;
        }

        return false;
    }
}

Working se vypíše ale gui/inventář se neotevře a vypíše error

player.sendMessage("Working !");
player.openInventory(inv);

Za jakoukoliv radu budu rád, s gui pluginama teprve začínam :-)

Editováno 3.7.2017 15:56
 
Odpovědět
3.7.2017 15:55
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Erik Bystroň
gcx11:3.7.2017 16:23

Ahoj, protože se zavolá prázdný konstruktor, tak proměnná není inicializovaná.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
3.7.2017 16:23
Avatar
Erik Bystroň:3.7.2017 20:15

Takže je to tím, že tam mám void a nic to nevrací, tím pádem je konstruktor prázdný.

public void Menu(Plugin p)
 
Nahoru Odpovědět
3.7.2017 20:15
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Erik Bystroň
gcx11:3.7.2017 21:32

Toto není konstruktor. Nemá název stejný jako název třídy a do konstruktorů se nepíše návratový typ.

 
Nahoru Odpovědět
3.7.2017 21:32
Avatar
Erik Bystroň:4.7.2017 7:22

Už mi to došlo :-D díky.

 
Nahoru Odpovědět
4.7.2017 7:22
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.