Compare commits

..

12 commits
master ... vc

5 changed files with 265 additions and 182 deletions

View file

@ -1,202 +1,202 @@
# CoreProtect Language File (ru)
ACTION_NOT_SUPPORTED: "Данное действие не поддерживается этой командой."
ACTION_NOT_SUPPORTED: "<red>Данное действие не поддерживается этой командой"
AMOUNT_BLOCK: "{0} {блок|блоков}"
AMOUNT_CHUNK: "{0} {чанк|чанков}"
AMOUNT_ENTITY: "{0} {существо|существ}"
AMOUNT_ITEM: "{0} {предмет|предметов}"
API_TEST: "Тест API прошёл успешно!"
CACHE_ERROR: "ВНИМАНИЕ: Ошибка при проверке кеша {0}."
CACHE_RELOAD: "Принудительная перезагрузка кеша {отображения|мира} из базы данных."
CHECK_CONFIG: "Пожалуйста, проверьте config.yml"
COMMAND_CONSOLE: "Пожалуйста, запустите команду из консоли."
COMMAND_NOT_FOUND: "Команда «{0}» не найдена."
COMMAND_THROTTLED: "Подождите немного и попробуйте еще раз."
CONSUMER_ERROR: "Обработка потребительской очереди уже {приостановлено|возобновлено}."
CONSUMER_TOGGLED: "Обработка очереди потребителей была {приостановлено|возобновлено}."
API_TEST: "<green>Тест API прошёл успешно!"
CACHE_ERROR: "<red>ВНИМАНИЕ: Ошибка при проверке кеша {0}"
CACHE_RELOAD: "Принудительная перезагрузка кеша {отображения|мира} из базы данных"
CHECK_CONFIG: "<red>Пожалуйста, проверьте config.yml"
COMMAND_CONSOLE: "<red>Пожалуйста, запустите команду из консоли"
COMMAND_NOT_FOUND: "<red>Команда «{0}» не найдена"
COMMAND_THROTTLED: "<red>Подождите немного и попробуйте еще раз"
CONSUMER_ERROR: "<red>Обработка потребительской очереди уже {приостановлено|возобновлено}"
CONSUMER_TOGGLED: "Обработка очереди потребителей {<gray>приостановлена</gray>|<green>возобновлена</green>}"
CONTAINER_HEADER: "Контейнерные транзакции"
DATABASE_BUSY: "База данных занята. Пожалуйста, повторите попытку позже."
DATABASE_INDEX_ERROR: "Невозможно проверить индексы базы данных."
DATABASE_LOCKED_1: "База данных заблокирована. Подождите около 15 секунд..."
DATABASE_LOCKED_2: "База данных уже используется. Пожалуйста, попробуйте еще раз."
DATABASE_LOCKED_3: "Чтобы отключить блокировку базы данных, установите «database-lock: false»."
DATABASE_LOCKED_4: "Отключение блокировки базы данных может привести к повреждению данных."
DATABASE_UNREACHABLE: "База данных недоступна. Удаление данных и завершение работы."
DEVELOPMENT_BRANCH: "Обнаружена ветвь разработки, скрипты исправлений пропущены."
DIRT_BLOCK: "Под вами установлен блок грязи."
DATABASE_BUSY: "<red>База данных занята, повторите попытку позже"
DATABASE_INDEX_ERROR: "<red>Невозможно проверить индексы базы данных"
DATABASE_LOCKED_1: "<red>База данных заблокирована, подождите около 15 секунд..."
DATABASE_LOCKED_2: "<red>База данных уже используется, попробуйте еще раз"
DATABASE_LOCKED_3: "Чтобы отключить блокировку базы данных, установите «database-lock: false»"
DATABASE_LOCKED_4: "Отключение блокировки базы данных может привести к повреждению данных"
DATABASE_UNREACHABLE: "<red>База данных недоступна. Удаление данных и завершение работы"
DEVELOPMENT_BRANCH: "Обнаружена ветвь разработки, скрипты исправлений пропущены"
DIRT_BLOCK: "<gold>Под вами установлен блок грязи"
DISABLE_SUCCESS: "{0} был успешно отключён!"
ENABLE_FAILED: "{0} не удалось запустить."
ENABLE_FAILED: "<red>{0} не удалось запустить"
ENABLE_SUCCESS: "{0} был успешно запущен!"
ENJOY_COREPROTECT: "Нравится {0}? Присоединяйтесь к нашему Discord!"
FINISHING_CONVERSION: "Завершение преобразования данных. Пожалуйста, подождите..."
FINISHING_LOGGING: "Завершение регистрации данных. Пожалуйста, подождите..."
FINISHING_CONVERSION: "<gray><italic>Завершение преобразования данных. Пожалуйста, подождите..."
FINISHING_LOGGING: "<gray><italic>Завершение регистрации данных. Пожалуйста, подождите..."
FIRST_VERSION: "Исходная БД: {0}"
GLOBAL_LOOKUP: "Не указывайте радиус для глобального поиска."
GLOBAL_ROLLBACK: "Используйте «{0}», чтобы сделать {откат|восстановление} глобально"
HELP_ACTION_1: "Ограничьте поиск определенным действием."
GLOBAL_LOOKUP: "<red>Радиус для глобального поиска не требуется"
GLOBAL_ROLLBACK: "<yellow>Используйте «{0}», чтобы сделать {откат|восстановление} глобально"
HELP_ACTION_1: "Ограничьте поиск определенным действием"
HELP_ACTION_2: "Например: [a:block], [a:+block], [a:-block] [a:click], [a:container], [a:inventory], [a:item], [a:kill], [a:chat], [a:command], [a:sign], [a:session], [a:username]"
HELP_COMMAND: "Показать дополнительную информацию."
HELP_EXCLUDE_1: "Исключите блоки/пользователей."
HELP_COMMAND: "Показать дополнительную информацию"
HELP_EXCLUDE_1: "Исключите блоки/пользователей"
HELP_EXCLUDE_2: "Например: [e:stone], [e:Notch], [e:stone,Notch]"
HELP_HEADER: "{0} Помощь"
HELP_INCLUDE_1: "Включите определенные блоки/сущности."
HELP_HEADER: "<yellow>Помощь по командам (<gray>отслеживание действий<yellow>)"
HELP_INCLUDE_1: "Включите определенные блоки/сущности"
HELP_INCLUDE_2: "Например: [i:stone], [i:zombie], [i:stone,wood,bedrock]"
HELP_INSPECT_1: "С включенным режимом инспектора вы можете сделать следующее:"
HELP_INSPECT_2: "Щелкните левой кнопкой мыши по блоку, чтобы увидеть, кто разместил этот блок.."
HELP_INSPECT_3: "Щелкните блок правой кнопкой мыши, чтобы увидеть, какой соседний блок был сломан.."
HELP_INSPECT_4: "Поместите блок, чтобы увидеть, какой блок был сломан в этом месте."
HELP_INSPECT_5: "Поместите блок в жидкость (и т.п.), чтобы увидеть, кто его поместил."
HELP_INSPECT_6: "Щелкните правой кнопкой мыши дверь, сундук и т.д., чтобы узнать, кто последний использовал их."
HELP_INSPECT_7: "Подсказка: Вы можете использовать «/co i» для быстрого переключения режима инспектора."
HELP_INSPECT_COMMAND: "Включает или выключает режим инспектора блоков."
HELP_LIST: "Отображает список всех команд."
HELP_LOOKUP_1: "Команда быстрого доступа."
HELP_LOOKUP_2: "Используйте после проверки блока для просмотра журналов."
HELP_LOOKUP_COMMAND: "Глобальный поиск данных блоков."
HELP_NO_INFO: "Информация о команде «{0}» не найдена."
HELP_PARAMETER: "Пожалуйста, просмотрите «{0}» для получения подробной информации о параметрах."
HELP_PARAMS_1: "Выполните {поиск|откат|восстановление}."
HELP_PARAMS_2: "Укажите пользователей для {поиска|отката|восстановления}."
HELP_PARAMS_3: "Укажите время для {поиска|отката|восстановления}."
HELP_PARAMS_4: "Укажите область радиуса, чтобы ограничить {поиск|откат|восстановление}."
HELP_PARAMS_5: "Ограничьте {поиск|откат|восстановление} определенным действием."
HELP_PARAMS_6: "Включите определенные блоки/объекты в {поиск|откат|восстановление}."
HELP_PARAMS_7: "Исключите блоки/пользователей из {поиска|отката|восстановления}."
HELP_PURGE_1: "Удалить данные старше указанного времени."
HELP_PURGE_2: "Например, «{0}» удалит все данные старше одного месяца и сохранит данные только за последние 30 дней."
HELP_PURGE_COMMAND: "Удалит старые данные блока."
HELP_RADIUS_1: "Укажите радиус области."
HELP_INSPECT_1: "С включенным режимом CHECKER вы можете сделать следующее:"
HELP_INSPECT_2: "Щелкните левой кнопкой мыши по блоку, чтобы увидеть, кто разместил этот блок"
HELP_INSPECT_3: "Щелкните блок правой кнопкой мыши, чтобы увидеть, какой соседний блок был сломан"
HELP_INSPECT_4: "Поместите блок, чтобы увидеть, какой блок был сломан в этом месте"
HELP_INSPECT_5: "Поместите блок в жидкость (и т.п.), чтобы увидеть, кто его поместил"
HELP_INSPECT_6: "Щелкните правой кнопкой мыши дверь, сундук и т.д., чтобы узнать, кто последний использовал их"
HELP_INSPECT_7: "Подсказка: Вы можете использовать «/co i» для быстрого переключения режима CHECKER"
HELP_INSPECT_COMMAND: "Включает или выключает режим проверки логов (CHECKER)"
HELP_LIST: "Отображает список всех команд"
HELP_LOOKUP_1: "Команда быстрого доступа"
HELP_LOOKUP_2: "Используйте после проверки блока для просмотра журналов"
HELP_LOOKUP_COMMAND: "Глобальный поиск данных блоков"
HELP_NO_INFO: "<red>Информация о команде «{0}» не найдена"
HELP_PARAMETER: "Пожалуйста, просмотрите «{0}» для получения подробной информации о параметрах"
HELP_PARAMS_1: "Выполните {поиск|откат|восстановление}"
HELP_PARAMS_2: "Укажите пользователей для {поиска|отката|восстановления}"
HELP_PARAMS_3: "Укажите время для {поиска|отката|восстановления}"
HELP_PARAMS_4: "Укажите область радиуса, чтобы ограничить {поиск|откат|восстановление}"
HELP_PARAMS_5: "Ограничьте {поиск|откат|восстановление} определенным действием"
HELP_PARAMS_6: "Включите определенные блоки/объекты в {поиск|откат|восстановление}"
HELP_PARAMS_7: "Исключите блоки/пользователей из {поиска|отката|восстановления}"
HELP_PURGE_1: "Удалить данные старше указанного времени"
HELP_PURGE_2: "Например, «{0}» удалит все данные старше одного месяца и сохранит данные только за последние 30 дней"
HELP_PURGE_COMMAND: "Удалит старые данные блока"
HELP_RADIUS_1: "Укажите радиус области"
HELP_RADIUS_2: "Например: [r:10] (Внесёт изменения только в пределах 10 блоков от вас)"
HELP_RELOAD_COMMAND: "Перезагружает файл конфигурации."
HELP_RESTORE_COMMAND: "Восстановит данные блока."
HELP_ROLLBACK_COMMAND: "Откатит данные блока."
HELP_STATUS: "Просмотр статуса плагина и информации о версии."
HELP_STATUS_COMMAND: "Отображает статус плагина."
HELP_TELEPORT: "Телепорт в локацию."
HELP_TIME_1: "Укажите время поиска."
HELP_RELOAD_COMMAND: "Перезагружает файл конфигурации"
HELP_RESTORE_COMMAND: "Отмена отката действий"
HELP_ROLLBACK_COMMAND: "Откат действий"
HELP_STATUS: "Просмотр статуса плагина и информации о версии"
HELP_STATUS_COMMAND: "Отображает статус плагина"
HELP_TELEPORT: "Телепорт в локацию"
HELP_TIME_1: "Укажите время поиска"
HELP_TIME_2: "Например: [t:2w,5d,7h,2m,10s], [t:5d2h], [t:2.50h]"
HELP_USER_1: "Укажите пользовател(я/ей) для поиска."
HELP_USER_1: "Укажите пользовател(я/ей) для поиска"
HELP_USER_2: "Например: [u:Notch], [u:Notch,#enderman]"
INCOMPATIBLE_ACTION: "«{0}» нельзя использовать с этим действием."
INSPECTOR_ERROR: "Режим инспектора уже {включён|выключен}."
INSPECTOR_TOGGLED: "Режим инспектора теперь {включён|выключен}."
INTEGRATION_ERROR: "Невозможно {инициализировать|отключить} регистрацию {0}."
INTEGRATION_SUCCESS: "{0} регистрация успешно {инициализирована|отключена}."
INTEGRATION_VERSION: "Обнаружена недопустимая версия {0}."
INCOMPATIBLE_ACTION: "<red>«{0}» нельзя использовать с этим действием"
INSPECTOR_ERROR: "<red>Режим CHECKER уже {включён|выключен}"
INSPECTOR_TOGGLED: "Режим <gray>CHECKER {<green>включён|<red>выключен}"
INTEGRATION_ERROR: "<red>Невозможно {инициализировать|отключить} регистрацию {0}"
INTEGRATION_SUCCESS: "{0} регистрация успешно {<green>инициализирована|<red>отключена}"
INTEGRATION_VERSION: "<red>Обнаружена недопустимая версия {0}"
INTERACTIONS_HEADER: "Взаимодействие с игроками"
INVALID_ACTION: "Это недопустимое действие."
INVALID_BRANCH_1: "Неверная версия плагина (ветка не задана)."
INVALID_BRANCH_2: "Чтобы продолжить, установите ветку проекта на «development»."
INVALID_BRANCH_3: "Запуск кода который находится в разработке может привести к повреждению данных."
INVALID_CONTAINER: "Пожалуйста, сначала проверьте действующий контейнер."
INVALID_DONATION_KEY: "Недействительный ключ пожертвования."
INVALID_INCLUDE: "«{0}» неверное имя блока/сущности."
INVALID_INCLUDE_COMBO: "Это недопустимая комбинация блока/сущности."
INVALID_RADIUS: "Пожалуйста, введите допустимый радиус."
INVALID_SELECTION: "Выбор {0} не найден."
INVALID_USERNAME: "«{0}» неверное имя пользователя."
INVALID_WORLD: "Укажите действительный мир."
INVALID_ACTION: "<red>Это недопустимое действие"
INVALID_BRANCH_1: "<red>Неверная версия плагина (ветка не задана)"
INVALID_BRANCH_2: "<yellow>Чтобы продолжить, установите ветку проекта на «development»"
INVALID_BRANCH_3: "<gold>Запуск кода который находится в разработке может привести к повреждению данных"
INVALID_CONTAINER: "<red>Пожалуйста, сначала проверьте действующий контейнер"
INVALID_DONATION_KEY: "<red>Недействительный ключ пожертвования"
INVALID_INCLUDE: "<red>«{0}» неверное имя блока/сущности"
INVALID_INCLUDE_COMBO: "<red>Недопустимая комбинация блока/сущности"
INVALID_RADIUS: "<red>Пожалуйста, введите допустимый радиус."
INVALID_SELECTION: "<red>Выбор {0} не найден"
INVALID_USERNAME: "<red>«{0}» неверное имя пользователя."
INVALID_WORLD: "<red>Укажите действительный мир"
LATEST_VERSION: "Последняя версия: {0}"
LINK_DISCORD: "Discord: {0}"
LINK_DOWNLOAD: "Загрузить: {0}"
LINK_PATREON: "Patreon: {0}"
LINK_WIKI_BLOCK: "Названия блоков: {0}"
LINK_WIKI_ENTITY: "Названия сущностей: {0}"
LOGGING_ITEMS: "{0} предметы регистрируются. Пожалуйста, подождите..."
LOGGING_TIME_LIMIT: "Достигнуто ограничение по времени регистрации. Удаление данных и завершение работы."
LOOKUP_BLOCK: "{0} {поставил|сломал} {1}."
LOOKUP_CONTAINER: "{0} {добавил|забрал} {1} {2}."
LOGGING_ITEMS: "<gray><italic>{0} предметы регистрируются. Пожалуйста, подождите..."
LOGGING_TIME_LIMIT: "<red>Достигнуто ограничение по времени регистрации. Удаление данных и завершение работы"
LOOKUP_BLOCK: "{0} {<green>поставил|<red>сломал} {1}"
LOOKUP_CONTAINER: "{0} {<green>положил|<red>забрал} {1} {2}"
LOOKUP_HEADER: "{0} Результаты поиска"
LOOKUP_INTERACTION: "{0} {нажал|убил} {1}."
LOOKUP_ITEM: "{0} {подобрал|выкинул} {1} {2}."
LOOKUP_LOGIN: "{0} {вошёл|вышел}."
LOOKUP_INTERACTION: "{0} {<green>нажал|<red>убил} {1}"
LOOKUP_ITEM: "{0} {<green>подобрал|<red>выкинул} {1} {2}"
LOOKUP_LOGIN: "{0} {<green>вошёл|<red>вышел}"
LOOKUP_PAGE: "Страница {0}"
LOOKUP_PROJECTILE: "{0} {бросил|выстрелил} {1} {2}."
LOOKUP_ROWS_FOUND: "{0} {строка|строк} найдено."
LOOKUP_SEARCHING: "Ведётся поиск. Пожалуйста подождите..."
LOOKUP_STORAGE: "{0} {положил|забрал} {1} {2}."
LOOKUP_TIME: "{0} назад"
LOOKUP_USERNAME: "{0} зарегистрирован как {1}."
MAXIMUM_RADIUS: "Максимальный радиус для {поиска|отката|восстановления} - {0}."
MISSING_ACTION_USER: "Чтобы использовать это действие, укажите пользователя."
MISSING_LOOKUP_TIME: "Пожалуйста, укажите количество времени, чтобы использовать {поиск|откат|восстановление}."
MISSING_LOOKUP_USER: "Укажите пользователя или {блок|радиус} для поиска."
MISSING_PARAMETERS: "Пожалуйста используйте «{0}»."
MISSING_ROLLBACK_RADIUS: "Вы не указали радиус {отката|восстановления}."
MISSING_ROLLBACK_USER: "Вы не указали пользователя для {отката|восстановления}."
MYSQL_UNAVAILABLE: "Невозможно подключиться к серверу MySQL."
NO_DATA: "Данные не найдены в {0}."
NO_DATA_LOCATION: "В этом месте {данные|транзакции|взаимодействия|сообщения} не обнаружены.."
NO_PERMISSION: "У вас нет прав чтобы сделать это."
NO_RESULTS: "Результаты не найдены."
NO_RESULTS_PAGE: "Для этой страницы {результатов|данных} не найдено."
NO_ROLLBACK: "{Ожидаемый|Предыдущий} откат/восстановление не найдены."
PATCH_INTERRUPTED: "Обновление прервано. Попробую снова при перезапуске."
PATCH_OUTDATED_1: "Невозможно обновить базы данных старше {0}."
PATCH_OUTDATED_2: "Пожалуйста, обновите поддерживаемую версию CoreProtect."
PATCH_PROCESSING: "Обработка новых данных. Пожалуйста, подождите..."
PATCH_SKIP_UPDATE: "{Пропущена таблица|Пропущен индекс} {обновление|создание|удаление} в {0}."
PATCH_STARTED: "Выполняется обновление {0}. Пожалуйста, подождите..."
PATCH_SUCCESS: "Успешно обновлен до {0}."
PATCH_UPGRADING: "Выполняется обновление базы данных. Пожалуйста, подождите..."
PLEASE_SELECT: "Пожалуйста выберите: «{0}» или «{1}»."
PREVIEW_CANCELLED: "Предварительный просмотр отменен."
PREVIEW_CANCELLING: "Отмена предварительного просмотра..."
PREVIEW_IN_GAME: "Предварительный просмотр откатов доступен только в игре."
PREVIEW_TRANSACTION: "Вы не можете просмотреть {контейнер|инвентарь} транзакции."
PURGE_ABORTED: "Очистка не удалась. База данных может быть повреждена."
PURGE_ERROR: "Невозможно обработать данные {0}!"
PURGE_FAILED: "Очистка не удалась. Пожалуйста, повторите попытку позже."
PURGE_IN_PROGRESS: "Выполняется чистка. Пожалуйста, повторите попытку позже."
PURGE_MINIMUM_TIME: "Удалить можно только данные старше {0} {дней|часов}."
PURGE_NOTICE_1: "Учтите, что это может занять некоторое время."
PURGE_NOTICE_2: "Не перезагружайте сервер до завершения."
PURGE_OPTIMIZING: "Оптимизация базы данных. Пожалуйста, подождите..."
PURGE_PROCESSING: "Обработка данных {0}..."
PURGE_REPAIRING: "Попытка исправления. Это может занять некоторое время..."
PURGE_ROWS: "{0} {строка|строки} данных очищены."
PURGE_STARTED: "Очистка данных началась «{0}»."
PURGE_SUCCESS: "Очистка данных прошла успешно."
RELOAD_STARTED: "Перезагрузка конфигурации - подождите."
RELOAD_SUCCESS: "Конфигурация успешно перезагружена."
ROLLBACK_ABORTED: "Откат или восстановление прерваны."
ROLLBACK_CHUNKS_FOUND: "Найдено {0} {чанк|чанков} для изменения."
ROLLBACK_CHUNKS_MODIFIED: "Изменено {0}/{1} {чанк|чанков}."
ROLLBACK_COMPLETED: "{Откат|Восстановление|Предварительный просмотр} завершен для «{0}»."
ROLLBACK_EXCLUDED_USERS: "{Исключен пользователь|Исключены пользователи}: «{0}»."
ROLLBACK_INCLUDE: "{Включён|Исключён} {блок|сущность|цель} {типа|типов}: «{0}»."
ROLLBACK_IN_PROGRESS: "Откат/восстановление уже выполняется."
ROLLBACK_LENGTH: "Заняло времени: {0} {секунду|секунд}."
ROLLBACK_MODIFIED: "{Изменено|Изменены} {0}."
ROLLBACK_RADIUS: "Радиус: {0} {блок|блоков}."
ROLLBACK_SELECTION: "Радиус установлен «{0}»."
ROLLBACK_STARTED: "{Откат|Восстановление|Предварительный просмотр} начат «{0}»."
ROLLBACK_TIME: "Временной интервал: {0}."
ROLLBACK_WORLD_ACTION: "Только {мир|действие} «{0}»."
LOOKUP_PROJECTILE: "{0} {<red>бросил|<red>выстрелил} {1} {2}"
LOOKUP_ROWS_FOUND: "{0} {строка|строк} найдено"
LOOKUP_SEARCHING: "<gray><italic>Поиск данных, подождите..."
LOOKUP_STORAGE: "{0} {<green>положил|<red>забрал} {1} {2}"
LOOKUP_TIME: "<yellow>{0} назад"
LOOKUP_USERNAME: "{0} зарегистрирован как {1}"
MAXIMUM_RADIUS: "<red>Максимальный радиус для {поиска|отката|восстановления} - {0}"
MISSING_ACTION_USER: "<red>Чтобы использовать это действие, укажите пользователя"
MISSING_LOOKUP_TIME: "<red>Пожалуйста, укажите количество времени, чтобы использовать {поиск|откат|восстановление}"
MISSING_LOOKUP_USER: "<red>Укажите пользователя или {блок|радиус} для поиска"
MISSING_PARAMETERS: "<red>Пожалуйста используйте «{0}»"
MISSING_ROLLBACK_RADIUS: "<red>Вы не указали радиус {отката|восстановления}"
MISSING_ROLLBACK_USER: "<red>Вы не указали пользователя для {отката|восстановления}"
MYSQL_UNAVAILABLE: "<red>Невозможно подключиться к серверу MySQL"
NO_DATA: "<red>Данные не найдены в {0}"
NO_DATA_LOCATION: "<red>В этом месте {данные|транзакции|взаимодействия|сообщения} не обнаружены"
NO_PERMISSION: "<red>Нет доступа!"
NO_RESULTS: "<red>Результаты не найдены"
NO_RESULTS_PAGE: "<red>Для этой страницы {результатов|данных} не найдено"
NO_ROLLBACK: "<red>{Ожидаемый|Предыдущий} откат/восстановление не найдены"
PATCH_INTERRUPTED: "Обновление прервано. Попробую снова при перезапуске..."
PATCH_OUTDATED_1: "<red>Невозможно обновить базы данных старше {0}"
PATCH_OUTDATED_2: "Пожалуйста, обновите поддерживаемую версию Griefus"
PATCH_PROCESSING: "<gray><italic>Обработка новых данных. Пожалуйста, подождите..."
PATCH_SKIP_UPDATE: "{Пропущена таблица|Пропущен индекс} {обновление|создание|удаление} в {0}"
PATCH_STARTED: "<gray><italic>Выполняется обновление {0}. Пожалуйста, подождите..."
PATCH_SUCCESS: "<green>Успешно обновлен до {0}"
PATCH_UPGRADING: "<gray><italic>Выполняется обновление базы данных. Пожалуйста, подождите..."
PLEASE_SELECT: "<red>Пожалуйста выберите: «{0}» или «{1}»"
PREVIEW_CANCELLED: "<gray>Предварительный просмотр отменен"
PREVIEW_CANCELLING: "<gray><italic>Отмена предварительного просмотра..."
PREVIEW_IN_GAME: "<red>Предварительный просмотр откатов доступен только в игре"
PREVIEW_TRANSACTION: "<red>Вы не можете просмотреть {контейнер|инвентарь} транзакции"
PURGE_ABORTED: "<red>Очистка не удалась. База данных может быть повреждена"
PURGE_ERROR: "<red>Невозможно обработать данные {0}!"
PURGE_FAILED: "<red>Очистка не удалась. Пожалуйста, повторите попытку позже"
PURGE_IN_PROGRESS: "<red>Выполняется чистка. Пожалуйста, повторите попытку позже"
PURGE_MINIMUM_TIME: "<red>Удалить можно только данные старше {0} {дней|часов}"
PURGE_NOTICE_1: "<yellow>Учтите, что это может занять некоторое время"
PURGE_NOTICE_2: "<gold>Не перезагружайте сервер до завершения"
PURGE_OPTIMIZING: "<gray><italic>Оптимизация базы данных. Пожалуйста, подождите..."
PURGE_PROCESSING: "<gray><italic>Обработка данных {0}..."
PURGE_REPAIRING: "<gray><italic>Попытка исправления. Это может занять некоторое время..."
PURGE_ROWS: "<green>{0} {строка|строки} данных очищены"
PURGE_STARTED: "<gray>Очистка данных началась «{0}»"
PURGE_SUCCESS: "<green>Очистка данных прошла успешно"
RELOAD_STARTED: "<gray><italic>Перезагрузка конфигурации, подождите..."
RELOAD_SUCCESS: "<green>Конфигурация успешно перезагружена"
ROLLBACK_ABORTED: "<red>Откат или восстановление прерваны"
ROLLBACK_CHUNKS_FOUND: "<gray>Найдено {0} {чанк|чанков} для изменения"
ROLLBACK_CHUNKS_MODIFIED: "<gray>Изменено {0}/{1} {чанк|чанков}"
ROLLBACK_COMPLETED: "<gray>{Откат|Восстановление|Предварительный просмотр} завершен для «{0}»"
ROLLBACK_EXCLUDED_USERS: "<gray>{Исключен пользователь|Исключены пользователи}: «{0}»"
ROLLBACK_INCLUDE: "<gray>{Включён|Исключён} {блок|сущность|цель} {типа|типов}: «{0}»"
ROLLBACK_IN_PROGRESS: "<red>Откат/восстановление уже выполняется"
ROLLBACK_LENGTH: "<gray>Заняло времени: {0} {секунду|секунд}"
ROLLBACK_MODIFIED: "<gray>{Изменено|Изменены} {0}"
ROLLBACK_RADIUS: "<gray>Радиус: {0} {блок|блоков}"
ROLLBACK_SELECTION: "<gray>Радиус установлен «{0}»"
ROLLBACK_STARTED: "<gray>{Откат|Восстановление|Предварительный просмотр} начат «{0}»"
ROLLBACK_TIME: "<gray>Временной интервал: {0}"
ROLLBACK_WORLD_ACTION: "<gray>Только {мир|действие} «{0}»"
SIGN_HEADER: "Сообщения на табличке"
STATUS_CONSUMER: "Потребитель: {0} {предмет|предметы} в очереди."
STATUS_CONSUMER: "Потребитель: {0} {предмет|предметы} в очереди"
STATUS_DATABASE: "База данных: Использует {0}."
STATUS_INTEGRATION: "{0}: Интеграция {включена|отключена}."
STATUS_INTEGRATION: "{0}: Интеграция {включена|отключена}"
STATUS_LICENSE: "Лицензия: {0}"
STATUS_VERSION: "Версия: {0}"
TELEPORTED: "Телепортирование в {0}."
TELEPORTED_SAFETY: "Телепортируем вас в безопасное место."
TELEPORT_PLAYERS: "Команду телепортации могут использовать только игроки."
TELEPORTED: "<gray><italic>Телепортирование в {0}..."
TELEPORTED_SAFETY: "<yellow>Телепортируем вас в безопасное место"
TELEPORT_PLAYERS: "<red>Команду телепортации могут использовать только игроки"
TIME_DAYS: "{0} {дня|дней}"
TIME_HOURS: "{0} {час|часов}"
TIME_MINUTES: "{0} {минута|минут}"
TIME_SECONDS: "{0} {секунда|секунд}"
TIME_UNITS: "{/m|/h|/d}"
TIME_UNITS: "{ мин.| ч.| д.}"
TIME_WEEKS: "{0} {неделя|недель}"
UPDATE_ERROR: "Произошла ошибка при проверке обновлений."
UPDATE_ERROR: "<red>Произошла ошибка при проверке обновлений"
UPDATE_HEADER: "{0} Обновление"
UPDATE_NOTICE: "Примечание: теперь доступен {0}."
UPGRADE_IN_PROGRESS: "Выполняется обновление. Пожалуйста, повторите попытку позже."
USER_NOT_FOUND: "Пользователь «{0}» не найден."
USER_OFFLINE: "Пользователь \"{0}\" не в сети."
USING_MYSQL: "Для хранения данных используется MySQL."
USING_SQLITE: "Для хранения данных используется SQLite."
VALID_DONATION_KEY: "Действующий ключ пожертвования."
UPDATE_NOTICE: "Примечание: теперь доступен {0}"
UPGRADE_IN_PROGRESS: "<red>Выполняется обновление. Пожалуйста, повторите попытку позже"
USER_NOT_FOUND: "<red>Пользователь «{0}» не найден"
USER_OFFLINE: "<red>Пользователь \"{0}\" не в сети"
USING_MYSQL: "Для хранения данных используется MySQL"
USING_SQLITE: "Для хранения данных используется SQLite"
VALID_DONATION_KEY: "Действующий ключ пожертвования"
VERSION_NOTICE: "Версия {0} уже доступна!"
VERSION_REQUIRED: "{0} {1} или выше требуется."
WORLD_NOT_FOUND: "Мир «{0}» не найден."
VERSION_REQUIRED: "<red>{0} {1} или выше требуется"
WORLD_NOT_FOUND: "<red>Мир «{0}» не найден"

