FFA Stats?!

Discussion in 'Plugin Development' started by digitox, Mar 26, 2017.

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

    digitox

    I have made a FFA plugin but my Stats got F***** up. I don't know what happened. Please help. The stats wont change. when i kill a person just the Streak is different. Not the kills. and the person i kill, don't get +1 death??? What can i do to make this not happen.

    Code:
    package me.digitox.ffa.Stats;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    
    import me.digitox.ffa.Main;
    
    public class statsCommand implements CommandExecutor {
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          
            if(!(sender instanceof Player)) {
                sender.sendMessage("§cYou need to be ingame to use this command!");
                return true;
            }
            if(args.length == 0) {
                Player p = (Player) sender;
                int kills = Main.getInstance().getConfig().getInt("stats." + p.getName() + ".Kills");
                int deaths = Main.getInstance().getConfig().getInt("stats." + p.getName() + ".Deaths");
                if((kills == 0) && (deaths == 0)) {
                    sender.sendMessage("  ");
                    sender.sendMessage("§8§m--- §6Stats §8§m---");
                    sender.sendMessage("§ePlayer: §f" + p.getDisplayName());
                    sender.sendMessage("§eKills: §f0");
                    sender.sendMessage("§eDeaths: §f0");
                    sender.sendMessage("§eSteak: §f" + p.getLevel());
                    sender.sendMessage("§eKDR: §f0");
                    sender.sendMessage("§8§m--------------");
                    sender.sendMessage("  ");
                    return true;
                  
                } else if(deaths == 0) {
                    sender.sendMessage(" ");
                    sender.sendMessage("§8§m--- §6Stats §8§m---");
                    sender.sendMessage("§ePlayer: §f" + p.getDisplayName());
                    sender.sendMessage("§eKills: §f" + kills);
                    sender.sendMessage("§eDeaths: §f0");
                    sender.sendMessage("§eSteak: §f" + p.getLevel());
                    sender.sendMessage("§eKDR: §f" + kills);
                    sender.sendMessage("§8§m--------------");
                    sender.sendMessage(" ");
                    return true;
                  
                } else {
                    double kdr = kills/deaths;
                    String out = String.format("%.1f", Double.valueOf(kdr));
                    sender.sendMessage(" ");
                    sender.sendMessage("§8§m--- §6Stats §8§m---");
                    sender.sendMessage("§ePlayer: §f" + p.getDisplayName());
                    sender.sendMessage("§eKills: §f" + kills);
                    sender.sendMessage("§eDeaths: §f" + deaths);
                    sender.sendMessage("§eSteak: §f" + p.getLevel());
                    sender.sendMessage("§eKDR: §f" + out);
                    sender.sendMessage("§8§m--------------");
                    sender.sendMessage(" ");
                    return true;
                }
            }
            if(args.length == 1) {
                Player t = Bukkit.getServer().getPlayer(args[0]);
                int kills = Main.getInstance().getConfig().getInt("stats." + t.getName() + ".Kills");
                int deaths = Main.getInstance().getConfig().getInt("stats." + t.getName() + ".Deaths");
                if(!t.isOnline() || !t.hasPlayedBefore() || t == null) {
                    sender.sendMessage(Main.prefix + "§4That player is not online or has never played before!");
                    return true;
                }
                if((kills == 0) && (deaths == 0)) {
                    sender.sendMessage(" ");
                    sender.sendMessage("§8§m--- §6Stats §8§m---");
                    sender.sendMessage("§ePlayer: §f" + t.getDisplayName());
                    sender.sendMessage("§eKills: §f0");
                    sender.sendMessage("§eDeaths: §f0");
                    sender.sendMessage("§eSteak: §f" + t.getLevel());
                    sender.sendMessage("§eKDR: §f0");
                    sender.sendMessage("§8§m--------------");
                    sender.sendMessage(" ");
    
                    return true;
                } else if(deaths == 0) {
                    sender.sendMessage(" ");
                    sender.sendMessage("§8§m--- §6Stats §8§m---");
                    sender.sendMessage("§ePlayer: §f" + t.getDisplayName());
                    sender.sendMessage("§eKills: §f" + kills);
                    sender.sendMessage("§eDeaths: §f0");
                    sender.sendMessage("§eSteak: §f" + t.getLevel());
                    sender.sendMessage("§eKDR: §f" + kills);
                    sender.sendMessage("§8§m--------------");
                    sender.sendMessage(" ");
                    return true;
                  
                } else {
                    double kdr = kills/deaths;
                    String out = String.format("%.1f", Double.valueOf(kdr));
                    sender.sendMessage(" ");
                    sender.sendMessage("§8§m--- §6Stats §8§m---");
                    sender.sendMessage("§ePlayer: §f" + t.getDisplayName());
                    sender.sendMessage("§eKills: §f" + kills);
                    sender.sendMessage("§eDeaths: §f" + deaths);
                    sender.sendMessage("§eSteak: §f" + t.getLevel());
                    sender.sendMessage("§eKDR: §f" + out);
                    sender.sendMessage("§8§m--------------");
                    sender.sendMessage(" ");
                    return true;
                  
                }
            }
          
            return false;
        }
    
    }
    
    Code:
    package me.digitox.ffa.Stats;
    
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    
    import me.digitox.ffa.Main;
    
    public class statsData implements Listener {
      
        @EventHandler
        public void on(PlayerDeathEvent e) {
            Player p = e.getEntity();
            Player k = p.getKiller();
            int kills = Main.getInstance().getConfig().getInt("Stats." + p.getName() + ".kills");
            int deaths = Main.getInstance().getConfig().getInt("Stats." + p.getName() + ".Deaths");
    
    
          
            Main.getInstance().getConfig().set("Stats." + p.getName() + ".Deaths", + deaths + 1);
            Main.getInstance().getConfig().set("Stats." + k.getName() + ".Kills", + kills + 1);
    
        }
    
        @EventHandler
        public void onFirstJoin(PlayerJoinEvent e) {
            Player p =e.getPlayer();
            if(!(p.hasPlayedBefore())) {
                Main.getInstance().getConfig().addDefault("Stats" + p.getName() + ".Kills", Integer.valueOf(0));
                Main.getInstance().getConfig().addDefault("Stats" + p.getName() + ".Deaths", Integer.valueOf(0));
    
            }
        }
      
    }
    

    this is the code i use for stats.
     
    Last edited: Mar 26, 2017
  2. Offline

    Zombie_Striker

    @digitox
    What do you mean? What happened to the stats? Did the all increase/decrease be some amount, were they all set to a value, or are the values random?
     
  3. Offline

    digitox

    @Zombie_Striker The stats don't change. the stats is always the same. i have killed many players and i stil have 0 kills? can you help me?
     
  4. Offline

    Zombie_Striker

    @digitox
    You are not saving the config. After you set a players stat, you must save the config by calling saveConfig()
     
  5. Offline

    digitox

  6. Offline

    Zombie_Striker

    @digitox
    Wherever you set something in the config. So, put it in the death event and the join event.
     
  7. Offline

    digitox

    @Zombie_Striker
    Ok. imma try.
    saveConfig(); dose not Work?!
    Code:
    package me.digitox.ffa.Stats;
    
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    
    import me.digitox.ffa.Main;
    
    public class statsData implements Listener {
      
        @EventHandler
        public void on(PlayerDeathEvent e) {
            Player p = e.getEntity();
            Player k = p.getKiller();
            int kills = Main.getInstance().getConfig().getInt("Stats." + p.getName() + ".kills");
            int deaths = Main.getInstance().getConfig().getInt("Stats." + p.getName() + ".Deaths");
    
    
          
            Main.getInstance().getConfig().set("Stats." + p.getName() + ".Deaths", + deaths + 1);
            Main.getInstance().getConfig().set("Stats." + k.getName() + ".Kills", + kills + 1);
    
        }
    
        @EventHandler
        public void onFirstJoin(PlayerJoinEvent e) {
            Player p =e.getPlayer();
            if(!(p.hasPlayedBefore())) {
                Main.getInstance().getConfig().addDefault("Stats" + p.getName() + ".Kills", Integer.valueOf(0));
                Main.getInstance().getConfig().addDefault("Stats" + p.getName() + ".Deaths", Integer.valueOf(0));
    saveConfig();
            }
        }
      
    }
    
     
    Last edited: Mar 27, 2017
  8. Offline

    Zombie_Striker

  9. Offline

    digitox

    @Zombie_Striker
    here
    Code:
    package me.digitox.ffa.Stats;
    
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    
    import me.digitox.ffa.Main;
    
    public class statsData implements Listener {
       
        @EventHandler
        public void on(PlayerDeathEvent e) {
            Player p = e.getEntity();
            Player k = p.getKiller();
            int kills = Main.getInstance().getConfig().getInt("Stats." + p.getName() + ".kills");
            int deaths = Main.getInstance().getConfig().getInt("Stats." + p.getName() + ".Deaths");
    
    
           
            Main.getInstance().getConfig().set("Stats." + p.getName() + ".Deaths", + deaths + 1);
            Main.getInstance().getConfig().set("Stats." + k.getName() + ".Kills", + kills + 1);
    
        }
    
        @EventHandler
        public void onFirstJoin(PlayerJoinEvent e) {
            Player p =e.getPlayer();
            if(!(p.hasPlayedBefore())) {
                Main.getInstance().getConfig().addDefault("Stats" + p.getName() + ".Kills", Integer.valueOf(0));
                Main.getInstance().getConfig().addDefault("Stats" + p.getName() + ".Deaths", Integer.valueOf(0));
    saveConfig();
            }
        }
       
    }
    
     
  10. Offline

    Zombie_Striker

    @digitox
    First, you need to call saveConfig for both the join event and the death event. Then, you need to call saveConfig on the Main instance.
     
  11. Offline

    digitox

    what do you mean?
    Code:
    package me.digitox.ffa.Stats;
    
    
    
    import org.bukkit.entity.Player;
    
    import org.bukkit.event.EventHandler;
    
    import org.bukkit.event.Listener;
    
    import org.bukkit.event.entity.PlayerDeathEvent;
    
    import org.bukkit.event.player.PlayerJoinEvent;
    
    
    
    import me.digitox.ffa.Main;
    
    
    
    public class statsData implements Listener {
    
        @EventHandler
    
        public void on(PlayerDeathEvent e) {
    
            Player p = e.getEntity();
    
            Player k = p.getKiller();
    
            int kills = Main.getInstance().getConfig().getInt("Stats." + p.getName() + ".kills");
    
            int deaths = Main.getInstance().getConfig().getInt("Stats." + p.getName() + ".Deaths");
    
            Main.getInstance().getConfig().set("Stats." + p.getName() + ".Deaths", + deaths + 1);
    
            Main.getInstance().getConfig().set("Stats." + k.getName() + ".Kills", + kills + 1);
    
            saveConfig();
    
        }
    
        @EventHandler
    
        public void onFirstJoin(PlayerJoinEvent e) {
    
            Player p =e.getPlayer();
    
            if(!(p.hasPlayedBefore())) {
    
                Main.getInstance().getConfig().addDefault("Stats" + p.getName() + ".Kills", Integer.valueOf(0));
    
                Main.getInstance().getConfig().addDefault("Stats" + p.getName() + ".Deaths", Integer.valueOf(0));
    
                saveConfig();
    
            }
    
        }
    
    }
    do you mean that?!
     
  12. Offline

    Zombie_Striker

    @digitox
    You need to call saveConfig on the main instance. Get the main's instance, and the same way you call getConfig, call saveConfig.
     
  13. Offline

    digitox

    can you give me one exaple on what I'm going to do
    here is the main

    Code:
    package me.digitox.ffa;
    
    import java.util.logging.Logger;
    
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import me.digitox.ffa.Events.antiBuildListener;
    import me.digitox.ffa.Events.arrowEvent;
    import me.digitox.ffa.Events.deathEvent;
    import me.digitox.ffa.Events.dropEvent;
    import me.digitox.ffa.Events.foodEvent;
    import me.digitox.ffa.Events.joinLeaveEvent;
    import me.digitox.ffa.Events.killStreakEvent;
    import me.digitox.ffa.Events.mobSpawnEvent;
    import me.digitox.ffa.Events.pickupEvent;
    import me.digitox.ffa.Events.respawnEvent;
    import me.digitox.ffa.Events.weatherEvent;
    import me.digitox.ffa.Stats.statsCommand;
    import me.digitox.ffa.Stats.statsData;
    import me.digitox.ffa.Stats.statsReset;
    import me.digitox.ffa.Utilities.SB;
    
    public class Main extends JavaPlugin{
       
        public static Main instance;
        Logger log = Logger.getLogger("Minecraft");
       
        public static String prefix = "§3FFA §8> ";
       
        public void registerListeners() {
            PluginManager pm = getServer().getPluginManager();
            pm.registerEvents(new joinLeaveEvent(), this);
            pm.registerEvents(new respawnEvent(), this);
            pm.registerEvents(new deathEvent(), this);
            pm.registerEvents(new pickupEvent(), this);
            pm.registerEvents(new foodEvent(), this);
            pm.registerEvents(new arrowEvent(), this);
            pm.registerEvents(new weatherEvent(), this);
            pm.registerEvents(new dropEvent(), this);
            pm.registerEvents(new statsData(), this);
            pm.registerEvents(new killStreakEvent(), this);
            pm.registerEvents(new antiBuildListener(), this);
            pm.registerEvents(new SB(), this);
            pm.registerEvents(new mobSpawnEvent(), this);
           
            getCommand("stats").setExecutor(new statsCommand());
            getCommand("resetstats").setExecutor(new statsReset());
        }
       
        public static Main getInstance() {
            return instance;
        }
       
        @Override 
        public void onEnable() {
            this.log.info("[FFA] has benn enabled!");
           
            instance = this;
            registerListeners();
            saveConfig();
        }
       
        @Override
        public void onDisable() {
            this.log.info("[FFA] has been disabled");
            instance = null;
            saveConfig();
           
        }
       
        public void loadConfig() {
            FileConfiguration cfg = getConfig();
            cfg.options().copyDefaults(true);
            cfg.options().header(prefix + "§cPlayer stats have been registered succsesfully!");
           
            saveConfig();
           
           
        }
       
    }
    
     
    Last edited: Mar 27, 2017
  14. Offline

    MrGriefer_

    To save the config file just do Main.getInstance().saveConfig();

    And remove the before last plus sign :
    PHP:
    Main.getInstance().getConfig().set("Stats." k.getName() + ".Kills", + kills 1);
     
  15. Offline

    digitox

    @MrGriefer_ why should i delete
    PHP:
    Main.getInstance().getConfig().set("Stats." k.getName() + ".Kills", + kills 1);
     
  16. Offline

    MrGriefer_

    Instead of:
    PHP:
    Main.getInstance().getConfig().set("Stats." k.getName() + ".Kills", + kills 1);
    Change it to:
    PHP:
    Main.getInstance().getConfig().set("Stats." k.getName() + ".Kills"kills 1);
    Just change it from + kills + 1 to just kills + 1 remove the first plus sign!
     
Thread Status:
Not open for further replies.

Share This Page