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.
@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?
@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?
@digitox You are not saving the config. After you set a players stat, you must save the config by calling saveConfig()
@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(); } } }
@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(); } } }
@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.
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?!
@digitox You need to call saveConfig on the main instance. Get the main's instance, and the same way you call getConfig, call saveConfig.
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(); } }
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);
@MrGriefer_ why should i delete PHP: Main.getInstance().getConfig().set("Stats." + k.getName() + ".Kills", + kills + 1);
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!