LuxinfinePermissions-9.5-1.7.10

Информация:

Мод-аналог плагинов на права с удобным апи, заточкой под производительность, полную настройку и удобство работы. Работает с БД mysql/mariadb. Позволяет выдавать группы прав, а также права отдельно. Имеет систему аттрибутов, с помощью которых можно задать префиксы, суффиксы, лимиты для наших модов и прочее, что вы можете добавить сами и проверять через апи.

Поддерживаются SuperPerms (иерархичные права со звёздочкой, по типу command.warps.*), в т.ч. пермишен-звёздочка.

Также есть поддержка авто-обновления прав, атрибутов, групп игроков налету, если настроить слушатель ивентов БД.

Для пользователей Bukkit: Рекомендуется default группе выдать отрицательный пермишен "*". Это заблокирует разрешенные по умолчанию права бакита, по типу команды /plugins. Мод по возможности будет заменять I'm sorry, but you do not have permission to perform this command. Please contact the server administrators if you believe that this is in error. сообщение на нормальное локализованное сообщение нехватки прав. Полностью реализуется Vault Permission & Chat API, инжектит Permissible для игрока, по этому будет совместим со всеми плагинами. Также мод изменяет систему прав для команд из модов. Если удаётся определить мод-источник команды, то вместо имени класса у команды будет пермишен в формате command.MOD_ID.COMMAND_NAME, что намного удобнее.

Для работы мода требуется LuxinfineDatabaseLib мод.

Конфигурация:

