• 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!

Spigot PlugIn NullpointerException beim Start des Servers und Aufruf einer Location

CubBossa

Redstoneengineer
Mitglied seit
Jul 17, 2015
Beiträge
42
Bewertungen
6
Minecraft
CubBossa
#1
Hey liebe Programmierer.Community!
Folgendes Problem: Ich habe einen Block programmiert, der eben ein Ofen ist und wenn man ihn anklickt öffnet sich ein alternativ inventar und bla gar nicht so wichtig. Wenn ich reloade speichert der server dann auch alles schön ins File und läd das ganze beim enable wieder und der Spieler kann wieder auf das alternativ-Inventar zugreifen.
Wenn ich allerdings den server richtig runterfahre, sodass auch die welten neu geladen werden müssen, beim hochfahren dann joine und meinen ofen anklicke bekomme ich eine NullPointerException in meiner Methode die prüft ob der Block auch der Furnace ist, der zu mir gehört.

Hier ist die Methode in der er jammert: Ich bin langsam ziemlich ratlos und hoffe sehr hier einen zu finden, der mir aus der patsche hilft. ICh habe die vermutung es hängt damit zusammen, welche welten geladen sind aber alle versuche da anzusetzen sind irgendwie erfolglos geblieben
Code:
    public UUID enthältLocation(Location l) {
        for(Entry<UUID, Location> v : Gemerators.entrySet()) {
            Location ll = v.getValue();
            if(l.getWorld().getName()
                    == ll.getWorld().getName()
                    && l.getBlockX() == ll.getBlockX()
                    && ll.getBlockY() == l.getBlockY()
                    && l.getBlockZ() == ll.getBlockZ()) {
                return v.getKey();
            }
        }
        return null;

    public UUID teilVonGemerator(Location el) {

        UUID gmrID = null;
        for(int x = 0; x < 5; x++) {
            for(int y = 0; y < 4; y++) {
                for(int z = 0; z < 5; z++) {
                    gmrID = this.enthältLocation(new Location(el.getWorld(), el.getX()+x-2, el.getY()-3+y, el.getZ()+z-2));
                    if(gmrID != null)
                        return gmrID;
                }
            }
        }
        return gmrID;
    }
    }
Hier mein Error:

Could not pass event BlockBreakEvent to __Athernon_SB__ v2018.09.06
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at net.minecraft.server.v1_12_R1.PlayerInteractManager.breakBlock(PlayerInteractManager.java:290) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at net.minecraft.server.v1_12_R1.PlayerInteractManager.a(PlayerInteractManager.java:217) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:889) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at net.minecraft.server.v1_12_R1.PacketPlayInBlockDig.a(SourceFile:40) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at net.minecraft.server.v1_12_R1.PacketPlayInBlockDig.a(SourceFile:10) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_66]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_66]
at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_66]
Caused by: java.lang.NullPointerException
at Gemerator.GemeratorFile.enthältLocation(GemeratorFile.java:28) ~[?:?]
at Gemerator.GemeratorFile.teilVonGemerator(GemeratorFile.java:43) ~[?:?]
at listener.BlockBreakListener.BlockBreak(BlockBreakListener.java:21) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.2.jar:git-Spigot-2cf50f0-2b93d83]
... 17 more

Wenn ihr sonst irgendwas an meinem Code zu jammern habt dürft ihr das gerne auch schreiben :)
 
Mitglied seit
Okt 5, 2018
Beiträge
5
Bewertungen
2
#2
Caused by: java.lang.NullPointerException
at Gemerator.GemeratorFile.enthältLocation(GemeratorFile.java:28) ~[?:?]
at Gemerator.GemeratorFile.teilVonGemerator(GemeratorFile.java:43) ~[?:?]
Um dir optimal helfen zu können wäre es hilfreich, wenn du uns mitteilst, welche Zeile die oben genannte Zeile 28 ist.
 
Mitglied seit
Jul 15, 2017
Beiträge
69
Bewertungen
54
#3
Siehe:
https://stackoverflow.com/questions/17871825/a-good-way-to-debug-nullpointerexception

