Помогите Проблема с выводом статистики игрока из файла.

  • Автор темы Автор темы Slavkaa
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Slavkaa

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Slavok2001
Вопросы все по той же статистике. Вроде бы уже все готово, даже работало, но столкнулся с такой проблемой: изначально все данные игрока (убийства, смерти) равны нулю. Работает это так: заходит игрок, создается запись в файле, все данные равны нулю, и если игрок не сделает никаких действий, то будет невозможно просмотреть его стату. Т.е. когда все данные равны нулю, при вводе команды /stat nick, выводится ошибка "An internal...", а вот, если игрок уже один раз умер или кого-то убил, т.е. данные изменились, то статистику можно спокойно просмотреть.
Код:
Java:
    @EventHandler
    public void join(PlayerJoinEvent e) {
    Player p = e.getPlayer();
        String name = p.getName().toLowerCase();
        FileConfiguration c = plugin.getConfig();
        HashMap<String, Integer> addint = new HashMap<String, Integer>();  
        addint.put("kills", 0);
        addint.put("deaths", 0);
        addint.put("rating", 0);
        for (String d : addint.keySet()) {
            if (!c.isSet("players."+name+"."+d)) {
                c.set("players."+name+"."+d, addint.get(d));
                plugin.saveConfig();
                }
            }
    }
    @EventHandler
    public void addkill(PlayerDeathEvent e) {
        Player player = e.getEntity().getPlayer();
        String name = player.getName().toLowerCase();
        player.sendMessage("Вы умерли :с");
        HashMap<String, Integer> addint = new HashMap<String, Integer>();  
        FileConfiguration c = plugin.getConfig();
        if(e.getEntity().getKiller() == null) {
            addint.put("players." + name + ".deaths", c.getInt("players." + name + ".deaths") + 1);  
            addint.put("players." + name + ".rating", c.getInt("players." + name + ".rating") - 8);  
        for(String d : addint.keySet()) {
            c.set(d, addint.get(d));
            plugin.saveConfig();
        }
        return;
        }
        addint.put("players." + name + ".deaths", c.getInt("players." + name + ".deaths") + 1);  
        addint.put("players." + e.getEntity().getKiller().getName().toLowerCase() + ".kills", c.getInt("players." + e.getEntity().getKiller().getName().toLowerCase() + ".kills") + 1);
        addint.put("players." + name + ".rating", c.getInt("players." + name + ".rating") - 8);  
        addint.put("players." + e.getEntity().getKiller().getName().toLowerCase() + ".rating", c.getInt("players." + e.getEntity().getKiller().getName().toLowerCase() + ".rating") + 6);  
        for(String d : addint.keySet()) {
            c.set(d, addint.get(d));
            plugin.saveConfig();
        }
      
    }
    @Override
    public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) {
        String arg1 = args[0].toLowerCase();
        if(args.length != 1) {
            s.sendMessage("Неверное использование");
            return false;
        }
        if(!plugin.getConfig().contains("players." + arg1)) {
            s.sendMessage("Такого игрока нет");
            return true;
        }
        String status = Bukkit.getPlayerExact(args[0]) == null ? "Offline" : "Online";
        int kills = plugin.getConfig().getInt("players." + arg1 + ".kills");
        int deaths = plugin.getConfig().getInt("players." + arg1 + ".deaths");
        int rating = plugin.getConfig().getInt("players." + arg1 + ".rating");
        String skills = String.valueOf(kills);
       String sdeaths = String.valueOf(deaths);
       String srating = String.valueOf(rating);
       int percent = kills * 100 / (kills + deaths);
       String spercent = percent < 50 ? ChatColor.RED + String.valueOf(percent) : percent < 60 ? ChatColor.YELLOW + String.valueOf(percent) : percent < 75 ? ChatColor.DARK_AQUA + String.valueOf(percent) : percent < 95 ? ChatColor.DARK_PURPLE + String.valueOf(percent) : ChatColor.LIGHT_PURPLE + String.valueOf(percent);
        List<String> stat = plugin.getConfig().getStringList("message");
        for (String statlist : stat) {
            statlist = statlist.replace("&", "\u00a7");
            statlist = statlist.replaceAll("%kills", skills);
            statlist = statlist.replaceAll("%deaths", sdeaths);
            statlist = statlist.replaceAll("%rating", srating);
            statlist = statlist.replaceAll("%nick", args[0]);
            statlist = statlist.replaceAll("%percent", spercent);
            statlist = statlist.replaceAll("%status", status);
            s.sendMessage(statlist);
        }
        return true;
    }
Конфиг:
Код:
message:
- '&6==================='
- '&6Ник: &e%nick'
- '&6Убийств: &a%kills'
- '&cСмертей: %deaths'
- '&eБоевой рейтинг: &a%rating'
- '&eПроцент побед: &a%percent%'
- '&6Статус: %status'
- '&6==================='
config:
  rating-add: 6 #Это еще не доделано, но никак не влияет на работу
  rating-remove: 8 #Это еще не доделано, но никак не влияет на работу
players:
  slavkaa
    kills: 0
    rating: -8
    deaths: 1
 
Последнее редактирование:
Потому что ты делишь на ноль. В школе совсем уже ничему не учат? Даже элементарных вещей уже не знают...
 
Потому что ты делишь на ноль.
Ахахах, точно. Никогда бы и не подумал, что проблема в этом. А не можешь подсказать, как это реализовать?
Ахахах, точно. Никогда бы и не подумал, что проблема в этом. А не можешь подсказать, как это реализовать?
Все, я это реализовал, причем, достаточно просто. Тема закрыта.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх