Getting my plugin to write on a text file...

Discussion in 'Plugin Development' started by aidancbrady, Mar 13, 2012.

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

    aidancbrady

    Hey all. I have been coding a slightly experimental plugin, the goal of which is to log a player's name and IP every time he connects. I set up code for file writing in the onPlayerJoin() method, and although it generates the file and gives me no errors, it simply won't write. Any ideas? Oh, you may need this.

    Main class:

    <EDIT: Added "writer.append" (thanks to manniL) and another "if" statement (thanks to Sorrow). Still won't work. Any ideas?>

    Code:
    package org.orecraft.orecraftcore;
     
    import java.io.File;
    import java.io.IOException;
    import java.util.logging.Logger;
     
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class OreCraftCore extends JavaPlugin {
     
        public OreCraftCore()
        {
            super();
        }
     
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
        {
            if (sender instanceof Player) {
                String command = cmd.getName().toLowerCase();
                Player player = (Player)sender;
                if (command.equals("oc") || command.equals("occ") || command.equals("orecraft") || command.equals("orecraftcore")) {
                    String param1 = args.length > 0 ? args[0] : "";
                    String param2 = args.length > 1 ? args[1] : "";
     
                    //Info Command
               
                    if (param1.equals("info")) {
                        if (player.hasPermission("orecraft.info")) {
                            player.sendMessage(ChatColor.BLUE + "----------OreCraftCore------------");
                            player.sendMessage(ChatColor.GRAY + "  You are running" + ChatColor.DARK_GRAY + " OreCraftCore" + ChatColor.GRAY + " version" + ChatColor.GOLD + " 1.0.0.");
                            player.sendMessage(ChatColor.GRAY + "  Plugin is currently " + ChatColor.GREEN + "enabled.");
                            player.sendMessage(ChatColor.GRAY + "  Type " + ChatColor.DARK_GRAY + "/orecraft help " + ChatColor.GRAY + "for a list of commands.");
                            player.sendMessage(ChatColor.BLUE + "----------------------------------");
                            return true;
                        }
                        else {
                            player.sendMessage(ChatColor.RED + "You don't have permission to use this command.");
                        }
                    }
               
                    //Credits Command
               
                    else if (param1.equals("credits")) {
                        if (player.hasPermission("orecraft.credits")) {
                            player.sendMessage(ChatColor.BLUE + "----------OreCraftCore----------");
                            player.sendMessage(ChatColor.GRAY + "  Programmed and compiled by " + ChatColor.DARK_GRAY + "Aidan Brady.");
                            player.sendMessage(ChatColor.GRAY + "  Made using " + ChatColor.DARK_GRAY + "Eclipse build 20110916-0149");
                            player.sendMessage(ChatColor.GRAY + "  Referenced with " + ChatColor.DARK_GRAY + "Bukkit 1.2.3-R0.2 API Developer Snapshot");
                            player.sendMessage(ChatColor.BLUE + "--------------------------------");
                            return true;
                        }
                        else {
                            player.sendMessage(ChatColor.RED + "You don't have permission to use this command.");
                        }
                    }
               
                    //Help Command
               
                    else if (param1.equals("help")) {
                        if (player.hasPermission("orecraft.help")) {
                            if (param2.equals("")) {
                                player.sendMessage(ChatColor.BLUE + "----------OreCraftCore----------");
                                player.sendMessage(ChatColor.DARK_GRAY + "  /orecraft help " + ChatColor.GRAY + "- displays help for OreCraftCore.");
                                player.sendMessage(ChatColor.DARK_GRAY + "  /orecraft help <cmd> " + ChatColor.GRAY + "- displays help for a command.");
                                player.sendMessage(ChatColor.DARK_GRAY + "  /orecraft credits " + ChatColor.GRAY + "- displays credits for OreCraftCore.");
                                player.sendMessage(ChatColor.DARK_GRAY + "  /orecraft stats " + ChatColor.GRAY + "- displays stats for OreCraftCore.");
                                player.sendMessage(ChatColor.DARK_GRAY + "  /orecraft info " + ChatColor.GRAY + "- displays info for OreCraftCore.");
                                player.sendMessage(ChatColor.BLUE + "--------------------------------");
                                return true;
                            }
                       
                            else if (param2.equals("help")) {
                                player.sendMessage(ChatColor.DARK_GRAY + "/orecraft help " + ChatColor.GRAY + "- displays help for OreCraftCore.");
                                return true;
                            }
                            else if (param2.equals("stats")) {
                                player.sendMessage(ChatColor.DARK_GRAY + "/orecraft stats " + ChatColor.GRAY + "- displays stats for OreCraftCore.");
                                return true;
                            }
                            else if (param2.equals("info")) {
                                player.sendMessage(ChatColor.DARK_GRAY + "/orecraft info " + ChatColor.GRAY + "- displays info for OreCraftCore.");
                                return true;
                            }
                            else if (param2.equals("credits")) {
                                player.sendMessage(ChatColor.DARK_GRAY + "/orecraft credits " + ChatColor.GRAY + "- displays credits for OreCraftCore.");
                            return true;
                            }
                            else {
                                player.sendMessage(ChatColor.GRAY + "Command not recognized. Try another.");
                                return true;
                            }
                        }
                        else {
                            player.sendMessage(ChatColor.RED + "You don't have permission to use this command.");
                        }
                    }
               
                    //Stats Command
               
                    else if (param1.equals("stats")) {
                        if (player.hasPermission("orecraft.stats")) {
                            int totalPlayers = (getServer().getOfflinePlayers().length + getServer().getOnlinePlayers().length);
                            int onlinePlayers = getServer().getOnlinePlayers().length;
                            int maxSlots = getServer().getMaxPlayers();
                            String serverName = getServer().getName();
                            String serverIP = getServer().getIp();
                            int serverPort = getServer().getPort();
                            int serverOPs = getServer().getOperators().size();
                            String bukkitVersion = getServer().getBukkitVersion();
                            String minecraftVersion = getServer().getVersion();
                            player.sendMessage(ChatColor.BLUE + "----------OreCraftCore----------");
                            player.sendMessage(ChatColor.GRAY + "  There are " + ChatColor.DARK_GRAY + onlinePlayers + ChatColor.GRAY + " out of " + ChatColor.DARK_GRAY + maxSlots + ChatColor.GRAY + " players online.");
                            player.sendMessage(ChatColor.DARK_GRAY + "  " + serverName + ChatColor.GRAY + " is running on IP " + ChatColor.DARK_GRAY + serverIP + ChatColor.GRAY + " with port " + ChatColor.DARK_GRAY + serverPort + ChatColor.GRAY + ".");
                            player.sendMessage(ChatColor.DARK_GRAY + "  " + serverName + ChatColor.GRAY + " has Bukkit version " + ChatColor.DARK_GRAY + bukkitVersion + ChatColor.GRAY + " and is running on Minecraft " + ChatColor.DARK_GRAY + minecraftVersion + ChatColor.GRAY + ".");
                            player.sendMessage(ChatColor.GRAY + "  There are currently " + ChatColor.DARK_GRAY + serverOPs + ChatColor.GRAY + " players with 'OP' status.");
                            player.sendMessage(ChatColor.GRAY + "  A total of " + ChatColor.DARK_GRAY + totalPlayers + ChatColor.GRAY + " have joined " + ChatColor.DARK_GRAY + serverName);
                            player.sendMessage(ChatColor.GRAY + "  Maximum Memory: " + ChatColor.DARK_GRAY + (Runtime.getRuntime().maxMemory() / 1024 / 1024) + ChatColor.GRAY + " MB");
                            player.sendMessage(ChatColor.GRAY + "  Total Memory: " + ChatColor.DARK_GRAY + (Runtime.getRuntime().totalMemory() / 1024 / 1024) + ChatColor.GRAY + " MB");
                            player.sendMessage(ChatColor.GRAY + "  Free Memory: " + ChatColor.DARK_GRAY + (Runtime.getRuntime().freeMemory() / 1024 / 1024) + ChatColor.GRAY + " MB");
                            player.sendMessage(ChatColor.BLUE + "--------------------------------");
                            return true;
                        }
                        else {
                            player.sendMessage(ChatColor.RED + "You don't have permission to use this command.");
                        }
                    }
               
                    //Player Command
               
                    else if (param1.equals("player")) {
                        if (args.length < 2) {
                            if (player.hasPermission("orecraft.player")) {
                                player.sendMessage(ChatColor.BLUE + "----------OreCraftCore----------");
                                player.sendMessage(ChatColor.GRAY + "  Hello, " + ChatColor.DARK_BLUE + player.getDisplayName() + "!");
                                player.sendMessage(ChatColor.GRAY + "  You are playing in gamemode '" + ChatColor.DARK_GRAY + player.getGameMode() + ChatColor.GRAY + ".'");
                                player.sendMessage(ChatColor.GRAY + "  You are playing OreCraft on IP " + ChatColor.DARK_GRAY + player.getAddress() + ChatColor.GRAY + ".");
                                player.sendMessage(ChatColor.GRAY + "  You have " + ChatColor.DARK_GRAY + player.getHealth() + ChatColor.GRAY + " out of " + ChatColor.DARK_GRAY + player.getMaxHealth() + ChatColor.GRAY + " health.");
                                player.sendMessage(ChatColor.BLUE + "--------------------------------");
                                return true;
                            }
                            else {
                                player.sendMessage(ChatColor.RED + "You don't have permission to use this command.");
                            }
                   
                        }
                        Player otherPlayer = player.getServer().getPlayer(args[1]);
                        if (player.hasPermission("orecraft.player.lookup")) {
                            player.sendMessage(ChatColor.BLUE + "----------OreCraftCore----------");
                            player.sendMessage(ChatColor.GRAY + "  " + ChatColor.DARK_BLUE + otherPlayer.getDisplayName() + "'s stats:");
                            player.sendMessage(ChatColor.GRAY + "  OP: " + ChatColor.DARK_GRAY + otherPlayer.isOp());
                            player.sendMessage(ChatColor.GRAY + "  Online: " + ChatColor.DARK_GRAY + otherPlayer.isOnline());
                            player.sendMessage(ChatColor.GRAY + "  Gamemode: " + ChatColor.DARK_GRAY + otherPlayer.getGameMode() + ChatColor.GRAY);
                            player.sendMessage(ChatColor.GRAY + "  IP: " + ChatColor.DARK_GRAY + otherPlayer.getAddress());
                            player.sendMessage(ChatColor.GRAY + "  Health: " + ChatColor.DARK_GRAY + otherPlayer.getHealth());
                            player.sendMessage(ChatColor.GRAY + "  Location: " + ChatColor.DARK_GRAY + "(" + otherPlayer.getWorld().getName() + ", " + Math.round(otherPlayer.getLocation().getX()) + ", " + Math.round(otherPlayer.getLocation().getY()) + ", " + Math.round(otherPlayer.getLocation().getZ()) + ")");
                            player.sendMessage(ChatColor.BLUE + "--------------------------------");
                            return true;
                        }
                        else {
                            player.sendMessage(ChatColor.RED + "You don't have permission to use this command.");
                        }
                   
                    }
               
                    //Null Command
               
                    else if (param1.equals("")) {
                        if (player.hasPermission("orecraft.null")) {
                            player.sendMessage(ChatColor.BLUE + "----------OreCraftCore----------");
                            player.sendMessage(ChatColor.GRAY + "  OreCraftCore version 1.0.0 loaded.");
                            player.sendMessage(ChatColor.GRAY + "  Type " + ChatColor.DARK_GRAY + "/orecraft help " + ChatColor.GRAY + "for a list of commands.");
                            player.sendMessage(ChatColor.BLUE + "--------------------------------");
                            return true;
                        }
                        else {
                            player.sendMessage(ChatColor.RED + "You don't have permission to use this command.");
                        }
                    }
               
                    //Unknown Command
               
                    else {
                        if (player.hasPermission("orecraft.unknown")) {
                            player.sendMessage(ChatColor.BLUE + "----------OreCraftCore----------");
                            player.sendMessage(ChatColor.GRAY + "  Command not recognized.");
                            player.sendMessage(ChatColor.GRAY + "  Type " + ChatColor.DARK_GRAY + "/orecraft help " + ChatColor.GRAY + "for a list of commands.");
                            player.sendMessage(ChatColor.BLUE + "--------------------------------");
                            return true;
                        }
                        else {
                            player.sendMessage(ChatColor.RED + "You don't have permission to use this command.");
                        }
                    }
                }
            }
            return false;
        }
     
        Logger log;
     
        public void onEnable() {
            if (!new File(getDataFolder().toString()).exists()) {
                new File(getDataFolder().toString()).mkdir();
              }
       
            File file = new File(getDataFolder() + "/players.txt");
       
            if (!file.exists()) {
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    System.out.println("Unable to create 'players' file in " + file.getPath() + "/" + file.getName());
                }
            }
       
            log = this.getLogger();
            log.info("Plugin enabled.");
        }
     
        public void onDisable(){
            log.info("Plugin disabled.");
        }
     
    }
    
    Listener code

    Code:
    package org.orecraft.orecraftcore;
     
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Calendar;
    import java.util.logging.Logger;
     
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
     
    public class IPListener implements Listener {
        public static OreCraftCore plugin;
     
        public IPListener(OreCraftCore instance) {
            plugin = instance;
       
        }
     
        public void onPlayerJoin(PlayerJoinEvent event) {
            String playerIP = event.getPlayer().getAddress().toString();
            String playerName = event.getPlayer().getName();
       
            File playerLogger = new File(plugin.getDataFolder() + "/players.txt");
            if (playerLogger.exists()) {
                try {
                    Logger log = Logger.getLogger("Minecraft");
                    log.info("Creating database for player '" + playerName + ".'");
                    BufferedWriter writer = new BufferedWriter(new FileWriter(playerLogger, true));
                    writer.append("[" + getDate() + "] " + playerName + "," + playerIP);
                    writer.newLine();
                    writer.flush();
                    writer.close();
                }
                catch (Exception e) {
                    Logger log = Logger.getLogger("Minecraft");
                    log.info("OreCraftCore was unable to create a database for player '" + playerName + ".'");
                    log.info("The error was:");
                    e.printStackTrace();
                }
            }
            else {
                try {
                    Logger log = Logger.getLogger("Minecraft");
                    log.info("'players.txt' file does not exist, creating now...");
                    playerLogger.createNewFile();
                } catch (IOException e) {
                    System.out.println("Unable to create 'players' file in " + playerLogger.getPath() + "/" + playerLogger.getName());
                }
            }
        }
        public static String getDate() {
            Calendar c = Calendar.getInstance();
            int month = c.get(2) + 1;
            String date = Integer.toString(month);
            date = date + "/";
            date = date + c.get(5) + "/";
            date = date + c.get(1) + " ";
            date = date + c.get(11) + ":";
            date = date + c.get(12) + ".";
            date = date + c.get(13);
            return date;
        }
    }
    
     
  2. Offline

    Sorrow

    Well, I'm not the best person to help you, but should you put the if condition that checks if the file exsists before you actually write the file?
     
  3. Use writer.append insteand of writer.write. If you use writer.write, the content will be overrided by the new.
     
  4. Offline

    aidancbrady

    But it WILL be there! :)
    Just kidding, you're right, I'll add it.

    I did what y'all said, it's still not working. Please help :(

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 24, 2016
  5. Offline

    Sorrow

  6. Offline

    aidancbrady

  7. oh, right. It should be write, it's correct. Thought it would be a FileWriter.

    But it wouldn't be bad if you use a FileWriter instead of a BufferedWriter
     
  8. Offline

    Sorrow

    Well, have you tried all debugging stuffs?
    For example, you said it gives no errors, so have you checked that the program really attempted to write the file? Does it shows in the log the message "Creating database for player PlayerX"? If it does and nothing happens giving no errors, then the problem can be in the write permission for that file...
     
  9. Offline

    aidancbrady

    manniL likes this.
Thread Status:
Not open for further replies.

Share This Page