View file

@ -109,6 +109,8 @@ public class StandardLookupThread implements Runnable {
ConfigHandler.lookupAlist.put(player.getName(), actions);
ConfigHandler.lookupRadius.put(player.getName(), radius);
String separator = Color.DARK_GREY + '-';
if (connection != null) {
Statement statement = connection.createStatement();
String baduser = "";
@ -195,14 +197,15 @@ public class StandardLookupThread implements Runnable {
else if (pageStart < rows) {
List<String[]> lookupList = Lookup.performPartialLookup(statement, player, uuidList, userList, blockList, excludedBlocks, excludedUsers, actions, finalLocation, radius, rowData, timeStart, timeEnd, (int) pageStart, displayResults, restrict_world, true);
Chat.sendMessage(player, Color.WHITE + "----- " + Color.DARK_AQUA + Phrase.build(Phrase.LOOKUP_HEADER, "Griefus" + Color.WHITE + " | " + Color.DARK_AQUA) + Color.WHITE + " -----");
// Chat.sendMessage(player, Color.WHITE + "----- " + Color.DARK_AQUA + Phrase.build(Phrase.LOOKUP_HEADER, "Griefus" + Color.WHITE + " | " + Color.DARK_AQUA) + Color.WHITE + " -----");
Chat.sendComponent(player, StringUtils.makeHeader("LOGS"));
if (actions.contains(6) || actions.contains(7)) { // Chat/command
for (String[] data : lookupList) {
String time = data[0];
String dplayer = data[1];
String message = data[2];
String timeago = ChatUtils.getTimeSince(Integer.parseInt(time), unixtimestamp, true);
Chat.sendComponent(player, timeago + " " + Color.WHITE + "- " + Color.DARK_AQUA + dplayer + ": " + Color.WHITE, message);
Chat.sendComponent(player, "<dark_gray><bold>|<reset> " + timeago + " " + Color.WHITE + "- " + message);
if (PluginChannelHandshakeListener.getInstance().isPluginChannelPlayer(player)) {
int wid = Integer.parseInt(data[3]);
int dataX = Integer.parseInt(data[4]);
@ -232,7 +235,7 @@ public class StandardLookupThread implements Runnable {
}
String tag = (action != 0 ? Color.GREEN + "+" : Color.RED + "-");
Chat.sendComponent(player, timeago + " " + tag + " " + Color.DARK_AQUA + Phrase.build(Phrase.LOOKUP_LOGIN, Color.DARK_AQUA + dplayer + Color.WHITE, (action != 0 ? Selector.FIRST : Selector.SECOND)));
Chat.sendComponent(player, "<dark_gray><bold>|<reset> " + timeago + " " + tag + " " + Color.DARK_AQUA + Phrase.build(Phrase.LOOKUP_LOGIN, Color.DARK_AQUA + dplayer + Color.WHITE, (action != 0 ? Selector.FIRST : Selector.SECOND)));
Chat.sendComponent(player, Color.WHITE + leftPadding + Color.GREY + "^ " + ChatUtils.getCoordinates(command.getName(), wid, dataX, dataY, dataZ, true, true) + "");
PluginChannelListener.getInstance().sendInfoData(player, Integer.parseInt(time), Phrase.LOOKUP_LOGIN, (action != 0 ? Selector.FIRST : Selector.SECOND), dplayer, -1, dataX, dataY, dataZ, wid);
}
@ -266,8 +269,8 @@ public class StandardLookupThread implements Runnable {
leftPadding = leftPadding + Color.WHITE + Strings.padStart("", (timeLength - 50) / 4, ' ');
}
Chat.sendComponent(player, timeago + " " + Color.WHITE + "- " + Color.DARK_AQUA + dplayer + ": " + Color.WHITE, message);
Chat.sendComponent(player, Color.WHITE + leftPadding + Color.GREY + "^ " + ChatUtils.getCoordinates(command.getName(), wid, dataX, dataY, dataZ, true, true) + "");
Chat.sendComponent(player,"<dark_gray><bold>|<reset> " + timeago + " " + Color.WHITE + "- " + Color.DARK_AQUA + dplayer + ": " + Color.WHITE, message);
Chat.sendComponent(player, Color.RESET + leftPadding + ChatUtils.getShowCoordinatesButton(dataX, dataY, dataZ) + " " + ChatUtils.getTeleportButton(wid, dataX, dataY, dataZ));
PluginChannelListener.getInstance().sendMessageData(player, Integer.parseInt(time), dplayer, message, true, dataX, dataY, dataZ, wid);
}
}
@ -321,7 +324,7 @@ public class StandardLookupThread implements Runnable {
tag = (daction == 0 ? Color.GREEN + "+" : Color.RED + "-");
}
Chat.sendComponent(player, timeago + " " + tag + " " + Phrase.build(Phrase.LOOKUP_CONTAINER, Color.DARK_AQUA + rbd + dplayer + Color.WHITE + rbd, "x" + amount, ChatUtils.createTooltip(Color.DARK_AQUA + rbd + dname, tooltip) + Color.WHITE, selector));
Chat.sendComponent(player, "<dark_gray><bold>|<reset> " + timeago + " " + separator + " " + Phrase.build(Phrase.LOOKUP_CONTAINER, Color.WHITE + Color.BOLD + rbd + dplayer + Color.RESET + rbd, "x" + amount, ChatUtils.createTooltip(Color.GOLD + rbd + dname, tooltip) + Color.WHITE, selector));
PluginChannelListener.getInstance().sendData(player, Integer.parseInt(time), Phrase.LOOKUP_CONTAINER, selector, dplayer, dname, amount, dataX, dataY, dataZ, wid, rbd, true, tag.contains("+"));
}
}
@ -425,7 +428,7 @@ public class StandardLookupThread implements Runnable {
action = "a:container";
}
Chat.sendComponent(player, timeago + " " + tag + " " + Phrase.build(phrase, Color.DARK_AQUA + rbd + dplayer + Color.WHITE + rbd, "x" + amount, ChatUtils.createTooltip(Color.DARK_AQUA + rbd + dname, tooltip) + Color.WHITE, selector));
Chat.sendComponent(player, "<dark_gray><bold>|<reset>" + timeago + " " + separator + " " + Phrase.build(phrase, Color.WHITE + Color.BOLD + rbd + dplayer + Color.RESET + rbd, "x" + amount, ChatUtils.createTooltip(Color.GOLD + rbd + dname, tooltip) + Color.WHITE, selector));
PluginChannelListener.getInstance().sendData(player, Integer.parseInt(time), phrase, selector, dplayer, dname, (tag.contains("+") ? 1 : -1), dataX, dataY, dataZ, wid, rbd, action.contains("container"), tag.contains("+"));
}
else {
@ -441,20 +444,20 @@ public class StandardLookupThread implements Runnable {
tag = (daction != 0 ? Color.GREEN + "+" : Color.RED + "-");
}
Chat.sendComponent(player, timeago + " " + tag + " " + Phrase.build(phrase, Color.DARK_AQUA + rbd + dplayer + Color.WHITE + rbd, Color.DARK_AQUA + rbd + dname + Color.WHITE, selector));
Chat.sendComponent(player, timeago + " " + separator + " " + Phrase.build(phrase, Color.WHITE + Color.BOLD + rbd + dplayer + Color.RESET + rbd, Color.GOLD + rbd + dname + Color.WHITE, selector));
PluginChannelListener.getInstance().sendData(player, Integer.parseInt(time), phrase, selector, dplayer, dname, (tag.contains("+") ? 1 : -1), dataX, dataY, dataZ, wid, rbd, false, tag.contains("+"));
}
action = (actions.size() == 0 ? " (" + action + ")" : "");
Chat.sendComponent(player, Color.WHITE + leftPadding + Color.GREY + "^ " + ChatUtils.getCoordinates(command.getName(), wid, dataX, dataY, dataZ, true, true) + Color.GREY + Color.ITALIC + action);
Chat.sendComponent(player, Color.RESET + leftPadding + ChatUtils.getShowCoordinatesButton(dataX, dataY, dataZ) + " " + ChatUtils.getTeleportButton(wid, dataX, dataY, dataZ));
}
}
if (rows > displayResults) {
int total_pages = (int) Math.ceil(rows / (displayResults + 0.0));
if (actions.contains(6) || actions.contains(7) || actions.contains(9) || (actions.contains(4) && actions.contains(11))) {
/* if (actions.contains(6) || actions.contains(7) || actions.contains(9) || (actions.contains(4) && actions.contains(11))) {
Chat.sendMessage(player, "-----");
}
Chat.sendComponent(player, ChatUtils.getPageNavigation(command.getName(), page, total_pages));
} */
Chat.sendComponent(player, ChatUtils.getPageNavigationVC(command.getName(), page, total_pages));
}
}
else if (rows > 0) {

View file

@ -84,13 +84,19 @@ public class BlockLookup {
String timeAgo = ChatUtils.getTimeSince(resultTime, time, true);
if (!found) {
resultTextBuilder = new StringBuilder(Color.WHITE + "----- " + Color.DARK_AQUA + "Griefus " + Color.WHITE + "----- " + ChatUtils.getCoordinates(command, worldId, x, y, z, false, false) + "\n");
// resultTextBuilder = new StringBuilder(Color.WHITE + "----- " + Color.DARK_AQUA + "Griefus " + Color.WHITE + "----- " + ChatUtils.getCoordinates(command, worldId, x, y, z, false, false) + "\n");
// Lookup/Checker header
resultTextBuilder = new StringBuilder(StringUtils.makeHeader("CHECKER") +
" " + ChatUtils.getShowCoordinatesButton(x, y, z) +
(commandSender.hasPermission("coreprotect.teleport") ? " " + // TODO: change teleport permission key
ChatUtils.getTeleportButton(worldId, x, y, z) : "") + "\n");
}
found = true;
Phrase phrase = Phrase.LOOKUP_BLOCK;
String selector = Selector.FIRST;
String tag = Color.WHITE + "-";
String separator = Color.DARK_GREY + "-";
if (resultAction == 2 || resultAction == 3) {
phrase = Phrase.LOOKUP_INTERACTION; // {clicked|killed}
selector = (resultAction != 3 ? Selector.FIRST : Selector.SECOND);
@ -134,7 +140,7 @@ public class BlockLookup {
} */
// Griefus end
resultTextBuilder.append(timeAgo + " " + tag + " ").append(Phrase.build(phrase, Color.DARK_AQUA + rbFormat + resultUser + Color.WHITE + rbFormat, Color.DARK_AQUA + rbFormat + target + Color.WHITE, selector)).append("\n");
resultTextBuilder.append(timeAgo + " " + separator + " ").append(Phrase.build(phrase, Color.WHITE + Color.BOLD + rbFormat + resultUser + Color.RESET + rbFormat, Color.GOLD + rbFormat + target + Color.WHITE, selector)).append("\n");
PluginChannelListener.getInstance().sendData(commandSender, resultTime, phrase, selector, resultUser, target, -1, x, y, z, worldId, rbFormat, false, tag.contains("+"));
}
@ -143,9 +149,8 @@ public class BlockLookup {
if (found) {
if (count > limit) {
String pageInfo = Color.WHITE + "-----\n";
pageInfo = pageInfo + ChatUtils.getPageNavigation(command, page, totalPages) + "\n";
resultText = resultText + pageInfo;
// String pageInfo = Color.WHITE + "-----\n";
resultText = resultText + ChatUtils.getPageNavigationVC(command, page, totalPages) + "\n";
}
}
else {

View file

@ -2,7 +2,13 @@ package net.coreprotect.utility;
import net.coreprotect.language.Phrase;
import net.coreprotect.language.Selector;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.Bukkit;
import org.bukkit.command.ConsoleCommandSender;
import java.text.DecimalFormat;
@ -42,6 +48,19 @@ public class ChatUtils {
return message.append("</hover></click>").toString(); // griefus
}
public static String getShowCoordinatesButton(int x, int y, int z) {
return "<dark_gray><hover:show_text:\"" +
"X: <yellow>" + x + "</yellow> " +
"Y: <yellow>" + y + "</yellow> " +
"Z: <yellow>" + z + "</yellow> " +
"\">[координаты]</hover></dark_gray>";
}
public static String getTeleportButton(int worldId, int x, int y, int z) {
// May break if worldId index is outdated
return "<dark_gray><click:run_command:/tppos " + x + " " + y + " " + z + " " + Bukkit.getWorlds().get(worldId).getName() +
">[телепортироваться]</click></dark_gray>";
}
public static String getPageNavigation(String command, int page, int totalPages) {
StringBuilder message = new StringBuilder();
@ -143,6 +162,57 @@ public class ChatUtils {
return message.append(Color.WHITE + backArrow + Color.DARK_AQUA + Phrase.build(Phrase.LOOKUP_PAGE, Color.WHITE + page + "/" + totalPages) + nextArrow + pagination).toString();
}
public static String getPageNavigationVC(String command, int page, int totalPages) {
if (totalPages < 1)
return "";
Component separator = Component.text(" | ", NamedTextColor.DARK_GRAY, TextDecoration.BOLD);
String backButtonText = "[назад]";
String nextButtonText = "[далее]";
HoverEvent<Component> backButtonHover = HoverEvent
.showText(Component.text("Нажмите, чтобы перейти на предыдущую страницу", NamedTextColor.RED));
HoverEvent<Component> nextButtonHover = HoverEvent
.showText(Component.text("Нажмите, чтобы перейти на следующую страницу", NamedTextColor.GREEN));
ClickEvent backButtonClick = ClickEvent.runCommand("/" + command + " l " + (page - 1));
ClickEvent nextButtonClick = ClickEvent.runCommand("/" + command + " l " + (page + 1));
Component backButton;
if (page > 1) {
backButton = Component.text(backButtonText)
.color(NamedTextColor.RED)
.hoverEvent(backButtonHover)
.clickEvent(backButtonClick);
} else {
backButton = Component.text(backButtonText)
.color(NamedTextColor.GRAY)
.decorate(TextDecoration.ITALIC);
}
Component nextButton;
if (page < totalPages) {
nextButton = Component.text(nextButtonText)
.color(NamedTextColor.GREEN)
.hoverEvent(nextButtonHover)
.clickEvent(nextButtonClick);
} else {
nextButton = Component.text(nextButtonText)
.color(NamedTextColor.GRAY)
.decorate(TextDecoration.ITALIC);
}
Component pageCounter = Component.text(page + "/" + totalPages, NamedTextColor.GRAY);
Component navigation = Component.empty()
.append(backButton)
.append(separator)
.append(pageCounter)
.append(separator)
.append(nextButton);
return MiniMessage.miniMessage().serialize(navigation);
}
public static String getTimeSince(long resultTime, long currentTime, boolean component) {
StringBuilder message = new StringBuilder();
double timeSince = currentTime - (resultTime + 0.00);

View file

@ -135,4 +135,9 @@ public class StringUtils {
}
return list.toArray(new Integer[list.size()]);
}
// VanillaCrafts
public static String makeHeader(String header) {
return "<gray>=============== </gray><red><bold>" + header + "</bold></red><gray> ===============</gray>";
}
}