Руководство по правам
В плагинах Nukkit-MOT права — это ключевые механизмы, используемые для контроля доступа к определённым функциям и операциям.
Права гарантируют, что только уполномоченные игроки могут выполнять определённые действия, что повышает как безопасность, так и функциональность плагина.
Структура пакета
Управление правами в Nukkit осуществляется в пакете cn.nukkit.permission.
Этот пакет имеет важное значение, поскольку содержит необходимые классы и интерфейсы для реализации проверки прав.
Часто используемые классы:
- BanList
- Permissible
- Permission
Часто используемые интерфейсы:
Класс Permission
Класс Permission играет центральную роль в пакете cn.nukkit.permission. Он содержит значения прав по умолчанию, используемые во всей системе, что помогает унифицировать работу с правами в плагинах.
Основные константы
Этот класс определяет несколько ключевых констант, представляющих значения по умолчанию в системе прав:
DEFAULT_OP: значение права по умолчанию для операторов, обозначается какop.DEFAULT_NOT_OP: значение права по умолчанию для не-операторов, обозначается какnotop.DEFAULT_TRUE: значение права по умолчанию для разрешённого доступа, обозначается какtrue.DEFAULT_FALSE: значение права по умолчанию для запрещённого доступа, обозначается какfalse.DEFAULT_PERMISSION: если значение по умолчанию не указано, используется это право (оно равноopиз DEFAULT_OP).
Основные конструкторы и методы
- Конструкторы: класс
Permissionпредоставляет несколько конструкторов, позволяющих задать при создании имя, описание, значение по умолчанию и дочерние права. getByName(String value): этот статический метод возвращает соответствующее значение права по умолчанию по строковому параметру. Поддерживается распознавание различных псевдонимов, таких какadmin,isadmin,notadminи т. д.setDefault(String value): устанавливает значение права по умолчанию.getDescription()иsetDescription(String description): получают и устанавливают описание права.getPermissibles(): возвращает коллекцию экземпляровPermissible, подписанных на это право.recalculatePermissibles(): при изменении значения по умолчанию или структуры права пересчитывает права всех экземпляровPermissible, связанных с этим правом.addParent(Permission permission, boolean value): добавляет право как родительское для данного права, определяя способ наследования.
Пример использования
Вот как зарегистрировать права при запуске плагина и проверить, есть ли они у игрока:
import cn.nukkit.permission.Permission;
public class YourPlugin extends PluginBase {
@Override
public void onEnable() {
// Register custom permissions
registerPermissions();
}
private void registerPermissions() {
PluginManager pm = this.getServer().getPluginManager();
pm.addPermission(new Permission("yourplugin.custom.permission", "Allows access to custom features", Permission.DEFAULT_TRUE));
}
public void checkPermission(Player player) {
if (player.hasPermission("yourplugin.custom.permission")) {
player.sendMessage("You have permission to access this feature.");
} else {
player.sendMessage("You do not have permission to access this feature.");
}
}
}
Класс BanList
Класс BanList из пакета cn.nukkit.permission используется для управления списком банов сервера. С его помощью можно выполнять такие операции, как добавление, удаление и проверка статуса бана.
Если вы не пишете плагин, связанный с безопасностью, этот класс обычно не используется.
Пример использования
public class YourPlugin extends PluginBase {
@Override
public void onEnable() {
this.getServer().getNameBans();// Get the server's player ban list
this.getServer().getIPBans();// Get the server's IP ban list
}
}
Интерфейс ServerOperator
В Nukkit OP (оператор) — это администратор сервера, имеющий доступ к привилегированным командам и функциям. В этом разделе представлен интерфейс ServerOperator, определяющий методы, связанные с управлением статусом оператора.
Основные методы
Интерфейс ServerOperator предоставляет методы для проверки и установки статуса оператора у объекта.
-
Метод isOp():
- Описание: проверяет, является ли объект оператором сервера.
- Тип возвращаемого значения:
boolean - Возвращаемое значение: возвращает
true, если объект является оператором, иначеfalse.
-
Метод setOp(boolean value):
-
Описание: устанавливает или снимает статус оператора у объекта.
-
Параметры:
value(boolean):true— выдать статус оператора,false— отозвать его.
-
Диаграмма отношений
Пример использования
Вот как использовать интерфейс ServerOperator в коде плагина:
import cn.nukkit.permission.ServerOperator;
public class MyPluginCommandExecutor implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender.isOp()) {
// Perform operations allowed for operators
sender.sendMessage("You are an operator.");
} else {
// Handle non-operator actions
sender.sendMessage("You are not an operator.");
}
return true;
}
}
Советы
Регистрация узлов прав с помощью plugin.yml
Файл plugin.yml в Nukkit-MOT наследует отличный дизайн Bukkit, позволяя быстро зарегистрировать узлы прав плагина, просто отредактировав yml-файл.
Вот пример регистрации прав для управления функциональностью плагина управления питомцами:
permissions:
pets.command:
description: "Allows user to manage own pets"
default: op
pets.manage:
description: "Allows user to manage all pets"
default: op
pets.call:
description: "Allows user to call a pet"
default: true
В этом примере:
- Право
pets.commandпозволяет игрокам управлять своими питомцами, однако по умолчанию оно есть только у операторов (OP). - Право
pets.manageпозволяет игрокам управлять всеми питомцами — оно также по умолчанию есть только у операторов (OP). - Право
pets.callпозволяет игрокам призывать питомца, и по умолчанию оно есть у всех. - Возможные значения
defaultописаны в разделе Основные константы класса Permission
Заключение
Как обычные разработчики, мы обычно используем plugin.yml для регистрации узлов прав.
А затем, перед выполнением операций, используйте метод hasPermission(String permission), чтобы убедиться, что у игроков есть необходимые права.