{
  "configuration": {
    "admins": {
      "comment": "Список игроков, которые будут иметь все права и возможности",
      "type": "Set<String>",
      "default": [
        "Angelok",
        "daniorio"
      ],
      "value": [
        "Angelok",
	"daniorio"
      ]
    },
    "allow_ops": {
      "comment": "Если true - то опка будет равна привилегии администратора, иначе вся власть опки будет обнулена, включая всю ванильную логику, и заменена на лист администраторов из этого конфига",
      "type": "boolean",
      "default": false,
      "value": false
    },
    "default_group": {
      "comment": "Имя группы по умолчанию. Лучше не трогать, иначе можно что-то сломать",
      "type": "String",
      "default": "default",
      "value": "default"
    },
    "database": {
      "properties": {
        "replication_id": {
          "comment": "Индекс репликации для обновления прав в режиме реального времени",
          "range": "От -2147483648 до 2147483647",
          "type": "int",
          "default": 0,
          "value": 0
        },
        "connection_id": {
          "comment": "Индекс подключения к БД",
          "range": "От -2147483648 до 2147483647",
          "type": "int",
          "default": 0,
          "value": 0
        },
        "user_permissions": {
          "properties": {
            "column_expire_time": {
              "type": "String",
              "default": "expire_time",
              "value": "expire_time"
            },
            "column_allow": {
              "type": "String",
              "default": "allow",
              "value": "allow"
            },
            "column_user": {
              "type": "String",
              "default": "uuid",
              "value": "uuid"
            },
            "table_name": {
              "type": "String",
              "default": "user_permissions",
              "value": "user_permissions"
            },
            "column_permission": {
              "type": "String",
              "default": "permission",
              "value": "permission"
            }
          }
        },
        "group_info": {
          "properties": {
            "column_priority": {
              "type": "String",
              "default": "priority",
              "value": "priority"
            },
            "column_group_name": {
              "type": "String",
              "default": "name",
              "value": "name"
            },
            "table_name": {
              "type": "String",
              "default": "group_info",
              "value": "group_info"
            },
            "column_display_name": {
              "type": "String",
              "default": "display_name",
              "value": "display_name"
            }
          }
        },
        "group_attributes": {
          "properties": {
            "column_group": {
              "type": "String",
              "default": "name",
              "value": "name"
            },
            "column_value": {
              "type": "String",
              "default": "value",
              "value": "value"
            },
            "column_attribute": {
              "type": "String",
              "default": "attribute",
              "value": "attribute"
            },
            "table_name": {
              "type": "String",
              "default": "group_attributes",
              "value": "group_attributes"
            }
          }
        },
        "group_permissions": {
          "properties": {
            "column_allow": {
              "type": "String",
              "default": "allow",
              "value": "allow"
            },
            "column_permission": {
              "type": "String",
              "default": "permission",
              "value": "permission"
            },
            "column_group": {
              "type": "String",
              "default": "name",
              "value": "name"
            },
            "table_name": {
              "type": "String",
              "default": "group_permissions",
              "value": "group_permissions"
            }
          }
        },
        "user_groups": {
          "properties": {
            "column_expire_time": {
              "type": "String",
              "default": "expire_time",
              "value": "expire_time"
            },
            "column_group": {
              "type": "String",
              "default": "group_name",
              "value": "group_name"
            },
            "table_name": {
              "type": "String",
              "default": "user_groups",
              "value": "user_groups"
            },
            "column_user": {
              "type": "String",
              "default": "uuid",
              "value": "uuid"
            }
          }
        },
        "user_attributes": {
          "properties": {
            "column_attribute": {
              "type": "String",
              "default": "attribute",
              "value": "attribute"
            },
            "column_expire_time": {
              "type": "String",
              "default": "expire_time",
              "value": "expire_time"
            },
            "column_user": {
              "type": "String",
              "default": "uuid",
              "value": "uuid"
            },
            "column_value": {
              "type": "String",
              "default": "value",
              "value": "value"
            },
            "table_name": {
              "type": "String",
              "default": "user_attributes",
              "value": "user_attributes"
            }
          }
        },
        "group_parents": {
          "properties": {
            "column_parent": {
              "type": "String",
              "default": "parent",
              "value": "parent"
            },
            "table_name": {
              "type": "String",
              "default": "group_parents",
              "value": "group_parents"
            },
            "column_group": {
              "type": "String",
              "default": "group",
              "value": "group"
            }
          }
        }
      }
    },
    "debug": {
      "properties": {
        "database": {
          "comment": "Отладка мода без подключения к БД",
          "type": "boolean",
          "default": false,
          "value": false
        },
        "general": {
          "comment": "Вывод отладочной информации",
          "type": "boolean",
          "default": true,
          "value": true
        }
      }
    },
    "replaceTabUsernames": {
      "comment": "Подмена ников в S38PacketPlayerListItem. За счёт этого реализуются префиксы и суффиксы в списке онлайн-игроков (таб). Если у вас кастомный ТАБ и эта опция конфликтует - можете выключить её",
      "type": "boolean",
      "default": true,
      "value": true
    },
    "rcon_group": {
      "comment": "Имя группы, права которой используются для R-CON. Если указать пустую строку - прав вообще не будет. Если указать звёздочку - будут все права. Иначе - будут права по указанному имени группы",
      "type": "String",
      "default": "",
      "value": ""
    },
    "command_blocks_group": {
      "comment": "Имя группы, права которой используются для командных блоков. Если указать пустую строку - прав вообще не будет. Если указать звёздочку - будут все права. Иначе - будут права по указанному имени группы",
      "type": "String",
      "default": "",
      "value": ""
    },
    "customSendersPermissions": {
      "comment": "Map классов 'доверенных' ICommandSender, для которых будут действовать права на основе указанного значения. Если значение звёздочка - то будут все права, если пустая строка - никаких прав не будет, иначе - права из группы по указанному названию",
      "type": "Map<Class<? extends net.minecraft.command.ICommandSender>, String>",
      "default": {},
      "value": {}
    }
  }
}

SQL скрипт развёртывания структуры БД для мода:

-- Создание структур в БД
-- Если переименуете колонки - не забудьте отредактировать конфиг мода!

