LuxinfinePunishments-5.2-1.7.10
Информация:
Мод для наказаний игроков. Поддерживаются баны, баны по IP, баны по HWID, муты с полной интеграцией с БД MySQL.
Для работы HWID банов нужна поддержка на стороне лаунчера. От лаунчерсервера требуется таблица, где хранится UUID игрока и его HWID (число/строка). В случае GravitLauncher в SQL скрипте есть пример триггеров, синхронизирующих banned-флаг в таблице hwids.
Мод имеет двунаправленную синхронизацию банов и IP-банов меж ванилла майнкрафтом и LuxinfinePunishments. Если кто-то программно выдаст/снимет бан через API игры - оно отразится на наш мод, также и на оборот.
Имеется опция запрета наказывать (мутить/банить) игроков, статусом выше, отправителя команды. Статус игрока считается как "вес" его наивысшей permissions группы. Позволяет предотвратить баны модераторов/админов хелперами и прочий беспредел.
Поддерживается обновление наказаний "на лету" при изменении таблиц БД извне (необходимо настроить репликацию MySQL): вы сможете в коде сайта удалить запись о бане в таблице (или, на оборот, вставить/изменить) и майнкрафт тут же разбанит/забанит игрока. Никаких задержек и rcon не нужно.
Для программистов: мод реализует Punishments интеграцию LFHelper, предоставляя доступ к API.
Конфигурация:
{
"configuration": {
"mute_blocked_commands": {
"comment": "Список команд, которые нельзя выполнять в муте",
"type": "Set<String>",
"default": [
"msg",
"reply"
],
"value": [
"msg",
"reply"
]
},
"check_punishments_time": {
"comment": "Интервал проверки времени банов и мутов в секундах. При его срабатывании в БД будут удаляться истекшие по сроку наказания",
"range": "От 10 до 2147483647",
"type": "int",
"default": 60,
"value": 60
},
"check_hwid_bans_on_login": {
"comment": "Проверять наличие HWID бана при попытке подключения игрока к серверу. Если ваш лаунчерсервер сам проверяет HWID-баны - опцию можно отключить",
"type": "boolean",
"default": true,
"value": true
},
"database": {
"properties": {
"mutes": {
"properties": {
"mutes_db_id": {
"comment": "ID подключения к БД, где мод будет записывать действующие блокировки чата в таблицу",
"range": "От -2147483648 до 2147483647",
"type": "int",
"default": 0,
"value": 0
},
"mutes_mutedBy_column": {
"comment": "Колонка с UUID игрока, который выдал блокировку чата",
"type": "String",
"default": "muted_by",
"value": "muted_by"
},
"mutes_db_listener_id": {
"comment": "ID подключения слушателя БД. Если подключен, при изменении таблицы извне (сайт и т.п.) - в игре тут же будет применён/снят мут. Значение -1 отключает опцию",
"range": "От -1 до 2147483647",
"type": "int",
"default": 0,
"value": 0
},
"mutes_expiresAt_column": {
"comment": "Колонка с датой истечения блокировки чата",
"type": "String",
"default": "expires_at",
"value": "expires_at"
},
"mutes_uuid_column": {
"comment": "Колонка с UUID игрока, которому заблокировали чат",
"type": "String",
"default": "uuid",
"value": "uuid"
},
"mutes_reason_column": {
"comment": "Колонка с причиной блокировки чата",
"type": "String",
"default": "reason",
"value": "reason"
},
"mutes_mutedAt_column": {
"comment": "Колонка с датой блокировки чата",
"type": "String",
"default": "muted_at",
"value": "muted_at"
},
"mutes_table": {
"comment": "Имя таблицы с блокировками чата",
"type": "String",
"default": "punishments_mutes",
"value": "punishments_mutes"
},
"mutes_server_id_column": {
"comment": "Колонка с ID сервера",
"type": "String",
"default": "server_id",
"value": "server_id"
}
}
},
"ip_bans": {
"properties": {
"ip_bans_expiresAt_column": {
"comment": "Колонка с датой истечения бана",
"type": "String",
"default": "expires_at",
"value": "expires_at"
},
"ip_bans_ip_column": {
"comment": "Колонка с IP забаненного игрока",
"type": "String",
"default": "ip",
"value": "ip"
},
"ip_bans_table": {
"comment": "Имя таблицы с IP банами",
"type": "String",
"default": "punishments_ip_bans",
"value": "punishments_ip_bans"
},
"ip_bans_reason_column": {
"comment": "Колонка с причиной бана",
"type": "String",
"default": "reason",
"value": "reason"
},
"ip_bans_bannedBy_column": {
"comment": "Колонка с UUID игрока, который выдал бан",
"type": "String",
"default": "banned_by",
"value": "banned_by"
},
"ip_bans_db_listener_id": {
"comment": "ID подключения слушателя БД. Если подключен, при изменении таблицы извне (сайт и т.п.) - в игре тут же будет применён/снят бан. Значение -1 отключает опцию",
"range": "От -1 до 2147483647",
"type": "int",
"default": 0,
"value": 0
},
"ip_bans_bannedAt_column": {
"comment": "Колонка с датой бана",
"type": "String",
"default": "banned_at",
"value": "banned_at"
},
"ip_bans_db_id": {
"comment": "ID подключения к БД, где мод будет записывать действующие IP баны в таблицу",
"range": "От -2147483648 до 2147483647",
"type": "int",
"default": 0,
"value": 0
},
"ip_bans_server_id_column": {
"comment": "Колонка с ID сервера",
"type": "String",
"default": "server_id",
"value": "server_id"
}
}
},
"bans": {
"properties": {
"bans_expiresAt_column": {
"comment": "Колонка с датой истечения бана",
"type": "String",
"default": "expires_at",
"value": "expires_at"
},
"bans_reason_column": {
"comment": "Колонка с причиной бана",
"type": "String",
"default": "reason",
"value": "reason"
},
"bans_bannedBy_column": {
"comment": "Колонка с UUID игрока, который выдал бан",
"type": "String",
"default": "banned_by",
"value": "banned_by"
},
"bans_db_listener_id": {
"comment": "ID подключения слушателя БД. Если подключен, при изменении таблицы извне (сайт и т.п.) - в игре тут же будет применён/снят бан. Значение -1 отключает опцию",
"range": "От -1 до 2147483647",
"type": "int",
"default": 0,
"value": 0
},
"bans_db_id": {
"comment": "ID подключения к БД, где мод будет записывать действующие баны в таблицу",
"range": "От -2147483648 до 2147483647",
"type": "int",
"default": 0,
"value": 0
},
"bans_uuid_column": {
"comment": "Колонка с UUID забаненного игрока",
"type": "String",
"default": "uuid",
"value": "uuid"
},
"bans_table": {
"comment": "Имя таблицы с банами",
"type": "String",
"default": "punishments_bans",
"value": "punishments_bans"
},
"bans_bannedAt_column": {
"comment": "Колонка с датой бана",
"type": "String",
"default": "banned_at",
"value": "banned_at"
},
"bans_server_id_column": {
"comment": "Колонка с ID сервера",
"type": "String",
"default": "server_id",
"value": "server_id"
}
}
},
"hwid_bans": {
"properties": {
"users_hwid_column": {
"comment": "Колонка с HWID игрока. Значение 0 в колонке означает, что HWID неизвестен",
"type": "String",
"default": "hwid",
"value": "hwid"
},
"hwid_bans_reason_column": {
"comment": "Колонка с причиной бана",
"type": "String",
"default": "reason",
"value": "reason"
},
"hwid_bans_bannedAt_column": {
"comment": "Колонка с датой бана",
"type": "String",
"default": "banned_at",
"value": "banned_at"
},
"users_uuid_column": {
"comment": "Колонка с UUID игрока",
"type": "String",
"default": "uuid",
"value": "uuid"
},
"hwid_bans_hwid_column": {
"comment": "Колонка с HWID забаненного игрока. Тип данных здесь должен быть такой же, как в колонке HWID в таблице игроков (мод сам подстроится)",
"type": "String",
"default": "hwid",
"value": "hwid"
},
"hwid_bans_expiresAt_column": {
"comment": "Колонка с датой истечения бана",
"type": "String",
"default": "expires_at",
"value": "expires_at"
},
"hwid_bans_db_id": {
"comment": "ID подключения к БД, где мод будет записывать действующие HWID баны в таблицу",
"range": "От -2147483648 до 2147483647",
"type": "int",
"default": 1,
"value": 1
},
"users_db_id": {
"comment": "ID подключения к БД с таблицей игроков и HWID (в ней должен быть UUID игрока и его HWID)",
"range": "От -2147483648 до 2147483647",
"type": "int",
"default": 1,
"value": 1
},
"hwid_bans_bannedBy_column": {
"comment": "Колонка с UUID игрока, который выдал бан",
"type": "String",
"default": "banned_by",
"value": "banned_by"
},
"hwid_bans_db_listener_id": {
"comment": "ID подключения слушателя БД. Если подключен, при изменении таблицы извне (сайт и т.п.) - в игре тут же будет применён/снят бан. Значение -1 отключает опцию",
"range": "От -1 до 2147483647",
"type": "int",
"default": 0,
"value": 0
},
"users_table": {
"comment": "Имя таблицы с игроками",
"type": "String",
"default": "dle_users",
"value": "dle_users"
},
"hwid_bans_table": {
"comment": "Имя таблицы с HWID банами",
"type": "String",
"default": "punishments_hwid_bans",
"value": "punishments_hwid_bans"
},
"hwid_bans_server_id_column": {
"comment": "Колонка с ID сервера",
"type": "String",
"default": "server_id",
"value": "server_id"
}
}
},
"debug_without_database": {
"comment": "Отладка мода без подключения к БД",
"type": "boolean",
"default": false,
"value": false
},
"server_id": {
"comment": "ID сервера. Записывается в server_id колонку в таблицах мода. Также все наказания с другим server_id будут игнорироваться для текущего сервера. Если на вашем проекте общие баны меж серверами - можно оставить по умолчанию (0). Если баны на каждый сервер свои - укажите уникальный ID в конфиге каждого сервера",
"range": "От -2147483648 до 2147483647",
"type": "int",
"default": 0,
"value": 0
}
}
},
"max_entries_per_page": {
"comment": "Максимальное кол-во строк наказаний в списках, выводимых командами /bans /banips /hardbans /mutes",
"range": "От 1 до 2147483647",
"type": "int",
"default": 10,
"value": 10
},
"immune": {
"properties": {
"check_perms_lvl": {
"comment": "Запретить выдачу наказаний, если целевой игрок имеет статус выше того, кто выполняет команду. Статус определяется как приоритет самой наивысшей permissions-группы отправителя (для консоли/api - приоритет максимальный)",
"type": "boolean",
"default": true,
"value": true
},
"mute_immune_users": {
"comment": "Список имен игроков, которые не могут быть замучены не при каких условиях (Исключение - команда из консоли)",
"type": "Set<String>",
"default": [
"daniorio"
],
"value": [
"daniorio"
]
},
"ban_immune_users": {
"comment": "Список имен игроков, которые не могут быть забанены не при каких условиях (Исключение - команда из консоли)",
"type": "Set<String>",
"default": [
"daniorio"
],
"value": [
"daniorio"
]
},
"kick_immune_users": {
"comment": "Список имен игроков, которые не могут быть выгнаны не при каких условиях (Исключение - команда из консоли)",
"type": "Set<String>",
"default": [
"daniorio"
],
"value": [
"daniorio"
]
}
}
},
"notify": {
"properties": {
"mute_broadcast": {
"comment": "Оповещать всех игроков при муте игрока",
"type": "boolean",
"default": true,
"value": true
},
"unban_broadcast": {
"comment": "Оповещать всех игроков при разбане игрока",
"type": "boolean",
"default": false,
"value": false
},
"ban_broadcast": {
"comment": "Оповещать всех игроков при бане игрока",
"type": "boolean",
"default": true,
"value": true
},
"unmute_broadcast": {
"comment": "Оповещать всех игроков при размуте игрока",
"type": "boolean",
"default": false,
"value": false
},
"hard_ban_broadcast": {
"comment": "Оповещать всех игроков при HWID бане игрока. Если на сервере никого нет с целевым HWID - сообщение выедено не будет",
"type": "boolean",
"default": false,
"value": false
},
"ip_ban_broadcast": {
"comment": "Оповещать всех игроков при IP бане игрока. Если на сервере никого нет с целевым IP - сообщение выедено не будет",
"type": "boolean",
"default": false,
"value": false
},
"kick_broadcast": {
"comment": "Оповещать всех игроков при кике игрока",
"type": "boolean",
"default": true,
"value": true
}
}
}
}
}
SQL скрипт развёртывания структуры БД для мода:
create table punishments_ip_bans
(
ip varchar(15) not null,
server_id tinyint unsigned not null,
banned_at datetime not null,
expires_at datetime null,
banned_by varchar(36) null,
reason varchar(256) not null,
primary key (ip, server_id)
)
charset = utf8mb3;
create table punishments_bans
(
uuid varchar(36) not null,
server_id tinyint unsigned not null,
banned_at datetime not null,
expires_at datetime null,
banned_by varchar(36) null,
reason varchar(256) not null,
primary key (uuid, server_id)
)
charset = utf8mb3;
create table punishments_mutes
(
uuid varchar(36) not null,
server_id tinyint unsigned not null,
muted_at datetime not null,
expires_at datetime null,
muted_by varchar(36) null,
reason varchar(256) not null,
primary key (uuid, server_id)
)
charset = utf8mb3;
create table punishments_hwid_bans
(
hwid bigint not null, -- Тип данных можно заменить под тот, который используется в колонке hwid в таблице игроков, мод подстроится
server_id tinyint unsigned not null,
banned_at datetime not null,
expires_at datetime null,
banned_by varchar(36) null,
reason varchar(256) not null,
primary key (hwid, server_id)
)
charset = utf8mb3;
-- Это пример триггера для синхронизации HWID банов с GravitLauncherServer
create definer = root@localhost trigger after_hardban_insert
after insert
on punishments_hwid_bans
for each row
BEGIN
UPDATE hwids SET banned = true WHERE id = NEW.hwid;
END;
create definer = root@localhost trigger after_hardban_remove
after delete
on punishments_hwid_bans
for each row
BEGIN
UPDATE hwids SET banned = false WHERE id = OLD.hwid;
END;
Команды:
/ban <игрок> [длительность] [причина]
Основные права:
command.punishments.ban
Дополнительные права:
command.punishments.ban.permanent
- выдача бессрочного наказания
Дополнительные атрибуты:
command.punishments.ban.max_duration
- лимит длительности выдаваемого наказания в секундах
Блокирует (банит) игрока
Длительность указывается опционально через префиксы d(дни), h(часы), m(минуты), s(секунды). Пример: 1d4h5s - 1 день 4ч 5сек. Если длительность не указана - при наличии permanent права наказание бессрочно, иначе на максимально возможное время с учетом атрибута. Причина также указывается опционально
/banip <игрок | IP> [длительность] [причина]
Основные права:
command.punishments.banip
Дополнительные права:
command.punishments.banip.permanent
- выдача бессрочного наказания
Дополнительные атрибуты:
command.punishments.banip.max_duration
- лимит длительности выдаваемого наказания в секундах
Блокирует (банит) игрока по IP Первый аргумент команды - ник онлайн игрока, либо вручную введенный IPv4 адрес
Длительность указывается опционально через префиксы d(дни), h(часы), m(минуты), s(секунды). Пример: 1d4h5s - 1 день 4ч 5сек. Если длительность не указана - при наличии permanent права наказание бессрочно, иначе на максимально возможное время с учетом атрибута. Причина также указывается опционально
/hardban <игрок> [длительность] [причина]
Основные права:
command.punishments.hardban
Дополнительные права:
command.punishments.hardban.permanent
- выдача бессрочного наказания
Дополнительные атрибуты:
command.punishments.hardban.max_duration
- лимит длительности выдаваемого наказания в секундах
Блокирует (банит) игрока по железу Первый аргумент команды - ник игрока. Если для него в БД не нашлось валидного HWID - блокировка не удастся, будет выведено предупреждение. HWID считается валидным, если НЕ равен значениям 0, null, пустрой строке
Длительность указывается опционально через префиксы d(дни), h(часы), m(минуты), s(секунды). Пример: 1d4h5s - 1 день 4ч 5сек. Если длительность не указана - при наличии permanent права наказание бессрочно, иначе на максимально возможное время с учетом атрибута. Причина также указывается опционально
/mute <игрок> [длительность] [причина]
Основные права:
command.punishments.mute
Дополнительные права:
command.punishments.mute.permanent
- выдача бессрочного наказания
Дополнительные атрибуты:
command.punishments.mute.max_duration
- лимит длительности выдаваемого наказания в секундах
Блокирует (мутит) чат игроку
Длительность указывается опционально через префиксы d(дни), h(часы), m(минуты), s(секунды). Пример: 1d4h5s - 1 день 4ч 5сек. Если длительность не указана - при наличии permanent права наказание бессрочно, иначе на максимально возможное время с учетом атрибута. Причина также указывается опционально
/unban <игрок>
Основные права:
command.punishments.unban
Снимает блокировку с игрока
/unbanip <IPv4>
Основные права:
command.punishments.unbanip
Снимает блокировку указанного IPv4 адреса
/unhardban <игрок>
Основные права:
command.punishments.unhardban
Снимает блокировку с HWID (железа) указанного игрока
/unmute <игрок>
Основные права:
command.punishments.unmute
Снимает блокировку чата (мут) с указанного игрока
/bans [игрок | страница]
Основные права:
command.punishments.bans
Показывает информацию о действующем бане указанного игрока / все действующие баны Если указан игрок - выведет активное наказание для него (если есть) Если указано число - выводит заданную страницу из списка всех наказаний Если ничего не указано - выводит первую страницу списка всех наказаний
/banips [IPv4 | страница]
Основные права:
command.punishments.banips
Показывает информацию о действующем бане указанного IPv4 адреса / все действующие баны Если указан IP - выведет активное наказание для него (если есть) Если указано число - выводит заданную страницу из списка всех наказаний Если ничего не указано - выводит первую страницу списка всех наказаний
/hardbans [игрок | страница]
Основные права:
command.punishments.hardbans
Показывает информацию о действующем HWID (по железу) бане указанного игрока / все действующие баны по железу Если указан игрок - выведет активное наказание для него (если есть) Если указано число - выводит заданную страницу из списка всех наказаний Если ничего не указано - выводит первую страницу списка всех наказаний
/mutes [игрок | страница]
Основные права:
command.punishments.mutes
Показывает информацию о действующей блокировки чата (муте) указанного игрока / все действующие блокировки чатов Если указан игрок - выведет активное наказание для него (если есть) Если указано число - выводит заданную страницу из списка всех наказаний Если ничего не указано - выводит первую страницу списка всех наказаний
/searchtwinnks byip <игрок | IPv4>
Основные права:
command.punishments.searchtwinks
command.punishments.searchtwinks.byip
Находит всех онлайн игроков с указанным IP адресом
Можно передать как адрес напрямую, так и игрока - тогда будет взят его текущий адрес и выполнен поиск по нему
/searchtwinnks byhard <игрок>
Основные права:
command.punishments.searchtwinks
command.punishments.searchtwinks.byhard
Находит всех игроков (в т.ч. оффлайн) с совпадающим HWID с указанным игроком Если для указанного игрока HWID неизвестен - выдаст предупреждение
/punishments reload
Основные права:
command.punishments.punishments
command.punishments.punishments.reload
Перезагружает кешируемые в памяти наказания с базы данных
/kick <игрок> [причина]
Основные права:
command.punishments.kick
Выгоняет игрока с сервера
Дополнительные права мода:
punishments.ban.immune
Защищает пользователя от получения блокировок (банов). Защиту обходит только консоль
punishments.mute.immune
Защищает пользователя от получения блокировок чата (мутов). Защиту обходит только консоль
Last updated