Kurzfassung: Lern Programmieren und nicht "ich schreie bei jeder Fehlermeldung nach Hilfe" - wie es die meisten Menschen hier tuen. Nullpointer Exceptions sind schließlich eine wohldefinierte Form des Fehlers, der in der Regel nicht vom eigenen Code geworfen wird.
Zudem ist dein Code eh minderwertig, weil er auf deutsch geschrieben ist, kaum idiomatisch ist und gemerator ein schlechter pun ist.
Im Übrigen kann eine for Schleife auch bei anderen indices anfangen, als 0. Dadurch wäre "el.getX()+x-2" auch einfach als "el.getX() + x" zu schreiben, dadurch ist der code wesentlich einfacher zu verstehen. Ich würde zudem kein neues Objekt erstellen nur um dessen Getter später wieder aufzurufen (unnötige Allozierung, Fehlerquellen, etc) aber dies sind auch alles nur Konventionen, die natürlich ignoriert werden können.
 

CubBossa

Redstoneengineer
Mitglied seit
Jul 17, 2015
Beiträge
42
Bewertungen
6
Minecraft
CubBossa
#4
Was ist denn bei dir los. Ich find es so frech wie Programmieranfänger immer angemacht werden.
Offensichtlich bin ich dabei, programmieren zu lernen oder was mache ich hier? Mein plugin ist nur für den privat gebrauch und ich habe offensichtlich geschrieben dass ihr gerne verbesserungsvorschläge schreiben dürft, weil ich mich verbessern möchte! Das ist das erste mal dass ich seit monaten in einem forum um hilfe bitte weil ich wirklich nicht weiterkomme, alle anderen fehler in meinem code habe ich ja bewältigt bekommen. Ich finde es echt schwach dass man dann mit so erniedrigenden antworten rechnen muss.
 

CubBossa

Redstoneengineer
Mitglied seit
Jul 17, 2015
Beiträge
42
Bewertungen
6
Minecraft
CubBossa
#5
Um dir optimal helfen zu können wäre es hilfreich, wenn du uns mitteilst, welche Zeile die oben genannte Zeile 28 ist.
Entspricht den zeilen, in denen ich das erste mal auf die location l zugreife. Daher war meine vermutung ja dass die Welt nicht geladen ist. Entspricht oben dann Zeile 4
 
Mitglied seit
Okt 5, 2018
Beiträge
5
Bewertungen
2
#6
Wenn ich das richtig sehe, wird die Methode, wo der Fehler kommt in Zeile 20 aufgerufen, oder?
gmrID = this.enthältLocation(new Location(el.getWorld(), el.getX()+x-2, el.getY()-3+y, el.getZ()+z-2));
Dort erstellst du ja eine neue Location und übergibst diese als Parameter.
Anschließend verwendest du diese Location wie folgt, oder?
if(l.getWorld().getName()
Da du ja vorher eine Location erstellt hast, kann diese eigentlich nicht null sein.
Daher muss die World dieser Location null sein.
Wenn du dir also nochmal anschaust wie du die Location erstellst, dann sieht man das du die World aus "el.getWorld()" nimmst.
Die Location "el" übergibst du ja auch wieder. Ich schätze mal das die Location el schon null als world hat.
Um dies aber genau sagen zu können, wäre es hilfreich, wenn du den Code wo du die Location "el" erstellt noch teilen könntest.
 

CubBossa

Redstoneengineer
Mitglied seit
Jul 17, 2015
Beiträge
42
Bewertungen
6
Minecraft
CubBossa
#7
Okay ich habe das problem gerade folgender maßen gelöst: Die null kam daher, dass ich beim laden des plugins im onEnable bereits eine methode habe, die alle potentiellen Locations "el" aus nem File erstellt. Das natürlich mit Bukkit.getWorld(bla[n]) und dadurch, dass mein plugin aber scheinbar vor multiverse geladen wurde, konnte die welt nicht erkannt werden und wurde null gesetzt.
RaidProgramming danke für deine hilfe :)
 
Allgemein
Help Benutzer
    KleinerStern☆ KleinerStern☆:
    Oben