• 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
17 Juli 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
5 Oktober 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
15 Juli 2017
Beiträge
77
Bewertungen
61
#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
17 Juli 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.
 
Mitglied seit
5 Oktober 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
17 Juli 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
  • Stern☆ Stern☆:
    ..am besten immer 2 Server aufmachen XD
  • maybeto maybeto:
    Netzwerke mit citybuild und Minigames
  • Stern☆ Stern☆:
    Mit nem 2ten Bungeecord Server ginge auch Freebuild. 2 Server mit unterschiedlichen Namen und Forum mit einem Netherportal verbunden!!! Hammer !!
  • maybeto maybeto:
    aber bald sind Ferien, da klingelt bei Nitrado die Kasse wieder und täglich kommen 25 neue Server dazu
  • Stern☆ Stern☆:
    Hauptsache ein 1 Jahres Vertrag. Sicher ist sicher
  • maybeto maybeto:
    klar, dann muß eh vergrößert werden wegen der zahlreichen Spieler
  • Stern☆ Stern☆:
    Und viel RAM ist wichtig zu den 999 Slots
  • maybeto maybeto:
    ach, ein guter Owner bekommt das mit 5 Gb hin....
  • Stern☆ Stern☆:
    Nicht wenn sie Hypixel übertreffen wollen. Da braucht es nen größeren Nitrado Server. Das Team hat man eh gleich hier gefunden ^^
  • maybeto maybeto:
    darüber kann man nach 4 Wochen und bei 800 Spielern nachdenken....
  • Stern☆ Stern☆:
    Stimmt.. aber sollte man nicht im Vorhinein genug Taschengeld sparen oder Mutti anbetteln wenn es nötig ist?
  • maybeto maybeto:
    Quatsch, einfach Ränge verkaufen. Damit wird man reich.....
  • Stern☆ Stern☆:
    Hmmm... dann läufts bestimmt. Am besten vorher Ränge einrichten bevor man das andere hat^^
  • maybeto maybeto:
    anderes braucht man eh nicht viel, ein Plugin für Ränge, Plotme und eins zum bannen
  • Stern☆ Stern☆:
    Bannen sollte kaufbar sein
  • Stern☆ Stern☆:
    Muss man dann selber nix mehr tun ;)
  • maybeto maybeto:
    gute Idee, du wirst CEO auf meinem Server
  • Stern☆ Stern☆:
    Darf ich als CEO dann auch vorden
  • Stern☆ Stern☆:
    Augen der anderen Cheaten?
  • maybeto maybeto:
    hm, klar. Wir brauchen noch ein Plugin zum trollen der Spieler
  • maybeto maybeto:
    und unser Server wird 25/8 online sein, nicht wie die anderen alle
  • M mor15€:
    SCH;N
  • maybeto maybeto:
    gute Nacht
  • Stern☆ Stern☆:
    Gutes Konzept mit den 25/8!!! Gn8 ^^
  • Matthias Matthias:
    Guten Morgen
    Matthias Matthias: Guten Morgen
    Oben