nnLogger

Для ядра nnLogger 3.1

Нет прав для скачивания
Поддерживаемые версии
  1. 1.16
  2. 1.17
  3. 1.18
  4. 1.19
  5. 1.20
Ядра и Прокси
  1. Bukkit
  2. Spigot
  3. Paper
Понравился плагин, есть идея для его улучшения или нашли баг? Тогда вам сюда!

Почему именно этот плагин?

- Гибкая настройка нужных Вам ивентов для логирования
- Счётчик аккаунтов
- Подсчёт максимально достигнутого онлайна игроков

На текущий момент плагин может логировать:
- Команды консоли
- Сообщения игроков
- Команды игроков
- Смерти игроков
- Вход/первый вход/выход игроков

Плейсхолдеры:
- %nnLogger_id% - айди аккаунта игрока
- %nnLogger_total_accounts% - количество зарегистрированных аккаунтов
- %nnLogger_maximum_online% - получить максимально достигнутый онлайн сервера


config.yml
YAML:
debug-enabled: true

# По умолчанию плагин использует свои плейсхолдеры, которые
# позволяют увеличить скорость работы. Но вы можете дополнительно
# использовать плейсхолдеры от PlaceholderAPI, включив этот параметр.
# В логах, не использующих аргумент [PLAYER], будут использоваться
# только доступные локальные плейсхолдеры.
use-placeholderAPI: false
# Формат времени:
# MM - месяц
# dd - день
# yyyy - год
# hh - часы
# mm - минуты
# ss - секунды
time-format: 'MM/dd/yyyy hh:mm:ss'

# Ивенты - описание - особенные плейсхолдеры:
#  [SERVER] [COMMAND] - использование команды из консоли - %command%
#
#  [PLAYER] [FIRST_JOIN] - игрок присоединился - %name%, %id%, %ip%, %world%, %x%, %y%, %z%, %uuid%
#  [PLAYER] [JOIN] - игрок присоединился - %name%, %id%, %ip%, %world%, %x%, %y%, %z%, %uuid%
#  [PLAYER] [CHAT] - игрок написал сообщение - %name%, %id%, %message%, %ip%, %world%, %x%, %y%, %z%, %uuid%
#  [PLAYER] [COMMAND] - игрок выполнил команду - %name%, %id%, %command%, %ip%, %world%, %x%, %y%, %z%, %uuid%
#  [PLAYER] [DEATH] - игрок умер - %name%, %id%, %command%, %ip%, %world%, %x%, %y%, %z%, %uuid%
#  [PLAYER] [QUIT] - игрок вышел - %name%, %id%, %command%, %ip%, %world%, %x%, %y%, %z%, %uuid%
#
# Плейсхолдеры, которые можно использовать в любом ивенте:
#  %date% - дата лога
#
# Условия:
#  name - == || != - ник игрока
#  ip - == || != - айпи игрока

events:
  on-console-command:
    event: '[SERVER] [COMMAND]'
    log:
      - '[console.log] Была выполнена команда от имени консоли: %command% (дата: %date%)'

  on-player-first-join:
    event: '[PLAYER] [FIRST_JOIN]'
    log:
      - '[local-logs/%name%/join.log] %name% (%id%) присоединился к серверу впервые (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[local-logs/%name%/global.log] %name% (%id%) присоединился к серверу впервые (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/login.log] %name% (%id%) присоединился к серверу впервые (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/global.log] %name% (%id%) присоединился к серверу впервые (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
  on-player-join:
    event: '[PLAYER] [JOIN]'
    log:
      - '[local-logs/%name%/join.log] %name% (%id%) присоединился к серверу (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[local-logs/%name%/global.log] %name% (%id%) присоединился к серверу (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/login.log] %name% (%id%) присоединился к серверу (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/global.log] %name% (%id%) присоединился к серверу (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
  on-admin-join:
    event: '[PLAYER] [JOIN]'
    condition: 'name == nnikitochka'
    log:
      - '[admin logs/login.log] %name% (%id%) присоединился к серверу (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[admin logs/global.log] %name% (%id%) присоединился к серверу (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
  on-player-chat:
    event: '[PLAYER] [CHAT]'
    log:
      - '[local-logs/%name%/chat.log] %name% (%id%) написал: %message% (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[local-logs/%name%/global.log] %name% (%id%) написал: %message% (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/chat.log] %name% (%id%) написал: %message% (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/global.log] %name% (%id%) написал: %message% (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
  on-player-command:
    event: '[PLAYER] [COMMAND]'
    log:
      - '[local-logs/%name%/command.log] %name% (%id%) выполнил команду: %command% (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[local-logs/%name%/global.log] %name% (%id%) выполнил команду: %command% (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/command.log] %name% (%id%) выполнил команду: %command% (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/global.log] %name% (%id%) выполнил команду: %command% (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
  on-player-death:
    event: '[PLAYER] [DEATH]'
    log:
      - '[local-logs/%name%/death.log] %name% (%id%) умер (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[local-logs/%name%/global.log] %name% (%id%) умер (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/death.log] %name% (%id%) умер (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/global.log] %name% (%id%) умер (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
  on-player-quit:
    event: '[PLAYER] [QUIT]'
    log:
      - '[local-logs/%name%/quit.log] %name% (%id%) вышел с сервера (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[local-logs/%name%/global.log] %name% (%id%) вышел с сервера (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/quit.log] %name% (%id%) вышел с сервера (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'
      - '[logs/global.log] %name% (%id%) вышел с сервера (айпи: %ip%) (дата: %date%) (локация: %world%, %x%, %y%, %z%) (uuid: %uuid%)'

messages.yml
YAML:
reload: '&x&1&f&f&b&0&0[✔] Успешно! &fПлагин был перезагружен за &x&f&b&4&d&0&0%reload_time%&f миллисекунд!'
error-permission: '&x&f&b&4&d&0&0[⚠] Ошибка! &fУ вас недостаточно прав!'
error-argument: '&x&f&b&4&d&0&0[⚠] Ошибка! &fНеизвестный аргумент!'
unknown-player: '&x&f&b&4&d&0&0[⚠] Ошибка! &fИгрок не найден!'
player-only: '&x&f&b&4&d&0&0[⚠] Ошибка! &fДанная команда может быть выполнена только от имени игрока!'
information-not-found: 'информация не найдена'
help:
  - '&x&f&d&e&4&0&0[⚡] &fПомощь с плагином:'
  - ' &x&f&d&e&4&0&0/logger reload &f- перезагрузить плагин'
  - ' &x&f&d&e&4&0&0/logger info id <айди> &f- получить информацию о игроке с помощью айди'
  - ' &x&f&d&e&4&0&0/logger info name <ник> &f- получить информацию о игроке с помощью ника'
  - ' &x&f&d&e&4&0&0/logger info max_online &f- получить максимально достигнутый онлайн сервера'
  - ' &x&f&d&e&4&0&0/logger info total_accounts &f- получить количество зарегистрированных аккаунтов'

get-command:
  no-value-selected: '&x&f&b&0&0&0&0[✘] Ошибка! &fВы не выбрали значение!'
  no-player-selected: '&x&f&b&0&0&0&0[✘] Ошибка! &fВы не выбрали игрока!'
  no-id-selected: '&x&f&b&0&0&0&0[✘] Ошибка! &fВы не ввели айди!'
  account-count: '&x&f&d&e&4&0&0[⚡] &fНа сервере зарегистрировано &x&2&8&f&b&a&b%total_accounts% &fаккаунтов.'
  max-online: '&x&f&d&e&4&0&0[⚡] &fМаксимальный онлайн: &x&2&8&f&b&a&b%maximum_online%&f.'
  info:
    - '&x&f&d&e&4&0&0[⚡] &fИнформация о игроке:'
    - ' &fДата первого входа: &x&f&d&e&4&0&0%first_join_date%&f.'
    - ' &fДата последнего входа: &x&f&d&e&4&0&0%last_join_date%&f.'
    - ' &fДата последнего выхода: &x&f&d&e&4&0&0%last_quit_date%&f.'
    - ' &fid игрока: &x&f&d&e&4&0&0%id%&f.'
    - ' &fНик игрока: &x&f&d&e&4&0&0%name%&f.'
    - ' &fUUID игрока: &x&f&d&e&4&0&0%uuid%&f.'