CREATE TABLE `group_info` (
      `name` VARCHAR(25) NOT NULL COLLATE 'utf8mb4_bin',
      `display_name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_bin',
      `priority` INT(10) NOT NULL DEFAULT '0',
      PRIMARY KEY (`name`)
);

CREATE TABLE `group_parents` (
       `group` VARCHAR(25) NOT NULL COLLATE 'utf8mb4_bin',
       `parent` VARCHAR(25) NOT NULL COLLATE 'utf8mb4_bin',
       PRIMARY KEY (`group`, `parent`),
       CONSTRAINT `fk_group_parents_group_info` FOREIGN KEY (`group`) REFERENCES `group_info` (`name`) ON UPDATE NO ACTION ON DELETE CASCADE,
       CONSTRAINT `fk_group_parents_parent_group_info` FOREIGN KEY (`parent`) REFERENCES `group_info` (`name`) ON UPDATE NO ACTION ON DELETE CASCADE
);

CREATE TABLE `group_attributes` (
        `name` VARCHAR(25) NOT NULL COLLATE 'utf8mb4_bin',
        `attribute` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_bin',
        `value` VARCHAR(100) NOT NULL COLLATE 'utf8mb4_bin',
        PRIMARY KEY (`name`, `attribute`),
        CONSTRAINT `fk_group_attributes` FOREIGN KEY (`name`) REFERENCES `group_info` (`name`) ON UPDATE NO ACTION ON DELETE CASCADE
);

CREATE TABLE `group_permissions` (
         `name` VARCHAR(25) NOT NULL COLLATE 'utf8mb4_bin',
         `permission` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_bin',
         `allow` TINYINT(1) NOT NULL,
         PRIMARY KEY (`name`, `permission`),
         CONSTRAINT `fk_group_permissions` FOREIGN KEY (`name`) REFERENCES `group_info` (`name`) ON UPDATE NO ACTION ON DELETE CASCADE
);

CREATE TABLE `user_attributes` (
       `uuid` CHAR(36) NOT NULL COLLATE 'latin1_swedish_ci',
       `attribute` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_bin',
       `value` VARCHAR(100) NOT NULL COLLATE 'utf8mb4_bin',
       `expire_time` DATETIME NULL DEFAULT NULL,
       PRIMARY KEY (`uuid`, `attribute`)
);

CREATE TABLE `user_permissions` (
        `uuid` CHAR(36) NOT NULL COLLATE 'latin1_swedish_ci',
        `permission` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_bin',
        `allow` TINYINT(1) NOT NULL,
        `expire_time` DATETIME NULL DEFAULT NULL,
        PRIMARY KEY (`uuid`, `permission`)
);

CREATE TABLE `user_groups` (
       `uuid` CHAR(36) NOT NULL COLLATE 'latin1_swedish_ci',
       `group_name` VARCHAR(25) NOT NULL COLLATE 'utf8mb4_bin',
       `expire_time` DATETIME NULL DEFAULT NULL,
       PRIMARY KEY (`uuid`, `group_name`),
       INDEX `fk_user_groups` (`group_name`),
       CONSTRAINT `fk_user_groups` FOREIGN KEY (`group_name`) REFERENCES `group_info` (`name`) ON UPDATE NO ACTION ON DELETE CASCADE
);

-- Группа по умолчанию ОБЯЗАТЕЛЬНО должна быть в БД!
INSERT INTO `group_info` (`name`, `display_name`, `priority`) VALUES ('default', 'Игроки', 0);

Команды:

Команда
Права и атрибуты
Описание

/permissions user <игрок> setpermission <право> <true|false> [длительность]

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.user

  • command.permissions.permissions.user.setpermission

Дополнительные права:

  • command.permissions.permissions.user.offline - изменения для офлайн игрока

  • command.permissions.permissions.user.other - изменения для другого игрока

Устанавливает игроку пермишен.

Если true - пермишен положительный, если false - отрицательный.

Если длительность права не указана - оно выдаётся навсегда

/permissions user <игрок> setattribute <атрибут> <значение> [длительность]

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.user

  • command.permissions.permissions.user.setattribute

Дополнительные права:

  • command.permissions.permissions.user.offline - изменения для офлайн игрока

  • command.permissions.permissions.user.other - изменения для другого игрока

Устанавливает игроку значение атрибута.

Если длительность не указана - устанавливается навсегда

/permissions user <игрок> removeattribute <атрибут>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.user

  • command.permissions.permissions.user.removeattribute

Дополнительные права:

  • command.permissions.permissions.user.offline - изменения для офлайн игрока

  • command.permissions.permissions.user.other - изменения для другого игрока

Удаляет указанный атрибут у игрока

/permissions user <игрок> removepermission <право>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.user

  • command.permissions.permissions.user.removepermission

Дополнительные права:

  • command.permissions.permissions.user.offline - изменения для офлайн игрока

  • command.permissions.permissions.user.other - изменения для другого игрока

Удаляет указанное право у игрока

/permissions user <игрок> permissions

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.user

  • command.permissions.permissions.user.permissions

Дополнительные права:

  • command.permissions.permissions.user.offline - просмотр прав офлайн игрока

  • command.permissions.permissions.user.other - просмотр прав другого игрока

Просмотр прав, заданных для указанного игрока

/permissions user <игрок> attributes

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.user

  • command.permissions.permissions.user.attributes

Дополнительные права:

  • command.permissions.permissions.user.offline - просмотр атрибутов офлайн игрока

  • command.permissions.permissions.user.other - просмотр атрибутов другого игрока

Просмотр атрибутов, заданных для указанного игрока

/permissions user <игрок> setgroup <группа> [длительность]

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.user

  • command.permissions.permissions.user.setgroup

Дополнительные права:

  • command.permissions.permissions.user.offline - изменения для офлайн игрока

  • command.permissions.permissions.user.other - изменения для другого игрока

Добавляет игрока в указанную группу на указанное время.

Если длительность не задана - добавляется навсегда

/permissions user <игрок> removegroup <группа>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.user

  • command.permissions.permissions.user.removegroup

Дополнительные права:

  • command.permissions.permissions.user.offline - изменения для офлайн игрока

  • command.permissions.permissions.user.other - изменения для другого игрока

Удаляет игрока из указанной группы

/permissions user <игрок> groups

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.user

  • command.permissions.permissions.user.groups

Дополнительные права:

  • command.permissions.permissions.user.offline - просмотр групп офлайн игрока

  • command.permissions.permissions.user.other - просмотр групп другого игрока

Просмотр групп, в которые добавлен указанный игрок

/permissions group <группа> setpermission <право> <true|false>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.setpermission

Устанавливает группе пермишен.

Если true - пермишен положительный, если false - отрицательный

/permissions group <группа> setattribute <атрибут> <значение>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.setattribute

Устанавливает группе значение атрибута

/permissions group <группа> removeattribute <атрибут>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.removeattribute

Удаляет атрибут из группы

/permissions group <группа> removepermission <право>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.removepermission

Удаляет право из группы

/permissions group <группа> permissions

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.permissions

Просмотр заданных прав в группе

/permissions group <группа> attributes

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.attributes

Просмотр заданных атрибутов в группе

/permissions group <группа> addparent <группа>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.addparent

Добавляет родительскую группу для указанной группы. Первый аргумент - группа, для которой задаём родителя, второй аргумент - родитель

/permissions group <группа> removeparent <группа>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.removeparent

Удаляет родительскую группу для указанной группы. Первый аргумент - группа, из которой удаляем родителя, второй аргумент - родитель

/permissions group <группа> setpriority <приоритет>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.setpriority

Устанавливает приоритет группе Приоритетом может быть любое целое число, в том числе и отрицательное. Чем больше значение - тем приоритетнее группа

/permissions group <группа> setdisplayname <имя>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.setdisplayname

Устанавливает отображаемое имя группы Это имя никак не связано с префиксами! Оно может быть получено кодом для вывода куда-либо

/permissions group <группа> removedisplayname

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.removedisplayname

Удаляет отображаемое имя группы

/permissions group <группа> info

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.group

  • command.permissions.permissions.group.info

Вывод информацию о группе: приоритет, отображаемое имя, родительские группы

/permissions creategroup <имя>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.creategroup

Создаёт новую группу с указанным названием

/permissions removegroup <группа>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.removegroup

Удаляет группу по названию

/permissions grouplist

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.grouplist

Список существующих групп в данный момент

/permissions testpermission <игрок> <право>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.testpermission

Дополнительные права:

  • command.permissions.permissions.testpermission.other - проверка права для другого игрока

  • command.permissions.permissions.testpermission.offline - проверка права для офлайн игрока

Проверяет наличие указанного права у игрока. Команда используется в отладочных целях

/permissions getattribute <игрок> <атрибут>

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.getattribute

Дополнительные права:

  • command.permissions.permissions.getattribute.other - проверка права для другого игрока

  • command.permissions.permissions.getattribute.offline - проверка права для офлайн игрока

Получает значение атрибута для игрока. Команда используется в отладочных целях

/permissions reload

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.reload

Перезагружает мод, выкачивая актуальную информацию из базы данных

/permissions verbose

Основные права:

  • command.permissions.permissions

  • command.permissions.permissions.verbose

Включает/выключает режим логгирования всех проверок прав игрока Команда используется в отладочных целях

Дополнительные атрибуты мода:

Атрибут
Описание

prefix

префикс игрока в отображаемом имени

suffix

суффикс игрока в отображаемом имени

tab_prefix

префикс игрока в табе (списке игроков)

tab_suffix

суффикс игрока в табе (списке игроков)

Last updated