• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

[Error]: NullPointerException;

D

deleted191575

Guest
Hallo liebe Community,

Ich habe ein Problem mit dem (InventoryClickEvent) ich weiß schon zumindest dass es bedeutet dass das geklickte Item null bzw. nichts ist also wollte ich euch Fragen wie man am besten Abfragen kann ob das geklickte Item != null ist.

Es folgen die Methode:

Code:
@EventHandler
    public void onItemClick(InventoryClickEvent e) {
        Player p = (Player) e.getWhoClicked();
       
        if(e.isLeftClick()) {
 // Mit dieser Abfrage funktioniert es noch recht gut aber ich muss ja das geklickte Item Abfragen ob es !=null ist           if(e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§bSpawn")) {
// Hier wollte ich es eingrenzen aber das funktioniert ja nicht als Abfrage für !=null                if(e.getClickedInventory().contains(Material.DIAMOND)) {
       
        FileConfiguration cfg = Main.getPlugin().getConfig();
        World world = Bukkit.getWorld(cfg.getString("Spawn.World"));
        double x = cfg.getDouble("Spawn.X");
        double y = cfg.getDouble("Spawn.Y");
        double z = cfg.getDouble("Spawn.Z");
        float yaw = (float) cfg.getDouble("Spawn.Yaw");
        float pitch = (float) cfg.getDouble("Spawn.pitch");
       
        Location loc = new Location(world, x, y, z, yaw, pitch);
       
        p.teleport(loc);
        p.sendTitle("§aSpawn", "");
        p.sendMessage(Utils.prefix + "Du wurdest zum §6Spawn §7telepotiert §4!");
       
                } else
                    e.setCancelled(true);
            } else
                e.setCancelled(true);
                p.closeInventory();
        }
    }

Ich möchte mich bei allen im voraus schon einmal bedanken für eure Beiträge
PS: Es wäre nett könntet ihr eine Erklärung dazu schreiben (Warum) ?
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
if (e.getCurrentItem() == null || e.getCurrentItem().getType() == Material.AIR) return;

So läuft die Methode nicht weiter durch, wenn das Item null ist.
Du musst diese Zeile bloß noch an einer geeigneten Position ( z.B. ganz oben) platzieren und dann bist du gut dabei.

Die beiden Abfragen von dir zu dem Item sind etwas problematisch:
Die erste Abfrage beruht auf dem DisplayName, welcher in einem ItemMeta Objekt eines Items liegt. Damit hast du 3 mögliche Quellen für eine NPE. Genau das Gegenteil erreicht.

Die Abfrage nach dem Material im Inventar ist viel viel viel zu unpräzise für diesen Anwendungsfall.
 
Oben