Команды и права
Команды - описание - права:
- /logger reload - перезагрузка плагина - nnlogger.reload
- /logger info id <айди> - получить информацию о игроке с помощью айди - nnlogger.info
- /logger info name <ник> - получить информацию о игроке с помощью ника - nnlogger.info
- /logger info max_online - получить максимально достигнутый онлайн сервера - nnlogger.info
- /logger info total_accounts - получить количество зарегистрированных аккаунтов - nnlogger.info
  • Мне нравится (+1)
Реакции: Shon
Автор
nennikitochka
Скачивания
23
Просмотры
1 256
Первый выпуск
Обновление
Оценка
4.00 звёзд 2 оценок

Другие ресурсы пользователя nennikitochka

  • nnTNTs
    Для ядра nnTNTs
    Лучший БЕСПЛАТНЫЙ плагин на кастомный динамит! Много функций, гибкая настройка!

Поделиться ресурсом

Последние обновления

  1. 3.1

    Новое: Добавлено api плагина Добавлены новые параметры в базу данных (советую избавиться от...

Последние рецензии

Очень топовый плагин. Главная особенность как я считаю - разбитые на отдельные каталоги логи каждого игрока. Не надо теперь хуzzzть по логам, чтобы найти нужного человека, если он нужен один и единственный.

Также разраб сверх отзывчивый. Я только написал, он в 10 вечера даже ответил (чем не похвастаются многие разрабы).

И разрабу 5, и плагину 5. 10!
nennikitochka
nennikitochka
В моём регионе было 2 ночи)
Никто не просил оценки, но я оценю:

Плагин прикольный, но можешь переписать свой код получше.

Именование полей/классов/методов: Начни использовать camelCase для полей/методов, и PascalCase для классов.

К слову в Enum'ах используй желательно используй CAPS.
Класс Date со статик методом Date#get(); по сути и не нужен.
Можно было создать Utils.java, в котором был бы метод Utils#getFormattedDate(); просто и понятно что ты получаешь форматированную дату.

Метод Conditions#check, аналогично можно было бы запихнуть в Utils.java, - Utils#checkConditions();

С классами LogsReader, LogsWriter - абсолютно тоже самое, зачем создавать два класса в которых один метод?

SRP? Тогда уж можно создать условно класс Logs с методами Logs#writeFile(), Logs#readFile();

По поводу базы данных:
Зачем было тащить к себе в плагин лишние библиотеки?
Типа всяких HikariCP, jdbi3-sqlobject?

Всё же можно было реализовать и без них?

И постарайся не использовать паттерн Singleton, если интересно почитай об этом, синглтон - антипаттерн, об этом есть куча ресурсов и лекций.

В целом, критиковать и обсуждать код можно долго, твой плагин прикольный, но над кодом стоить хорошо поработать и посидеть.
nennikitochka
nennikitochka
1. Спасибо за отзыв
2. Жаль что ты не отметил, что это рецензия на код, а не на плагин и его функционал
3. Что такое camelCase?
4. Что такое PascalCase
5. Капс в енамах - мб буду использовать
6. Класс Date нужен. Я не хочу пихать миллиард разных методов, отвечающих за разные стороны плагина в один класс.
7. Conditions - 6 пункт
8. LogsWriter - писатель логов, LogsReader - читатель (будет в будущем), сейчас он не используется
9. Почему HikariCP и jdbi3-sqlobject лишние? 2кк запросов за 300мс не хочешь? Безусловно, можно было реализовать без них, но это говно, а не предъява.
10. Что такое паттерн Singleton? Мне не особо интересно о нём читать.
Назад
Сверху Снизу