NoSuchElementException: No Line Found Help

Discussion in 'Plugin Development' started by xMakerx, May 19, 2013.

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

    xMakerx

    So I'm coding a plugin and I keep getting an error, here's the code and the error:


    NemesisEvents.java
    Code:
    package xmx.nem;
     
    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    import java.util.logging.Logger;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Sound;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
     
    public class NemesisEvents implements Listener {
       
        public static Nemesis plugin;
        public final Logger logger = Logger.getLogger("Minecraft");
       
        public NemesisEvents(Nemesis instance) {
            plugin = instance;
        }
       
        @EventHandler(priority = EventPriority.HIGH)
        public void onPlayerJoin(PlayerJoinEvent e) {
            Player player = e.getPlayer();
              File[] dirlist = plugin.getDataFolder().listFiles();
     
              for(int i = 0; i < dirlist.length; i++) {
                if(dirlist[i].isFile()) {
                } else if(!dirlist[i].getName().matches(player.getName() + ".yml")) {
                    File user;
                    user = new File(plugin.getDataFolder(), (player.getName() + ".yml"));
                    if(!user.exists()) {
                    try {
                        user.createNewFile();
                        FileWriter fw = new FileWriter(user, true);
                        fw.write("# -" + player.getName() + " Data -\n\n");
                        fw.write("Kills: " + 0 + "\n");
                        fw.write("Deaths: " + 0 + "\n");
                        //fw.write("Dominations: " + "\n");
                        fw.close();
                        FileConfiguration editor = YamlConfiguration.loadConfiguration(user);
                        List<String> list = editor.getStringList("Dominations");
                        list.add("example");
                        editor.set("Dominations", list);
                        try {
                            editor.save(user);
                           
                        }catch(IOException z) {
                            z.getStackTrace();
                        }
                    }catch(IOException z) {
                        z.getStackTrace();
                    }
                }
              }
              }       
        }
       
        public void announceDomination(Player dead, Player nemesis) {
            Player defeated = dead;
            Player killer = nemesis;
            Bukkit.broadcastMessage(Nemesis.pluginPrefix + ChatColor.RED + killer.getName() + ChatColor.GREEN + " is dominating " + ChatColor.RED + defeated.getName());
            killer.playSound(killer.getLocation(), Sound.ANVIL_LAND, 10F, 10F);
        }
       
        public void announceRevenge(Player nemesis, Player killer) {
            Player dead = nemesis;
            Player attacker = killer;
            Bukkit.broadcastMessage(Nemesis.pluginPrefix + ChatColor.RED + attacker.getName() + ChatColor.GREEN + " got a revenge kill on " + ChatColor.RED + dead.getName());
            attacker.playSound(attacker.getLocation(), Sound.ANVIL_BREAK, 10F, 10F);
        }
       
        @EventHandler
        public void onPlayerDeath(PlayerDeathEvent e) {
            Player dead = e.getEntity();
            Player killer;
            FileConfiguration deadConf;
            FileConfiguration killerConf;
            FileConfiguration killerConf02;
                File[] dirlist = plugin.getDataFolder().listFiles();
                File killerFile;
                File killerFile02;
                Bukkit.broadcastMessage("SHSdf");
                    if(e.getEntity().getKiller() instanceof Player) {
                        killer = dead.getKiller();
                        for(int i = 0; i < dirlist.length; i++) {
                            if(dirlist[i].isFile()) {
                                if(dirlist[i].getName().matches(dead.getName() + ".yml")) {
                                    File deadFile = dirlist[i].getAbsoluteFile();
                                    deadConf = YamlConfiguration.loadConfiguration(deadFile);
                                    Bukkit.broadcastMessage("MEOW");
                                    List<String> dominations = deadConf.getStringList("Dominations");
                                    for(int d = 0; d < dominations.size(); d++) {
                                        if(dominations.get(d).matches(killer.getName())) {
                                            dominations.remove(d);
                                            announceRevenge(dead, killer);
                                            Bukkit.broadcastMessage("BETCH");
                                            killerFile = new File(plugin.getDataFolder() + "/" + killer.getName() + ".yml");
                                            killerConf = YamlConfiguration.loadConfiguration(killerFile);
                                            int kills = killerConf.getInt("Kills");
                                            kills = kills + 1;
                                        }else if(!(dominations.get(d).matches(killer.getName()))) {
                                            Bukkit.broadcastMessage("SADJASD");
                                            killerFile02 = FileSearcher(killer);
                                            killerConf02 = YamlConfiguration.loadConfiguration(killerFile02);
                                            int killerkills = killerConf02.getInt("Kills");
                                            killerkills = killerkills + 1;
                                            try {
                                                Bukkit.broadcastMessage("WOOF");
                                                Scanner scanner = new Scanner(killerFile02, "UTF-8");;
                                                String currentLine = scanner.nextLine();
                                                while(scanner.hasNextLine()) {
                                                  currentLine = scanner.nextLine();
                                                    Bukkit.broadcastMessage("ASDNABNdbsASNBDMANSdnm");
                                                    if(scanner.nextLine().contains(dead.getName())) {
                                                    int deadkills = killerConf02.getInt(dead.getName());
                                                    deadkills = deadkills + 1;
                                                    Bukkit.broadcastMessage("SJDKASKDAKHSd");
                                                    if(deadkills >= 3) {
                                                        List<String> killerdominations = killerConf02.getStringList("Dominations");
                                                        for(int k = 0; k < killerdominations.size(); k++) {
                                                            if(!(killerdominations.get(k).matches(dead.getName()))) {
                                                                killerdominations.add(dead.getName());
                                                                announceDomination(dead, killer);
                                                            }
                                                        }
                                                    }else if(!(scanner.nextLine().contains(dead.getName()))) {
                                                        Bukkit.broadcastMessage("BETCH");
                                                            killerConf02.set("\n" + dead.getName(), 1);
                                                    }
                                                    }
                                                    }
                                                scanner.close();
                                                } catch (FileNotFoundException z) {
                                                    // TODO Auto-generated catch block
                                                    z.printStackTrace();
                                                }
                                                       
                                                  }
                                            }
                                        }
                                    }
                                }
                    }
        }
       
        public static File FileSearcher(Player player) {
            File result = null; // no need to store result as String, you're returning File anyway
              File[] dirlist = plugin.getDataFolder().listFiles();
             
                for(int i = 0; i < dirlist.length; i++) {
                    if(dirlist[i].isFile()) {
                        if(dirlist[i].getName().matches(player.getName() + ".yml")) {
                            return dirlist[i].getAbsoluteFile();
                        }
                    }
                }
                return null;
        }
    }
    
    Main Class:
    Code:
    package xmx.nem;
     
    import java.io.File;
    import org.bukkit.ChatColor;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Nemesis extends JavaPlugin {
       
        public static Nemesis plugin;
        public static String pluginPrefix = (ChatColor.GREEN + "[" + ChatColor.YELLOW + "Nemesis" + ChatColor.GREEN + "] " + ChatColor.GREEN);
       
        public void onEnable() {
            getServer().getPluginManager().registerEvents(new NemesisEvents(this), this);
            createUserDataFolder();
        }
       
        public void createUserDataFolder() {
           
            /**
            * Create the userdata folder for the plugin to store data.
            */
           
            File userdatafolder = new File(this.getDataFolder() + File.separator + "userdata");
           
                if(!this.getDataFolder().exists()) {
                    this.getDataFolder().mkdirs();
                }else {
                    if(!userdatafolder.exists()) {
                        userdatafolder.mkdirs();
                    }
                }
               
        }
       
    }
    
    Error:
    Code:
    2013-05-19 08:06:45 [SEVERE] Could not pass event PlayerDeathEvent to Nemesis v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
        at org.bukkit.craftbukkit.v1_5_R3.event.CraftEventFactory.callPlayerDeathEvent(CraftEventFactory.java:340)
        at net.minecraft.server.v1_5_R3.EntityPlayer.die(EntityPlayer.java:293)
        at net.minecraft.server.v1_5_R3.EntityLiving.damageEntity(EntityLiving.java:750)
        at net.minecraft.server.v1_5_R3.EntityHuman.damageEntity(EntityHuman.java:684)
        at net.minecraft.server.v1_5_R3.EntityPlayer.damageEntity(EntityPlayer.java:358)
        at net.minecraft.server.v1_5_R3.EntityHuman.attack(EntityHuman.java:874)
        at net.minecraft.server.v1_5_R3.PlayerConnection.a(PlayerConnection.java:1101)
        at net.minecraft.server.v1_5_R3.Packet7UseEntity.handle(SourceFile:36)
        at net.minecraft.server.v1_5_R3.NetworkManager.b(NetworkManager.java:292)
        at net.minecraft.server.v1_5_R3.PlayerConnection.d(PlayerConnection.java:109)
        at net.minecraft.server.v1_5_R3.ServerConnection.b(SourceFile:35)
        at net.minecraft.server.v1_5_R3.DedicatedServerConnection.b(SourceFile:30)
        at net.minecraft.server.v1_5_R3.MinecraftServer.r(MinecraftServer.java:581)
        at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:226)
        at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:477)
        at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:410)
        at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573)
    Caused by: java.util.NoSuchElementException: No line found
        at java.util.Scanner.nextLine(Unknown Source)
        at xmx.nem.NemesisEvents.onPlayerDeath(NemesisEvents.java:131)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
        ... 20 more
    I need an answer ASAP, please help me out, thank you :D
     
  2. Offline

    Technius

    xMakerx
    Just make
    Code:
    String currentLine = scanner.nextLine();
    this:
    Code:
    String currentLine;
     
  3. Offline

    socram8888

    Well, as the Exception points out, the file you're trying to read is empty and does not contain any line.
     
  4. Offline

    xMakerx

    How exactly? Upon player join it creates a .yml file with information in it, when I go to view the file it does indeed have the information needed in it. But, maybe. I've never had this error before, thanks for your advise though.

    Update:

    Removed the currentline variables and the code doesn't go past: Bukkit.broadcastMessage("ASDNABNdbsASNBDMANSdnm");

    Here's my updated code:
    Code:
    package xmx.nem;
     
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.List;
    import java.util.Scanner;
    import java.util.logging.Logger;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Sound;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
     
    public class NemesisEvents implements Listener {
       
        public static Nemesis plugin;
        public final Logger logger = Logger.getLogger("Minecraft");
       
        public NemesisEvents(Nemesis instance) {
            plugin = instance;
        }
       
        @EventHandler(priority = EventPriority.HIGH)
        public void onPlayerJoin(PlayerJoinEvent e) {
            Player player = e.getPlayer();
              File[] dirlist = plugin.getDataFolder().listFiles();
     
              for(int i = 0; i < dirlist.length; i++) {
                if(dirlist[i].isFile()) {
                } else if(!dirlist[i].getName().matches(player.getName() + ".yml")) {
                    File user;
                    user = new File(plugin.getDataFolder(), (player.getName() + ".yml"));
                    if(!user.exists()) {
                    try {
                        user.createNewFile();
                        FileWriter fw = new FileWriter(user, true);
                        fw.write("# -" + player.getName() + " Data -\n\n");
                        fw.write("Kills: " + 0 + "\n");
                        fw.write("Deaths: " + 0 + "\n");
                        //fw.write("Dominations: " + "\n");
                        fw.close();
                        FileConfiguration editor = YamlConfiguration.loadConfiguration(user);
                        List<String> list = editor.getStringList("Dominations");
                        list.add("example");
                        editor.set("Dominations", list);
                        try {
                            editor.save(user);
                           
                        }catch(IOException z) {
                            z.getStackTrace();
                        }
                    }catch(IOException z) {
                        z.getStackTrace();
                    }
                }
              }
              }       
        }
       
        public void announceDomination(Player dead, Player nemesis) {
            Player defeated = dead;
            Player killer = nemesis;
            Bukkit.broadcastMessage(Nemesis.pluginPrefix + ChatColor.RED + killer.getName() + ChatColor.GREEN + " is dominating " + ChatColor.RED + defeated.getName());
            killer.playSound(killer.getLocation(), Sound.ANVIL_LAND, 10F, 10F);
        }
       
        public void announceRevenge(Player nemesis, Player killer) {
            Player dead = nemesis;
            Player attacker = killer;
            Bukkit.broadcastMessage(Nemesis.pluginPrefix + ChatColor.RED + attacker.getName() + ChatColor.GREEN + " got a revenge kill on " + ChatColor.RED + dead.getName());
            attacker.playSound(attacker.getLocation(), Sound.ANVIL_BREAK, 10F, 10F);
        }
       
        @EventHandler
        public void onPlayerDeath(PlayerDeathEvent e) {
            Player dead = e.getEntity();
            Player killer;
            FileConfiguration deadConf;
            FileConfiguration killerConf;
            FileConfiguration killerConf02;
                File[] dirlist = plugin.getDataFolder().listFiles();
                File killerFile;
                File killerFile02;
                Bukkit.broadcastMessage("SHSdf");
                    if(e.getEntity().getKiller() instanceof Player) {
                        killer = dead.getKiller();
                        for(int i = 0; i < dirlist.length; i++) {
                            if(dirlist[i].isFile()) {
                                if(dirlist[i].getName().matches(dead.getName() + ".yml")) {
                                    File deadFile = dirlist[i].getAbsoluteFile();
                                    deadConf = YamlConfiguration.loadConfiguration(deadFile);
                                    Bukkit.broadcastMessage("MEOW");
                                    List<String> dominations = deadConf.getStringList("Dominations");
                                    for(int d = 0; d < dominations.size(); d++) {
                                        if(dominations.get(d).matches(killer.getName())) {
                                            dominations.remove(d);
                                            announceRevenge(dead, killer);
                                            Bukkit.broadcastMessage("BETCH");
                                            killerFile = new File(plugin.getDataFolder() + "/" + killer.getName() + ".yml");
                                            killerConf = YamlConfiguration.loadConfiguration(killerFile);
                                            int kills = killerConf.getInt("Kills");
                                            kills = kills + 1;
                                        }else if(!(dominations.get(d).matches(killer.getName()))) {
                                            Bukkit.broadcastMessage("SADJASD");
                                            killerFile02 = FileSearcher(killer);
                                            killerConf02 = YamlConfiguration.loadConfiguration(killerFile02);
                                            int killerkills = killerConf02.getInt("Kills");
                                            killerkills = killerkills + 1;
                                            try {
                                                Bukkit.broadcastMessage("WOOF");
                                                Scanner scanner = new Scanner(killerFile02, "UTF-8");;
                                                while(scanner.hasNextLine()) {
                                                    Bukkit.broadcastMessage("ASDNABNdbsASNBDMANSdnm");
                                                    if(scanner.nextLine().contains(dead.getName())) {
                                                    int deadkills = killerConf02.getInt(dead.getName());
                                                    deadkills = deadkills + 1;
                                                    Bukkit.broadcastMessage("SJDKASKDAKHSd");
                                                    if(deadkills >= 3) {
                                                        List<String> killerdominations = killerConf02.getStringList("Dominations");
                                                        for(int k = 0; k < killerdominations.size(); k++) {
                                                            if(!(killerdominations.get(k).matches(dead.getName()))) {
                                                                killerdominations.add(dead.getName());
                                                                announceDomination(dead, killer);
                                                            }
                                                        }
                                                    }else if(!(scanner.nextLine().contains(dead.getName()))) {
                                                        Bukkit.broadcastMessage("BETCH");
                                                            killerConf02.set("\n" + dead.getName(), 1);
                                                    }
                                                    }
                                                    }
                                                scanner.close();
                                                } catch (FileNotFoundException z) {
                                                    // TODO Auto-generated catch block
                                                    z.printStackTrace();
                                                }
                                                       
                                                  }
                                            }
                                        }
                                    }
                                }
                    }
        }
       
        public static File FileSearcher(Player player) {
              File[] dirlist = plugin.getDataFolder().listFiles();
             
                for(int i = 0; i < dirlist.length; i++) {
                    if(dirlist[i].isFile()) {
                        if(dirlist[i].getName().matches(player.getName() + ".yml")) {
                            return dirlist[i].getAbsoluteFile();
                        }
                    }
                }
                return null;
        }
    }
    
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 1, 2016
  5. xMakerx
    I belive you must use scanner.hasNext() to be sure it has a next line before getting the line.
     
  6. Offline

    Technius

    xMakerx
    Stack trace please.

    If you really can't fix this, you could use a BufferedReader instead:
    Code:
    BufferedReader br = new BufferedReader(new FileInputStream(new File("File name")));
    String l;
    while((l=br.readLine()) != null)
    {
         //Do stuff
    }
    
     
  7. Offline

    xMakerx

    Technius
    How would I check if it's at the final line and see if the line contains the dead.getName() ?
     
  8. Offline

    Technius

    xMakerx You could try something like this:
    Code:
    BufferedReader br = new BufferedReader(new FileInputStream(new File("File name")));
    String l;
    String last;
    while((l=br.readLine()) != null)
    {
         last = l;
         //Do stuff
    }
    
     
  9. Offline

    ZeusAllMighty11

    I had an issue like this once, it's because I did:

    Code:
    Scanner sc =...
     
    while(sc.hasNext()){
        Object next= sc.next();
        if(next...)
    }
    
    as opposed to keep doing sc.next()
     
Thread Status:
Not open for further replies.

Share This Page