Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Плагин [MISC]PvPStats v0.6 - Статистика игрока на PvP.[Tested: 1.8]

Slavkaa

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Slavok2001
PvPStats - Статистика игрока на PvP для вашего сервера.
Версия: 0.6

Данный плагин выводит статистику игроков на пвп, а именно: убийства, смерти, боевой рейтинг, процент побед.

Особенности:
- Возможность просмотреть статистики игрока.
- Формат вывода статистики можно настроить в конфиге.
- Плагин полностью на русском языке.
- Сообщения, имеющиеся в плагине, так же можно настраивать в конфиге.
- Возможность изменять статистику игрока командой.
- /pvpstats - просмотреть свою статистику.
- /pvpstats <nick> - просмотреть статистику игрока.
- /setstats reload - перезагрузить конфиг.
- /setstats reset - сбросить статистику игрока.
- /setstats <nick> <kills/deaths/rating> <value>
- pvpstats.use - Просмотр статистики.
- pvpstats.admin - Админские команды.

Конфиг:
YAML:
message:
- '&6┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓'
- '&6┃  &cНик: &e%nick'
- '&6┃  &cУбийств: &a%kills'
- '&6┃  &cСмертей: &4%deaths'
- '&6┃  &cБоевой рейтинг: &e%rating'
- '&6┃  &cПроцент побед: %percent%'
- '&6┗╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┛'
config:
  rating-add: 6
  rating-remove: 8
messages:
  prefix: '&6[&ePvPStats&6] '
  death: '&cВас убил игрок &e%killername'
  killed: '&aВы убили игрока &e%name'
  don-t-have-perm: '&4У вас недостаточно прав'
  player-not-found: '&4Этот игрок не участвовал в PvP'
  you-not-found: '&4Вы еще не участвовали в PvP'
  invalid-syntax: '&4Неправильное использование -> /pvpstat <nick>'
  sender-console: '&4Эта команда доступна только игрокам'
  config-reloaded: '&3Конфиг перезагружен'
  stats:
    reset-message: '&aСтатистика игрока %nick сброшена'
    invalid-syntax: '&4Неправильное использование -> /setstats <Nick> <reset/kills/deaths/rating>
      <value>'
    invalid-value: '&4Для этого значения можно использовать только положительные числа'
    value-is-not-number: '&4Это значение должно быть числом'
    set-kills: '&aИгроку %nick установлено %value %kills-message'
    set-deaths: '&aИгроку %nick установлено %value %deaths-message'
    set-rating: '&aИгроку %nick установлено %value %rating-message боевого рейтинга'
#kills-message: "убийство", "убийства", "убийств"
#deaths-message: "смерть", "смерти", "смертей"
#rating-message: "единица", "единицы", "единиц"

v0.7 - Исправления багов, если такие найдутся.
v1.0 - Перенос данных игроков в бд.
v2.0 - Топ игроков.
v0.1 - Релиз плагина.
v0.2 - Некоторые поправки в коде.(Спасибо адекватной критике @DonDays и @TheZefirrkka) Добавил команду - /mystat reload - перезагрузка конфига. Изменил стандартное оформление вывода статистики.(Можно увидеть в скриншотах)
v0.3 - Поправки в коде. Команды, с помощью которых можно изменять статистику игроков прямо в игре.(Смотрите "Команды").
v0.4 - Изменена небольшая часть кода. Теперь, при входе игрока на сервер, не выставляются нули по умолчанию. Изменены некоторые команды. (Убрал add и remove, заменил их на set. (Смотрите "Команды")) Добавил команду /setstats reset - для сброса статистики игрока. Добавил сообщения: "Вас убил игрок %name" и "Вы убили игрока %name".
v0.5 - Изменен код. При входе игрока на сервер, записи не создаются и, при проверке статистики игрока, который не участвовал в PvP, будет выводиться сообщение "Этот игрок не участвовал в PvP".
Изменил некоторые команды. Изменил стандартное оформление вывода статистики. Убрал статус игрока.
v0.6 - Избавился от лишнего кода.(Но это не точно). Теперь статистика сохраняется в файл players.yml. Склоняются слова "убийства, смерти, единицы боевого рейтинга" в команде /setstats. Немного изменил оформление вывода статистики.
upload_2017-5-28_15-20-47.png
Скачать: Яндекс.Диск
 
Последнее редактирование:
Сейчас бы стату в кфг хранить
 
Щас бы джаву учить для бд, ну ладно, не мои проблемы уже.
действительно
код плохо пахнет
Декомпилировать можно, или сразу глаза вырезать?
Код:
public Main() {}

public void onDisable() {}
Зачем? Зачем ты при убийстве игрока выполняешь одни и те же действия, если киллер существует, и если нет? Не проще сделать сначала одинаковые действия, которые ты повторяешь при убийстве игрока, и при обычной смерти? Не проще снизу проверить киллера на нулл, и если он существует, добавить киллеру убийство? Зачем в onEnable ты несколько раз объявляешь хендлер? Зачем выставлять игроку нули при входе? Команду Mystat еще не смотрел.
Лайфхак от DonDays - удаление глаз без операции:
1. Декомпилируем класс Mystat
2. PROFIT!!!
 
Код:
@EventHandler
  public void join(PlayerJoinEvent e)
  {
    Player p = e.getPlayer();
    String name = p.getName().toLowerCase();
    FileConfiguration c = this.plugin.getConfig();
    HashMap<String, Integer> addint = new HashMap();
    addint.put("kills", Integer.valueOf(0));
    addint.put("deaths", Integer.valueOf(0));
    addint.put("rating", Integer.valueOf(0));
    for (String d : addint.keySet()) {
      if (!c.isSet("players." + name + "." + d))
      {
        c.set("players." + name + "." + d, addint.get(d));
        this.plugin.saveConfig();
      }
    }
  }
ЭТО, ПРОСТО, АХ...НО.
 
Код:
@EventHandler
  public void join(PlayerJoinEvent e)
  {
    Player p = e.getPlayer();
    String name = p.getName().toLowerCase();
    FileConfiguration c = this.plugin.getConfig();
    HashMap<String, Integer> addint = new HashMap();
    addint.put("kills", Integer.valueOf(0));
    addint.put("deaths", Integer.valueOf(0));
    addint.put("rating", Integer.valueOf(0));
    for (String d : addint.keySet()) {
      if (!c.isSet("players." + name + "." + d))
      {
        c.set("players." + name + "." + d, addint.get(d));
        this.plugin.saveConfig();
      }
    }
  }
ЭТО, ПРОСТО, АХ...НО.
еще глазки не выпали?
 
тогда декомпилируй класс Mystat
Для 1 плагина ещё ладно, но столько кода ненужного и очень тупого.
Я вообще ни одного паблик плагина не сделал :D
Идей нету, почти все реализованы уже.
 
Спасибо всем, кто критиковал. Исправлю все, что смогу.
Да вообще задумка не очень, таких плагинов сотни и с большим функционалом.
Видел, максимум, 1-2 плагина, и супер-крутого функционала там не видел.
Код:
@EventHandler
  public void join(PlayerJoinEvent e)
  {
    Player p = e.getPlayer();
    String name = p.getName().toLowerCase();
    FileConfiguration c = this.plugin.getConfig();
    HashMap<String, Integer> addint = new HashMap();
    addint.put("kills", Integer.valueOf(0));
    addint.put("deaths", Integer.valueOf(0));
    addint.put("rating", Integer.valueOf(0));
    for (String d : addint.keySet()) {
      if (!c.isSet("players." + name + "." + d))
      {
        c.set("players." + name + "." + d, addint.get(d));
        this.plugin.saveConfig();
      }
    }
  }
ЭТО, ПРОСТО, АХ...НО.
Этот кусок я спи.. позаимствовал из какого-то плагина.
Зачем выставлять игроку нули при входе?
А что ты предлагаешь?
 
Для начала проверять, есть ли игрок в конфиге, а потом уже делать что-то.
Как-то так?
Java:
    @EventHandler
    public void join(PlayerJoinEvent e) {
    Player p = e.getPlayer();
        String name = p.getName().toLowerCase();
        FileConfiguration c = plugin.getConfig();
        if(!c.contains("players." + name)) {
        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()) {
               c.set("players." + name + "." + d, addint.get(d));
               plugin.saveConfig();
           }
        }
    }
 
Как-то так?
Java:
    @EventHandler
    public void join(PlayerJoinEvent e) {
    Player p = e.getPlayer();
        String name = p.getName().toLowerCase();
        FileConfiguration c = plugin.getConfig();
        if(!c.contains("players." + name)) {
        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()) {
               c.set("players." + name + "." + d, addint.get(d));
               plugin.saveConfig();
           }
        }
    }
-
Как-то так?
Java:
    @EventHandler
    public void join(PlayerJoinEvent e) {
    Player p = e.getPlayer();
        String name = p.getName().toLowerCase();
        FileConfiguration c = plugin.getConfig();
        if(!c.contains("players." + name)) {
        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()) {
               c.set("players." + name + "." + d, addint.get(d));
               plugin.saveConfig();
           }
        }
    }
Тут HashMap не нужен ВООБЩЕ!
 
Объясни, зачем тебе тут HashMap, возможно, это я тупой.
Тупой я, я тупо увидел чей-то код и вставил его. Заработало, вот я и забил. Щас сделал через set, все нормально работает.
Объясни, зачем тебе тут HashMap, возможно, это я тупой.
Так удовлетворительно?
Java:
    @EventHandler
    public void join(PlayerJoinEvent e) {
    Player p = e.getPlayer();
        String name = p.getName().toLowerCase();
        FileConfiguration c = plugin.getConfig();
        if(!c.contains("players." + name)) {
        c.set("players." + name + ".kills", 0);
        c.set("players." + name + ".deaths", 0);
        c.set("players." + name + ".rating", 0);
        }
        plugin.saveConfig();
    }
 

Поделиться этой страницей

Назад
Верх