- Баллы
- 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
Последнее редактирование: