ServerPlugin NullPointerException - Aber warum?

Dieses Thema im Forum "Programmierung" wurde erstellt von MineHarry, 21. Dezember 2013.

  1. MineHarry
    Offline

    MineHarry

    Registriert seit:
    15. September 2012
    Beiträge:
    35
    Minecraft:
    MineHarry01
    Ich programmiere derzeit für einen Privaten Server ein Plugin, unter benutzung von WorldEdit, WorldGuard, WGCustomFlags.
    Ich nutze CraftBukkit in der version git-Spigot-1192 mit Java 7 x64 unter Windows 8.1 x64.
    Folgendes Sagt das ErrorLog:
    Code (Text):
    1. [18:53:49] [Server thread/INFO]: Starting minecraft server version 1.7.2[18:53:49] [Server thread/INFO]: Loading properties
    2. [18:53:49] [Server thread/INFO]: Default game type: SURVIVAL
    3. [18:53:49] [Server thread/INFO]: This server is running CraftBukkit version git-Spigot-1192 (MC: 1.7.2) (Implementing API version 1.7.2-R0.1-SNAPSHOT)
    4. [18:53:49] [Server thread/INFO]: Using 3 threads for Netty based IO
    5. [18:53:49] [Server thread/INFO]: Generating keypair
    6. [18:53:49] [Server thread/INFO]: Starting Minecraft server on 127.0.0.1:25565
    7. [18:53:50] [Server thread/ERROR]: Could not load 'plugins\vanillasystem.jar' in folder 'plugins'
    8. org.bukkit.plugin.InvalidPluginException: java.lang.NullPointerException
    9.     at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:182) ~[spigot.jar:git-Spigot-1192]
    10.     at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:306) ~[spigot.jar:git-Spigot-1192]
    11.     at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:230) [spigot.jar:git-Spigot-1192]
    12.     at org.bukkit.craftbukkit.v1_7_R1.CraftServer.loadPlugins(CraftServer.java:259) [spigot.jar:git-Spigot-1192]
    13.     at net.minecraft.server.v1_7_R1.DedicatedServer.init(DedicatedServer.java:133) [spigot.jar:git-Spigot-1192]
    14.     at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:430) [spigot.jar:git-Spigot-1192]
    15.     at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [spigot.jar:git-Spigot-1192]
    16. Caused by: java.lang.NullPointerException
    17.     at de.henry_herrgesell.VanillaSystem.VanillaSystem.<init>(VanillaSystem.java:68) ~[?:?]
    18.     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.7.0_45]
    19.     at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.7.0_45]
    20.     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.7.0_45]
    21.     at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.7.0_45]
    22.     at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:178) ~[spigot.jar:git-Spigot-1192]
    23.     ... 6 more
    Hier die betreffenden zeilen...
    Code (Text):
    1.  
    2. Z40 public final class VanillaSystem extends JavaPlugin implements Listener {
    3. Z64 public static BooleanFlag LABY_END = new BooleanFlag("LABY-END");Z65    public Player fplayer = null;
    4. Z66 public int mitspieler = 0;
    5. Z67 public int fertigespieler = 0;
    6. Z68 public Location Stadion = new Location(getServer().getWorld("Stadion"), 839.54015, 60, -1358.16201);
    7. Z69 public Location Laby = new Location(getServer().getWorld("Weihnachten"), 116.22765, 70, 211.70946);
    8. Z70 public Location Spawn = new Location(getServer().getWorld("world"), 174.18, 70, 241.74);
    9. Z71 public Location WH = new Location(getServer().getWorld("Weihnachten"), 83.28643, 64, 188.46992);
    10. Z72 public Location Stadion_Mitte = new Location(getServer().getWorld("Stadion"), 850.35139, 49, -1385.7);
    Abgerufen werden die Locations über ein Playerobjekt für ein Teleport:
    Code (Text):
    1. player.teleport(Spawn);
    Ich bin echt am verzweifeln, woran es liegt...
    Die Locations hatte ich vorher kreuz und quer im code verteilt, und da ging es noch. Jedoch wollte ich jetzt aufräumen, seitdem geht das einfach nichtmehr.

    Ich bin für jeden Hinweis dankbar

    MfG
     
    #1
  2. Spedy123456
    Offline

    Spedy123456

    Registriert seit:
    13. November 2011
    Beiträge:
    17
    Minecraft:
    Spedy123456
    *Removed*
    -----
     
    #2
  3. MineHarry
    Offline

    MineHarry

    Registriert seit:
    15. September 2012
    Beiträge:
    35
    Minecraft:
    MineHarry01
    Hi,
    wie kommst du darauf das es mit onEnable / onDisable zusammenhängen könnte?
    Ich glaube auch nicht das dort ein fehler vorliegt:
    Code (Text):
    1.  
    2.     @Override   public void onEnable(){
    3.         registerEvents();
    4.         getWGCustomFlags().loadAllWorlds();
    5.         getWGCustomFlags().addCustomFlag(LABY_END);
    6.         getLogger().info("VanillaSystem aktiviert!");
    7.     }
    8.     @Override
    9.     public void onDisable(){
    10.         getWGCustomFlags().saveAllWorlds(true);
    11.         getLogger().info("VanillaSystem deaktiviert!");
    12.     }
     
    #3
  4. Spedy123456
    Offline

    Spedy123456

    Registriert seit:
    13. November 2011
    Beiträge:
    17
    Minecraft:
    Spedy123456
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader

    Deshalb dachte ich, aber hab wie gesagt keine Ahnung davon ^^

    Edit:
    at de.henry_herrgesell.VanillaSystem.VanillaSystem.<init>(VanillaSystem.java:68) ~[?:?]
    Was steht da denn in Zeile 68, vielleicht da der Fehler?
     
    #4
  5. MineHarry
    Offline

    MineHarry

    Registriert seit:
    15. September 2012
    Beiträge:
    35
    Minecraft:
    MineHarry01
    Achso np.
    In Zeile 68 steht
    Code (Text):
    1. [COLOR=#444444]public Location Stadion = new Location(getServer().getWorld("Stadion"), 839.54015, 60, -1358.16201);[/COLOR]
    Wie auch geschrieben unter Betreffende Zeilen im 1. Post. Ich farge mich wie dabei ein Null-Point exception auftreten kann, da die Welt Stadion vorhanden ist. Ich kann mir nicht erklären wo ein wert null auftreten soll/kann.
     
    #5
  6. NeoVir
    Offline

    NeoVir

    Registriert seit:
    24. Juli 2013
    Beiträge:
    6
    Wird die Welt davor geladen?
    Soweit ich weiss kannst du keine Spieler in eine Welt teleportieren die nicht geladen ist
     
    #6
  7. MineHarry
    Offline

    MineHarry

    Registriert seit:
    15. September 2012
    Beiträge:
    35
    Minecraft:
    MineHarry01
    Hmm, interesannter Aspeckt. Der teleport wird zwar relativ spät nach laden des Plugins ausgeführt, jedoch wird ja die Location direkt initialisiert. Was wäre die bessere variante? Initalisieren der Location nach hinten verschieben - oder Bukkit dazu zwingen alle welten vorher zu laden?
     
    #7
  8. NeoVir
    Offline

    NeoVir

    Registriert seit:
    24. Juli 2013
    Beiträge:
    6
    Versuch mal davor die Zeile zu schalten
    Code (Text):
    1. if (Bukkit.getWorlds().contains("Stadion")) {
    2. //CODE
    3. }
     
    #8
  9. MineHarry
    Offline

    MineHarry

    Registriert seit:
    15. September 2012
    Beiträge:
    35
    Minecraft:
    MineHarry01
    Danke, das werde ich gleich mal ausprobieren.
    Jedoch erstmal neue Erkenntnisse zum Problem:
    Ich habe mal stellen auskommentiert, die mit Abhängigkeiten der anderen Plugins zutun haben (WorldGuard Regionen, WorldEdit tools, WGCustomFLags Definitionen). Nach dem Auskommentieren scheint das Plugin jetzt wieder zu laufen, daher vermute ich, dass die Fehlermeldung nicht konkret auf die Locations verweist sondern eher ein Problem bei dem zusammenspiel mit WorldEdit/WorldGuard Regionen und der Locations. Denn die Locations alleine ergeben nicht nur keinen Fehler, sondern funktionieren zudem auch noch.

    hauptsächlich habe ich nur dieses Event auskommentiert:
    Code (Text):
    1.  
    2.     public void onPlayerMove(PlayerMoveEvent e) {            WorldGuardPlugin worldGuard = getWorldGuard();
    3.         if(worldGuard == null) {
    4.             return;
    5.         }
    6.         com.sk89q.worldedit.Vector pt = toVector(e.getTo().getBlock().getLocation()); // This also takes a location
    7.          
    8.         RegionManager regionManager = worldGuard.getRegionManager(e.getTo().getWorld());
    9.         ApplicableRegionSet set = regionManager.getApplicableRegions(pt);
    10.         if (set.getFlag(LABY_END) == true) {
    11.             Player p = e.getPlayer();
    12.             p.addPotionEffect(PotionEffectType.NIGHT_VISION.createEffect(10, 1));
    13.             p.addPotionEffect(PotionEffectType.SATURATION.createEffect(10, 1));
    14.             p.addPotionEffect(PotionEffectType.SPEED.createEffect(10, 10));
    15.             p.teleport(laby);
    16.             if(fplayer == null) {
    17.                 getServer().broadcastMessage(ChatColor.translateAlternateColorCodes('&', "&6[&4Weihnachten&6] &bSpieler &6" + p.getDisplayName()  + " &bhat das Labyrinth als erstes geschafft!"));
    18.                 p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6[&4Weihnachten&6] &bDu hast das Labyrinth als erstes geschafft. Du kannst jetzt die anderen Spieler beobachten. Dir steht auch frei bis zur Siegerehrung das Event zu verlassen."));
    19.                 p.setLevel(p.getLevel() + 100);
    20.             } else {
    21.                 getServer().broadcastMessage(ChatColor.translateAlternateColorCodes('&', "&6[&4Weihnachten&6] &bSpieler &6" + p.getDisplayName()  + " &bhat das Labyrinth geschafft!"));
    22.                 p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6[&4Weihnachten&6] &bDu hast das Labyrinth geschafft. Du kannst jetzt die anderen Spieler beobachten. Dir steht auch frei bis zur Siegerehrung das Event zu verlassen."));
    23.                 p.setLevel(p.getLevel() + 60);
    24.             }
    25.             if(fertigespieler < mitspieler) {
    26.                 fertigespieler++;
    27.             } else {
    28.                 getServer().broadcastMessage(ChatColor.translateAlternateColorCodes('&', "&6[&4Weihnachten&6] &bAlle Spieler haben das Labyrinth geschafft!"));
    29.                 getServer().broadcastMessage(ChatColor.translateAlternateColorCodes('&', "&6[&4Weihnachten&6] &bTelepotiere nun alle zur Siegerehrung..."));
    30.                 for(Player pl : Bukkit.getOnlinePlayers()){
    31.                      pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6[&4Weihnachten&6] &bDu wirst nun zur Siegerehrung telepotiert!"));
    32.                      pl.addPotionEffect(PotionEffectType.WEAKNESS.createEffect(20, 100));
    33.                      pl.getWorld().playSound(p.getLocation(), Sound.ENDERMAN_TELEPORT, 100, 1);
    34.                      pl.teleport(stadion);
    35.                  }
    36.                 fertigespieler = 0;
    37.             }
    38.         }
    39.        
    40.     }
    Ich weiß, das ist nicht grade schön Programmiert, aber sobald ich es besser kann optimiere ich es. Das ändert auch nichts an dem Momentanem Problem.
     
    #9