e1m0dev/E1m0Admin
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
❗ DEPENDENCY API PLUGIN:
<dependency>
<groupId>io.github.e1m0dev</groupId>
<artifactId>e1m0admin-api</artifactId>
<version>3.1.0-RELEASE</version>
</dependency>
LICENSE:
MPL-2.0.
README:
❗От разработчика: И так приветствую всех читающих данный ридмач, во первых - я делаю этот плагин больше для клиентов чем для себя, как я привык работать обычно,
Но так же, у меня есть основная работа (Для тех - кто меня не знает) по этому некоторые моменты я могу упускать и не дорабатывать во время.
Если у Вас появилось предложение или разбор прошу ко мне в ТГ, если Вы заинтересованы в развитии а не "Воздухе": @e1m0dev, у меня -
Есть откаты того как я делал этот плагин от начала его ядра и до последней строчки, даже этой, мы вместе найдем проблему если это понадобится
я расскажу как она появилась и что нужно для ее исправления и естевственно выкачу патч если Вы разработчик, если же Вы обычный пользователь случайно
зашедший сюда - схема все та же, телеграм не меняю. Мне нужны решения я и ответственность, а не слова что все плохо если честно.
‼️ | Главная идея данного плагина:
Я всегда хотел сделать систему администрации по типу сампа, я очень люблю наблюдать за игроками на севрере, и мне не хватало рекона.
Версия 1.0-BETA - Больше как адаптер к обновлениям, она именно что реализует функции которые я буду улучшать если у меня хватит сил и времени.
В плагине реализованы такие функции как (Смотрим по командам/фунциям):
ADMIN:
1. /acc - Личный приватный пин-код администратора который выдает ему доступ к серверу;
2. /are (/re) [Player] - Просмотр от третьего лица, слежка за игроком;
3. /arep [Response] - Доступ к репорту с личной формой которую регулируют игроки или сервер;
4. /ainv - Личный бесконечный инвиз БЕЗ ПАРТИКЛОВ;
💚 2.0: /admins - Посмотреть кто из администраторов находится на работе, а кто просто в игре, можно выдавать как за донат версию.
💚 2.0: /ahelp - Полный список сценариев, команд, подробного использования и ситуаций применения тех или иных возможностей.
💚 2.0: /aban [Admin] - Выдать админу блокировку возможностей его аккаунта в замен потери и своих возможностей.
STAFF:
5. /aup [Admin] - Повысить администратора | Управляемая и гибкая система конфига которую Вы сами можете крутить как душе угодно - построенная лично под каждый Ваш сервер ❤️ - Сделает все за Вас.
6. /adel [Admin] - Уволить администратора сервера | Администратор и его ПИН код триггером удаляются, а так же заносится спец. лог о снятии для ведения аудита Вашего сервера.
7. /aset [Player] [Weight] - Поставить на пост Администратора игрока с определенным Weight | С удобной системой конфига которую Вы настраиваете сами и логикой плагина Вы можете это делать даже удаленно, скоро расскажу
8. /adown [Admin] - Понизить администратора | Управляемая и гибкая система конфига которую Вы сами можете крутить как душе угодно - построенная лично под каждый Ваш сервер ❤️ - Сделает все за Вас.
9. /abonus [Admin] [Sum] [Message] - Выдать бонус администраторУ | Когда мои админы хорошо работали я обычно выдавал им валюту но всегда не годовал что нет логов, теперь - Есть через админ систему, не частый случай но все равно есть.
10. /abonusall [Sum] [Message] - Выдать бонус администраторАМ | Когда мои админы хорошо работали я обычно выдавал им валюту но всегда не годовал что нет логов, теперь - Есть через админ систему, не частый случай но все равно есть.
11. /setsecret [Admin] [Code] - Выставить секретный код | Личный приватный 4-ех значный пин-код администратора который выставляет сотрудник STAFF (Главный админ, Тех/Разработчик и т.д)
💚 2.0: /aunban [Admin] - Снять админу блокировку возможностей его аккаунта.
CONSOLE:
12. /cup - Повысить администратора, удаленно (Консоль/API) | Управляемая и гибкая система конфига которую Вы сами можете крутить как душе угодно - построенная лично под каждый Ваш сервер ❤️ - Сделает все за Вас.
13. /cdel - Уволить администратора сервера, удаленно (Консоль/API) | Администратор и его ПИН код триггером удаляются, а так же заносится спец. лог о снятии для ведения аудита Вашего сервера.
14. /cdown - Понизить администратора, удаленно (Консоль/API) | Управляемая и гибкая система конфига которую Вы сами можете крутить как душе угодно - построенная лично под каждый Ваш сервер ❤️ - Сделает все за Вас.
15. /csetadmin - Поставить на пост Администратора игрока с определенным Weight, удаленно (Консоль/API) | Как и обещал, можно делать через запросы RCON с специально выделенным UUID для понимания откуда пришел запрос, UUID плагина: "77777777-7777-7777-7777-777777777777"
16. /csetsecret - Выставить секретный код, удаленно (Консоль/API) | Личный приватный 4-ех значный пин-код администратора который выставляет сотрудник STAFF (Главный админ, Тех/Разработчик и т.д)
💚 2.0: /cgivebonus [Admin] - Выдать администраторУ премию, удаленно (Консоль/API) | Когда мои админы хорошо работали я обычно выдавал им валюту но всегда не годовал, что нет логов, теперь есть даже через консоль!
💚 2.0: /cgivebonusall - Выдать всем администраторам премию, удаленно (Консоль/API) | Когда мои админы хорошо работали я обычно выдавал им валюту но всегда не годовал, что нет логов, теперь есть даже через консоль!
💚 3.0: /ablist [Admin] [Reason] - Admin Black List расшифровывается как добавление администратора в ЧСА - Черный Список Администрации.
💚 3.0: /abdlist [Admin] [Reason] - Admin Delete Black List расшифровывается как удаление администратора из ЧСА - Черный Список Администрации.
Так же реализованы:
Система регулировки сервера:
Если Вам не нужны какие либо функции - их можно отключить и не обрабатывать, Вы - сами выбираете что да, а что нет.
Система адаптивных Permissions:
ПООООЛНОСТЬЮ адаптивные к Вам Permissions которые ВЫ сами настриваете для каждого своего администратора и выдаете им именно те права - которые нужны именно им, у каждого администратора отличается род деятельности, по этому - я не стал ограничивать систему.
Админ-Зарплата:
Вы можете регулировать бонусы при определенных часах работы выдавая пачки предметов:
Например можно выдавать админ коины, или через обычный eco give, или хоть алмазами, система адаптивна под Ваши хотелки, и исполняет команды привязанные не к плагину а к ВАШИМ систамам.
или
Например когда администратор работает по 5 часов в MYCMD можно сделать скрипт на за считывание контроллера какого либо Boolean как у меня с arepaccept в системе, и принимать его другим плагином для более широких инфра.
3.0: Черный список администрации:
Вы - можете добавлять администраторов в базу данных черного списка прямо из игры! Что-бы потом не напоротся на них в будущем.
...:
И еще куча и куча отдельных систем, плагин - обширный, на несколько точек истины, на 16 точек входа, на огромную микро-сервисную архитектуру где каждый адаптер важен для продуктивности и красоты системы.
🧑💻 E1m0dev: На деле - Систем куча, плагин старается и выдерживать архитектуру цепей по типу:
❓ | Архитектура ЦЕПЕЙ:
Для обычных команд: PLAYER -> COMMAND (Адаптер) -> SERVICE (Принятие решений, обработка абстракций) -> REPOSITORY (Принятие факта, ведение диалога с базой данных) -> DAO (Структурирование и подготовка | Доступ) -> DATABASE (Хранение информации | MAIN PLUGIN STATE, там - только факты системы);
Для например репорта: PLAYER -> GUI -> CONTROLLER -> SERVICE -> REPOSITORY -> DAO -> DATABASE -> EVENT -> LISTENER -> ACTIONS
А если это emergency? - PLAYER -> COMMAND -> COMMAND-CONTROLLER -> REPOSITORYDAO -> DATABASE -> EVENT -> LISTENER -> ACTIONS
В пин-коде - тоже самое: PLAYER -> GUI -> CONTROLLER -> SERVICE -> REPOSITORY -> DAO -> DATABASE -> EVENT -> LISTENER -> ACTIONS
‼️ | Архитектура*:
Мои:
Главные управляющие абстракции: API;
Главные точки входа: COMMANDS;
Обработчики логики: SERVICE;
Ведущие диалог с базой: REPOSITORY;
Адаптирующиеся под условия: DAO;
Хранящие значения: DATABASE;
Вызывающиеся: Events;
Слушающие: LISTENERS;
Хранящие: STATE;
Подсказывающие: COMPLETERS;
Помогающие: UTILS;
Регулируемые: CONFIGS;
API:
Есть 4 слоя абстракции плагина:
GUI;
REPO;
SERVICE;
UTILS;
GUI:
ReportGuiAPI: Позволяет взаимодействовать с репортами из вне, то есть из другого плагина например.
Пример: Сейчас там метод: openReportGUI | Позволяет открывать меню сразу с сообщением из другого плагина.
SecretCodeGuiAPI: Позволяет взаимодействовать с репортами из вне, то есть из другого плагина например.
Пример: Сейчас там метод: openReportGUI | Позволяет открывать меню сразу с сообщением из другого плагина.
REPO:
GUI:
ReportSystemRepositoryAPI: Отвечает за репорты а точнее - внутри системы.
Пример: В нем есть метод на данный момент как: gameReportSend, именно он распределяет обязанности транспортировки моего DAO запроса по цепи после контроллера и сервиса, то есть он - исходит от запроса системы по прихоти клиента - по этому и System.
SecretCodeRepositoryAPI: Отвечает за обработку пин-кодов для администрации в GUI, то есть он тоже системный и исходит от контроллера. Почему не SecretCodeSystemRepositoryAPI? Название получилось бы слишком длинным и выходило за рамки приличия, по этому я решил оставить как есть.
Пример: В нем есть методы управления секретными кодами на момент создания такие как: staffSetSecretCode, systemDeleteAdmin, systemSetSecretCode, getSecretCode, все они - расписаны внутри.
PLUGIN:
GameRepositoryAPI: Отвечает за все что связанно в игре с администратором и базой данных его игровой в общем то процесс, репорты != игровая логика, это уже отдельная система.
Пример: Если когда нибудь понадобится логировать rewatch logs администратора -> это пойдет туда. Сейчас я считаю такое небольшим перегрузом, по этому он сейчас пустует, НО, существует для будущих обновлений.
StaffRepositoryAPI: Абсолютно все что связанно с администратором и его старшим.
Пример: Повышения, понижения, удаления, постановление, бонусы и все, все, все, но тут передача с базой через DAO
SystemRepositoryAPI: Системы которые связаны с системой администрации.
Пример: Посмотреть зарплату игрока, его префикс, его уровень админки или состоит ли он вообще в администрации?
Service:
GUI:
ReportSystemServiceAPI: Отвечает за взаимодейсвтие между системами
Пример: В нем есть метод на данный момент как: clickToReport. Он передает данные из GUI контроллера в сервис для обработки бизнес логики самого Backend.
SecretCodeServiceAPI: Отвечает за клики и логику, за нее отвечает не сколь контроллер сколь сам сервис, потому что именно он хранитель бизнес логики, а контроллер - удобный адаптер
Пример: В нем есть методы "Дистанционного доступа" к меню SecretCode: oneStepHandler, который можно вызвать игроку сразу же с первой цифрой кода которую можно узнать вторым методом getInputCode, продолжая дальше идти по цепи логики.
PLUGIN:
ConsoleServiceAPI: Отвечает за все что связанно в игре с администратором.
Пример: Все взаимодействия а точнее обработка логики связанные с консолью.
GameServiceAPI: Отвечает за все что связанно в игре с администратором связанный с игровыми взаимодействиями включая обработку логики, его игровой в общем то процесс, репорты != игровая логика, это уже отдельная система но она имеет место в самом администраторе, то есть это его и игра и задача, по этому репорты обычно в двух местах в отдельных ReportService и в GameService
Пример: Реватч, невидимка, репорты, и прочие функции.
StaffServiceAPI: Абсолютно все что связанно с администратором и его старшим.
Пример: Повышения, понижения, удаления, постановление, бонусы и все, все, все.
SystemServiceAPI: Системы контроллеров систем
Пример: handleReportAccept, это системный контроллер точки входа в команду: ReportAcceptController.
UTILS:
PLUGIN:
PermissionsManagerAPI: Отвечает естевственно за права администратора в игре.
Пример: checkSecretCodeAccess буквально вопрос: Есть ли у администратора доступ к админке?
GameServiceAPI: Отвечает за все что связанно в игре с администратором связанный с игровыми взаимодействиями включая обработку логики, его игровой в общем то процесс, репорты != игровая логика, это уже отдельная система но она имеет место в самом администраторе, то есть это его и игра и задача, по этому репорты обычно в двух местах в отдельных ReportService и в GameService
Пример: Повышения, понижения, удаления, постановление, бонусы и все, все, все. Но тут передача логики и ее обработки через внутренности
А теперь по самим назначениям!
COMMANDS:
Каждые из команд разделены так же на свои отделы ответственности:
Admin -> Команды для администрации.
Staff -> Команды для обычных игроков.
Player -> Команды для обычных игроков.
System -> Системные команды больше контроллеры и отправные точки СИСТЕМЫ
Console -> Контрольные точки которые можно задавать из вне не заходя в игру по средствам самих точек или что самое интересное: API - А это уже сайты, веб, приложения и прочее.
Admin:
AHelpCommand: Адаптер точки логики отправки администратору списка помощи.
AccessCommand: Первая точка входа. Без нее админ - просто игрок, без ввода секретного пароля он ничем не отличается от обычного игрока и все права у него заблокированы.
ReportCommand: Команда-GUI. Открывает свод репортов которые появились за последнее время.
ABlockCommand: Заблокировать доступ адмнистратору в случае сливов с его стороны, но блокируется доступ и тому кто использует команду!
RewatchCommand: Точка слежки. Команда позволяет следить за игроками от 3-его лица.
InvisibilityCommand: Команда для использования спец невидимости, прямо "Из коробки", никаких партиклов и эффектов, бесконечная невидимка и все тут..
Staff:
AdminDelBlackListCommand: Удалить администратора из черного списка администрации.
AdminAddBlackListCommand: Добавить администратора в черный список администрации.
AdminSetSecretCode: Установить пин-код администратору если его еще нет в базе.
AdminDeleteCommand: Уволить администратора от лица стафф сотрудника сервера.
AdminBonusCommand: Выдать бонус ОДНОМУ администратору который указан внутри.
AdminDownCommand: Понизить администратора от лица стафф сотрудника сервера.
AdminSetCommand: Поставить администратора от лица стафф сотрудника сервера.
AdminUnBanCommand: Снять блокировку с администратора от лица стафф сервера.
AdminUpCommand: Повысить в доходяги администратора от лица стафф сотрудника.
Player:
ThanksCommand: Позволяет игроку, отправить раз в определенное кол-во времени, админский thanks который может являтся внутренней валютой
AdminsCommand: Позволяет увидеть сколько администраторов на сервере, кто они, на месте или нет.
PlayerReportCommand: Позволяет отправить новый репорт.
System:
ReportAcceptController: Обычный контроллер arepaccept, который перехватывает репорт и начинает работать через сервис, то есть обычная прокладка которая слушает как Listener.
Console:
ConsoleSetSecretCommand: Установить пин-код администратору от лица API если его еще нет в базе.
ConsoleDownAdminCommand: Понизить администратора от лица консоли сервера.
ConsoleDelAdminCommand: Уволить администратора от лица консоли сервера.
ConsoleSetAdminCommand: Поставить администратора от лица консоли сервера.
ConsoleUpAdminCommand: Повысить администратора от лица консоли сервера.
SERVICE:
Сервисы главные обработчики логики, не важно это бизнес логика или внутриигровая, именно на них сгружена ответственность думать и принимать решения.
Есть несколько основных сервисов:
GUI:
ReportSystemService: Некоторые действия которые связаны с репортами, только некоторые! Которые не касаются гейма но касаются системы по этому ReportSYSTEMService
SecretCodeService: Исполнение действий из меню сразу в "Just In Time" почти никогда не нужно oneStepHandler, но он заполняет цепь, хотя скорее всего я его уберу.
PLUGIN:
AdminsStaffService: Выполнение все что связано с: Стафф -> Админ. Связан с: StaffServiceAPI
AdminSystemService: Выполнение все что связано с: Система -> Система Связан с: SystemServiceAPI
AdminGameService: Выполнение все что связано с: Админ -> Игра. Связан с: GameServiceAPI
ConsoleService: Выполнение все что связано с: Консоль -> Админ. Связан с: ConsoleServiceAPI
REPOSITORY:
Если сервисы у меня принимают решения - репозитории ведут диалог с базой и записывают через DAO сразу в базу окончательные заключения логики если значение прошло все проверки Service.
Есть несколько основных репо как и сервисов:
GUI:
ReportSystemRepository: gameReportSend -> Как главный из методов позволяет отправить факт о закрытом репорте, соеденен с ReportDAO.
SecretCodeRepositoryAPI: SET, SETSYSTEM, GET, RESET, все как у людей, отправят как захочешь, легко подстраиваются связаны с SecretCodeDAO
PLUGIN:
AdminSystemRepository: Логирование фактов по обычным системным транзакциям по типу adminPay или handleReportAccept.
AdminStaffRepository: Логирование фактов по взаимодействию с составом, set, del, up и так далее по накладной.
AdminGameRepository: Факты системы для логирования ДЕЙСТВИЙ администратора в ИГРЕ а не в системе.
DAO:
Мои обработчики обьектов в базе данных, очень способные и полезные при работе цепь POINT-SERVICE-REPO-DAO-DATA.
PLUGIN:
SecretCodeDAO: Работа с пин кодами администрации;
AdminsDAO: Работа с администраторами в Базе Данных;
ReportDAO: Работа с репортами в Базе Данных;
BonusDAO: Работа с логированием бонусов а Базе Данных;
BlockDAO: Работа с блокировками возможностей админов;
DATABASE:
Без базы данных очень сложно держать структуру а с ней в плагине я использовал и кэширование и трансфер в базу.
PLUGIN:
DatabaseSource: Установщик связи с драйверами, HickariCP, HickariDataSource и прочим через конфиг и JDBC ну или коннектор базы данных.
DatabaseManager: На основе DatabaseSource, создает и управляет таблицами в установленной связью базе данных.
EVENTS:
Личные и приватные ивенты плагина которые очень помогают в разгрузке сервисов и упрощении кода в сервисах перекладывая ответственность на распределяющую Event прокладку Listener.
E1m0:
AdminComplimentEvent: Когда администртатора получает /thanks от игрока -> Вызвается ивент.
AdminAccessEvent: Когда администратор регистрируется в системе -> Вызвается ивент.
AdminLeakEvent: Когда администратор пытается в действия не по рангу (Слив) -> Вызвается ивент.
AdminSetEvent: Факт: Был поставлен новый администратор -> Вызвается ивент.
AdminDetEvent: Факт: Был снят администратор -> Вызвается ивент.
LISTENERS:
Подразделены на несколько слоев ответственности чтобы не путать холодное с теплым:
Bukkit:
JoinListener: Когда игрок заходит на сервер, там сразу проверяется статус администратора, его сессии, права, т.д, можно сделать систему синхронизации API для защиты.
QuitListener: Когда игрок выходит из сервера, там если он админ - удаляется его State, AdminSession, и отбираются права администратора.
E1m0:
AdminComplimentListener: Когда администратор получает похвалу от игроков, игрока и т.д, срабатывает слушатель, триггер.
AdminAccessListener: Когда администратор подтверждает себя как полноправного владельца прав, срабатывает триггер.
AdminLeakListener: Слушатель и триггер события о сливе админ-прав, или использования прав не по рангу.
AdminSetListener: Слушатель события о факте постановления нового администратора на пост.
AdminDelListener: Слушатель события о факте снятия администратора с его поста.
STATE:
Мои не наглядные состояния, есть так же несколько типов хэширования данных в системе:
Admin;
Report;
Session;
SecretCode;
Admin:
Admin: Record с snapshot immutable состоянием администратора который позже mutable менеджером перетекает.
AdminManager: Помогает справлятся с состоянием Admin через mutable рычаги виксируя diff изменения, прямо как в React
Session:
AdminSession: А именно сюда и перетекает STATE состояние через mutable manager;
AdminSessionManager: А этим констракт методом управляется состояние, для JoinListener && QuitListener у AdminSessionManager есть методы: join и quit, которые заполняют и очищают кэш память админ сессий.
Report:
Report: Report а вот это уже - не постоянное состояние, и оно не может быть immutable, хоть он и имеет mutable состояние он все равно живет от силы 20 секунд и умирает передаваясь уже в DAO и в Database так что состояние не долговечное а значит надежное
SecretCode:
SecretCodeState: Тоже вроде понятно, тот же mutable state class который управляет цепью порядка SecretCode, да возможно не так "профессионально" через сеттеры состояний mutable Manager в Immutable состоянии State но система все равно надежна.
SecretCodeManager: Управление состоянием разрешений, выдать когда нужно, забрать когда не нужно, проверить когда спросят - красота.
COMPLETERS:
Обычный комплитер, он у меня один много делать не стал а то утонул бы в папках
MainTabCompleter: Главный помощник написания команд.
UTILS:
Без них было бы сложно что то смастерить, есть всего три вида:
Color;
Messages;
Permissions;
Color:
E1m0Color: Он если честно вообще не мой, я его выкрал у какого то индуса по но он работает.
Message:
E1m0Sender: Вот это уже мое, криво - косо, но сообщения отправляет как я хочу, плейсы поддерживает как я скажу, сильно не хамит не кусается и что главное - работает.
Permissions:
E1m0Permissions: Тоже мое творение checkSecretCodeAccess специально был создан для работы с Access.