Skip to content

e1m0dev/E1m0Admin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages