Solved I don't understand this crash

Discussion in 'Plugin Development' started by cdnyassuo34, Jul 25, 2019.

Thread Status:
Not open for further replies.
  1. Offline

    cdnyassuo34

    ok so , I am creating a server and creating my own plugins . but I had a crash report on the last one when lauching the server.
    here is the crash report:
    Code:
    [17:44:42 ERROR]: Error occurred while enabling snowduel v1.0 (Is it up to date?)
    java.lang.NullPointerException: null
            at fr.snowdingerr.snowduel.mainclass.StringToLoc(mainclass.java:165) ~[?:?]
            at fr.snowdingerr.snowduel.mainclass.onEnable(mainclass.java:63) ~[?:?]
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:265) ~[craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:339) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:409) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at org.bukkit.craftbukkit.v1_13_R2.CraftServer.enablePlugin(CraftServer.java:423) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at org.bukkit.craftbukkit.v1_13_R2.CraftServer.enablePlugins(CraftServer.java:349) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at org.bukkit.craftbukkit.v1_13_R2.CraftServer.reload(CraftServer.java:786) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at org.bukkit.Bukkit.reload(Bukkit.java:613) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:28) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at org.bukkit.craftbukkit.v1_13_R2.CraftServer.dispatchCommand(CraftServer.java:684) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at org.bukkit.craftbukkit.v1_13_R2.CraftServer.dispatchServerCommand(CraftServer.java:670) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at net.minecraft.server.v1_13_R2.DedicatedServer.handleCommandQueue(DedicatedServer.java:423) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:383) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:792) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:695) [craftbukkit-1.13.2.jar:git-Bukkit-84f3da3]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
    
    If anyone can help me solving this crash and fixing my plugin I would be very happy ^u^ thanks for reading
     
    Last edited by a moderator: Jul 25, 2019
  2. Offline

    CraftCreeper6

    @cdnyassuo34
    Can I see your plugin.yml,

    what version of Minecraft is your server running, and what version is your plugin using.
     
  3. Offline

    cdnyassuo34

    here is my plugin.yml
    Code:
    name: snowduel
    version: 1.0
    author: snowdingerr
    main: fr.snowdingerr.snowduel.mainclass
    
    commands:
      duel:
        permission: snowdingerr.duel
        description: permet de lancer une action de duel.
        aliases: [d,dueling]
    my server is on 1.13.2
    and my plugins are running with craftbukkit 1.13.2

    ^^ that's why I don't really understand my crash report
     
    Last edited by a moderator: Jul 25, 2019
  4. Offline

    CraftCreeper6

    @cdnyassuo34
    Can I see your main class?

    Add a description to your plugin.yml
     
  5. Offline

    cdnyassuo34

    here is my mainclass ^^
    hope you can see the problem ^^
    Code:
    package fr.snowdingerr.snowduel;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.ConfigurationSection;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import fr.snowdingerr.snowduel.arenas.Arena;
    import fr.snowdingerr.snowduel.arenas.ArenaListerners;
    import fr.snowdingerr.snowduel.arenas.ArenaManager;
    
    public class mainclass extends JavaPlugin {
       
        private Map<Player, Player> players = new HashMap<>();
        private ArenaManager am = new ArenaManager();
        private File arenaFile;
        private YamlConfiguration arenaConfig;
       
        @Override
        public void onEnable() {
            System.out.println("[SnowDuel] Le plugin est allumé. /duel help pour afficher les commandes disponibles");
            getCommand("duel").setExecutor(this);
            getServer().getPluginManager().registerEvents(new ArenaListerners(this), this);
           
            //création du fichier arena.yml si tu regarde le code évite de toucher à ça ^u^
            if(!getDataFolder().exists()) 
            {
                getDataFolder().mkdir();
            }
           
            arenaFile = new File(getDataFolder() + File.separator + "arena.yml");
           
            if(!arenaFile.exists())
            {
                try {
                    arenaFile.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
           
            //chargement du dossier config
           
            arenaConfig = YamlConfiguration.loadConfiguration(arenaFile);
           
            //charger les arènes
           
            ConfigurationSection arenaSection = arenaConfig.getConfigurationSection("arenas");
           
            for(String string : arenaSection.getKeys(false))
            {
                String loc1 = arenaSection.getString(string + ".loc1");
                String loc2 = arenaSection.getString(string + ".loc2");
                Arena arena = new Arena(StringToLoc(loc1), StringToLoc(loc2));
                am.addArena(arena);
            }
           
        }
        @Override
        public void onDisable() {
            System.out.println("[SnowDuel] le plugin est éteind.");
        }
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
           
            if(cmd.getName().equalsIgnoreCase("duel") && sender instanceof Player) 
            {
                Player player = (Player) sender;
               
                if(args.length == 0) {
                    player.sendMessage("§b/duel help pour afficher le menu d'aide");
                    return true;
                }
                else if(args.length == 1)
                {
                   
                    String targetName = args[0];
                   
                    if(args[0].equalsIgnoreCase("help")) 
                    {
                        player.sendMessage("§6------------------ §bCommands§6 1/1 ------------------");
                        player.sendMessage("§6/duel help : affiche le menu d'aide");
                        player.sendMessage("§6/duel <NomDuJoueur> : permet d'envoyer une demande de duel");
                        player.sendMessage("§6/duel accept : permet d'accepter un duel");
                        player.sendMessage("§6/duel deny : permet de refuser un duel");
                        player.sendMessage("§6/duel rank : affiche votre rang de duel");
                        player.sendMessage("§6/duel rank <NomDuJoueur> : affiche le rang du joueur");
                        return true;
                    }
                    else if(args[0].equalsIgnoreCase("rank")) 
                    {
                        player.sendMessage("§bvous êtes: §c");
                        return true;
                    }
                    else if(args[0].equalsIgnoreCase("accept")) 
                    {
                        if(players.containsKey(player)) {
                            player.sendMessage("§bVous avez accepté le duel ! §8lancement du duel...");
                           
                            Player asker = players.get(player);
                            asker.sendMessage("§ble combattant §a" + player +"§b a accepté votre demande de duel ! §8lancement du duel...");
                           
                            //la téléportation :o
                            am.joinArena(player , asker);
                           
                            players.remove(player);
                        }
                        return true;
                    }
                    else if(args[0].equalsIgnoreCase("deny")) 
                    {
                        if(players.containsKey(player)) 
                        {
                            player.sendMessage("§cvous venez de refuser le duel !");
                            players.get(player).sendMessage("§cLe joueur §a" + player.getName() + "§c a refusé votre demande de duel !");
                           
                            players.remove(player);
                        }
                        return  true;
                    }
                    else if(Bukkit.getPlayer(targetName) != null) 
                    {
                        Player target = Bukkit.getPlayer(targetName);
                       
                        if(players.containsKey(target)) 
                        {
                            player.sendMessage("§bLe joueur que vous avez demandé en duel a déjà une demande en cours");
                            return true;
                        }
                       
                        players.put(target, player);
                        player.sendMessage("§bVous venez de demander en duel §a" + target.getName());
                        target.sendMessage("§ble combattant §a" + player.getName() + "§b vous a demandé en duel !");
                        target.sendMessage("§bfaites §e/duel accept §b pour accepter et §e/duel deny §bpour");
                        target.sendMessage("§brefuser le duel");
                        return true;
                       
                       
                    }
                   
               
                }
            }
               
            return false;
        }
        public ArenaManager getArenaManager() {
            return am;
        }
        public void setAm(ArenaManager am) {
            this.am = am;
        }
       
        public Location StringToLoc(String string)
        {
            String[] parsedLoc = string.split(",");
            double x = Double.valueOf(parsedLoc[0]);
            double y = Double.valueOf(parsedLoc[1]);
            double z = Double.valueOf(parsedLoc[2]);
           
            return new Location(Bukkit.getWorld("duels"), x, y, z);
        }
       
        public String LocToString(Location loc)
        {
            return loc.getBlockX() + "," + loc.getY() + "," +loc.getZ();
        }
    
    }
     
  6. Offline

    KarimAKL

    @cdnyassuo34 It would seem 'loc1' or 'loc2' is null when you do 'Arena arena = new Arena(StringToLoc(loc1), StringToLoc(loc2));'
     
  7. Offline

    cdnyassuo34

    then I am confused :/ the loc1 and loc2 have a value in the arena.yml
    maybe the file don't work :/
     
  8. Offline

    KarimAKL

  9. Offline

    cdnyassuo34

    Code:
    arenas:
      arena1:
        loc1:10,5,10
        loc2:-10,5,-10
      arena2:
        loc1:10,5,10
        loc2:-10,5,-10
      arena3:
        loc1:10,5,10
        loc2:-10,5,-10
      arena4:
        loc1:10,5,10
        loc2:-10,5,-10
      arena5:
        loc1:10,5,10
        loc2:-10,5,-10
     
  10. Offline

    Kars

    @cdnyassuo34 this is what your yml is being interpreted as, and it is the reason why your variables are null.
    Code:
    arenas:
      arena1: "loc1:10,5,10 loc2:-10,5,-10"
      arena2: "loc1:10,5,10 loc2:-10,5,-10"
      arena3: "loc1:10,5,10 loc2:-10,5,-10"
      arena4: "loc1:10,5,10 loc2:-10,5,-10"
      arena5: "loc1:10,5,10 loc2:-10,5,-10"
     
  11. Offline

    KarimAKL

    @cdnyassuo34 Try adding a space after the colon.
    From this:
    Code:
    loc1:10,5,10
    To this:
    Code:
    loc1: 10,5,10
     
    cdnyassuo34 likes this.
  12. Offline

    cdnyassuo34

    adding space after loc1: was the solution ^^ thanks ^^
    so all the problems were coming from the arena.yml :/
    thank you so much for helping me ^^
     
    KarimAKL likes this.
Thread Status:
Not open for further replies.

Share This Page