!!MCDR 命令
!!MCDR 命令是用户在控制台或游戏中控制 MCDR 的方式。这些命令至少需要权限级别 3 (admin) 才能执行
若你已经有控制 MCDR 的权限,那么你可以在控制台或游戏聊天框中输入 !!MCDR,你将会看到 MCDR 命令的帮助消息
如果你仅拥有权限级别 1 (user),则 !!MCDR 命令将展示 MCDR 的版本
状态显示
!!MCDR status 命令将返回 MCDR 的当前状态。它包括如下内容:
MCDR 的版本
MCDR 的状态
服务端的状态
如果服务器已启动则显示的标志
MCDR 是否会在服务端停止后关闭,也即服务器是自然关闭的还是被 MCDR 停止/杀死
Rcon 的连接状态
已加载插件数量
以下状态只能由具有权限 4 (owner) 的用户查看
服务端 PID。注意,此 PID 是正在运行服务端的终端程序的 PID。除此之外,MCDR 将显示出 PID 树,你可以借此了解你的服务端的进程结构
信息处理队列的负载。若服务端正在刷屏,则该队列可能被填满
热重载
!!MCDR reload 子命令可以热重载 MCDR。它也可以缩写为 !!MCDR r。执行命令 !!MCDR reload 即可获取热重载命令的帮助信息
以下是一个展示相关命令的表格
命令 |
缩写 |
功能 |
|---|---|---|
!!MCDR reload |
!!MCDR r |
显示重载命令的帮助信息 |
!!MCDR reload plugin |
!!MCDR r plg |
重载所有 有变化 的插件 |
!!MCDR reload config |
!!MCDR r cfg |
重新载入配置文件 |
!!MCDR reload permission |
!!MCDR r perm |
重新载入权限文件 |
!!MCDR reload all |
!!MCDR r all |
重载上述所有 |
权限管理
!!MCDR permission 子命令用于操作玩家权限。它的缩写是 !!MCDR perm。执行命令 !!MCDR perm 将显示权限操作命令的帮助信息
以下是一个展示相关命令的表格
命令 |
缩写 |
功能 |
|---|---|---|
!!MCDR permission |
!!MCDR perm |
显示权限命令帮助信息 |
!!MCDR permission list [<level>] |
!!MCDR perm list [<level>] |
列出所有玩家的权限。在设置了 [<level>] 时,仅列出拥有 [<level>] 权限的玩家 |
!!MCDR permission set <player> <level> |
!!MCDR perm set <player> <level> |
设置 <player> 的权限级别为 <level> |
!!MCDR permission query <player> |
!!MCDR perm q [<player>] |
查询 <player> 的权限级别。如果没有设置 <player>,查询命令发送者的权限级别 |
!!MCDR permission remove <player> |
!!MCDR perm remove <player> |
从权限数据库中删除 <player> |
!!MCDR permission setdefault <level> |
!!MCDR perm setd <level> |
设置默认权限级别为 <level> |
其中,<player> 参数应为一个玩家名
<level> 参数应该是一个表示权限等级的字符串或整数。它可以是权限全名或表示权限等级的整数
例如:
!!MCDR perm list 4:列出所有权限级别为 4 (owner) 的玩家!!MCDR permission set Steve admin:将玩家 Steve 的权限级别设置为 3 (admin)!!MCDR permission q Steve:查询玩家 Steve 的权限级别。其值应为上一条示例设置的 3 (admin)
查看 权限 文档以获取更多关于 MCDR 权限系统的信息
插件管理
!!MCDR plugin 用于操纵插件的命令。它的缩写是 !!MCDR plg。直接执行命令 !!MCDR plg 将显示该命令的帮助信息
本地插件管理
下面是用于操纵本地已安装插件的命令
命令 |
缩写 |
功能 |
|---|---|---|
!!MCDR plugin list |
!!MCDR plg list |
列出所有已安装的插件 |
!!MCDR plugin info <plugin_id> |
!!MCDR plg info <plugin_id> |
显示 ID 为 <plugin_id> 的插件信息 |
!!MCDR plugin load <file_name> |
!!MCDR plg load <file_name> |
加载文件名为 <file_name> 的插件 |
!!MCDR plugin enable <file_name> |
!!MCDR plg enable <file_name> |
启用文件名为 <file_name> 的插件 |
!!MCDR plugin reload <plugin_id> |
!!MCDR plg reload <plugin_id> |
重载 ID 为 <plugin_id> 的插件 |
!!MCDR plugin unload <plugin_id> |
!!MCDR plg unload <plugin_id> |
卸载 ID 为 <plugin_id> 的插件 |
!!MCDR plugin disable <plugin_id> |
!!MCDR plg disable <plugin_id> |
禁用 ID 为 <plugin_id> 的插件 |
!!MCDR plugin reloadall |
!!MCDR plg ra |
加载 / 重载 / 卸载 所有 未禁用的插件 |
<plugin_id> 参数应为操作目标的插件 ID
<file_name> 参数应为要加载或启用插件的文件名
例子:
假设现在有一个 Id 为 my_plugin 的插件已被加载,一个路径为 plugins/another_plugin.py.disabled 的插件被 ID 为 another_plugin 的插件禁用
于是你可以执行以下命令:
!!MCDR plg info my_plugin
!!MCDR plugin reload my_plugin
!!MCDR plugin enable another_plugin.py.disabled
!!MCDR plugin unload another_plugin
!!MCDR plugin load another_plugin.py
这些命令将执行以下操作:
查询内置插件
my_plugin的信息;重载 ID 为
my_plugin的插件;启用并加载文件名为
another_plugin.py.disable的插件。它的 ID 为another_plugin;卸载 ID 为
another_plugin的插件;加载文件名为
another_plugin.py的插件。注意,由于此插件未加载,故你只能使用文件名来指定它
插件仓库访问
下述命令提供了一系列基于 插件仓库 的操作
浏览 (browse)
浏览插件仓库。用关键字进行筛选,或展示给定插件的详情
!!MCDR plugin browse [<keyword>] [(-i|--id) <plugin_id>]
参数:
<keyword>:筛选用的关键字<plugin_id>:要展示详情的插件的 ID
用法示例:
!!MCDR plugin browse: 列出插件仓库中的所有插件!!MCDR plugin browse backup: 列出插件仓库中含有关键字backup的插件!!MCDR plugin browse -i my_plugin: 展示插件仓库中,ID 为my_plugin的插件
安装 (install)
从插件仓库安装给定描述的插件
!!MCDR plugin install <specifier> [(-t|--target) <target>] [-U|--upgrade] [-y|--yes|--confirm] [--dry-run] [--no-dependencies] [(-r|--requirement) <requirement_file>] ...
参数:
<specifier>:一个插件描述,用于描述将要被安装的插件,可多次提供格式:
${ID}${版本需求}。版本需求的具体形式可参考 此处。例子:my_plugin my_plugin<1 my_plugin>=1.0 my_plugin^=2.0.1
除此之外,若版本需求用
==固定了插件版本,你还可以在插件描述末尾追加一个哈希校验器,进一步确保将被安装的插件文件,拥有着符合预期的哈希值my_plugin==3.0.0@0ec1e048c6 my_plugin==3.0.0@0ec1e048c6a1737cce639ddc912d13870705fa109e2009321c64193fbc2e4e35 my_plugin==3.0.0@sha256:0ec1e048c6a1737cce63 my_plugin==3.0.0@sha256:0ec1e048c6a1737cce639ddc912d13870705fa109e2009321c64193fbc2e4e35
在追加了哈希校验器后,插件描述的格式将变为:
${ID}}${版本需求}@${哈希校验器}哈希校验器部分的格式既可以是${哈希算法}:${哈希值},也可以仅仅是一个使用 sha256 的${哈希值}哈希算法部分仅支持sha256哈希值部分应该为一个长度在 [10, 64] 内的十六进制字符串。它应该是预期哈希值的一个前缀
<target>:安装插件时使用的目标插件文件夹。默认值为 MCDR 配置文件中,plugin_directories 列表的第一个路径备注
这个参数只影响新安装的插件
对于已经存在的插件,它们的目标安装文件夹将始终是已存在插件所在的位置
-U、--upgrade:可选的标志位,表示若插件已安装,则尝试对其进行升级-y、--yes、--confirm:可选的标志位,用于跳过安装确认的步骤--dry-run:可选标志位,表示试运行。若提供,则不会进行实际的安装操作--no-dependencies:可选标志位,在安装插件时,忽略所有的依赖关系。待安装插件的插件依赖和 Python 包依赖都不会被安装-r,--requirement:指向一个储存着要安装的插件列表的文本文件,其中每行都是一个插件描述。空行,或以 # 开头的行,会被忽略。就像pip install -r命令一样
用法示例:
!!MCDR plugin install my_plugin:安装 ID 为my_plugin的插件,使用最新兼容的版本!!MCDR plugin install my_plugin<1.3:安装 ID 为my_plugin的插件,使用最新兼容的,且版本小于1.3的版本!!MCDR plugin install my_plugin<1.3 another_plugin==1.0.0:在上面例子的基础上,再安装another_plugin插件,且其版本正好为1.0.0!!MCDR plugin install my_plugin==1.3@sha256:134b44beec:安装 ID 为my_plugin的插件,版本为1.3,并确保插件文件的 sha256 以134b44beec为前缀!!MCDR plugin install -U my_plugin:若插件my_plugin已安装,则升级该插件,否则安装该插件。目标版本为最新兼容的版本!!MCDR plugin install -U -y *:更新所有已安装的插件至它们的最新且兼容的版本。确认检查将被跳过
一次完整插件安装流程的示例输出(注意 my_plugin 实际上是不存在的):
> !!MCDR plg install my_plugin
[MCDR] [21:01:31] [PIM/INFO]: Resolving dependencies ...
[MCDR] [21:01:31] [PIM/INFO]: Plugins to install (new 1, change 0, total 1):
[MCDR] [21:01:31] [PIM/INFO]:
[MCDR] [21:01:31] [PIM/INFO]: my_plugin: N/A -> 1.2.0
[MCDR] [21:01:31] [PIM/INFO]:
[MCDR] [21:01:31] [PIM/INFO]: Python packages to install (2x):
[MCDR] [21:01:31] [PIM/INFO]:
[MCDR] [21:01:31] [PIM/INFO]: foobar (request by my_plugin@1.2.0)
[MCDR] [21:01:31] [PIM/INFO]: bazlib (request by my_plugin@1.2.0)
[MCDR] [21:01:31] [PIM/INFO]:
[MCDR] [21:01:31] [PIM/INFO]: Enter !!MCDR confirm to confirm installation, or !!MCDR abort to abort
> !!MCDR confirm
[MCDR] [21:01:34] [PIM/INFO]: Installing 1 required python packages
Example pip output ...
Successfully installed foobar-1.9.4 bazlib-0.24.0
[MCDR] [21:01:43] [PIM/INFO]: Downloading and installing 1 plugins
[MCDR] [21:01:43] [PIM/INFO]: Downloading my_plugin@1.2.0: plugins/MyPlugin-v1.1.1.mcdr (example-sha256-hash)
[MCDR] [21:01:45] [PIM/INFO]: Installing my_plugin@1.2.0 to plugins/MyPlugin-v1.1.1.mcdr
[MCDR] [21:01:45] [PIM/INFO]: Installed 1 plugins, reloading MCDR
[MCDR] [21:01:45] [PIM/INFO]: Plugin my_plugin@1.2.0 loaded
[MCDR] [21:01:46] [PIM/INFO]: Installation done
检查更新 (checkupdate)
检查给定的插件是否有更新
!!MCDR plugin (checkupdate|cu) [<plugin_id> ...]
参数:
<plugin_id>:要检查更新的插件 ID,可多次提供。若未提供,则为所有插件检查更新
用法示例:
!!MCDR plugin checkupdate:为 所有 已安装的插件检查更新!!MCDR plugin cu my_plugin another_plugin:为my_plugin、another_plugin这两个插件检查更新
刷新插件仓库元数据 (refreshmeta)
重新拉取插件仓库的元数据
!!MCDR plugin refreshmeta
冻结插件列表 (freeze)
输出插件依赖冻结列表,类似 pip freeze
默认情况下,仅展示 打包插件,毕竟 !!MCDR plugin install 只能安装打包插件
!!MCDR plg freeze [-a|--all] [--no-hash] [(-o|--output) <output_file>]
参数:
-a,-all:输出用户安装的所有类型的插件,包括非打包插件--no-hash:去除哈希后缀输出-o,--output:将结果输出值指定的文件。输出的文件可在命令!!MCDR plugin install -r <requirement_file>中使用
偏好设置
!!MCDR preference 子命令可用于操控 MCDR 的偏好。它仅需要权限等级 1 (user) 即可操作
以下是一个展示相关命令的表格
命令 |
缩写 |
功能 |
|---|---|---|
!!MCDR preference |
!!MCDR pref |
显示偏好命令帮助信息 |
!!MCDR preference list |
!!MCDR pref list |
显示偏好列表 |
!!MCDR preference <pref_name> |
!!MCDR pref <pref_name> |
显示偏好 <pref_name> 的详情 |
!!MCDR preference <pref_name> set <value> |
!!MCDR pref <pref_name> set <value> |
设定偏好 <pref_name> 的值为 <value> |
!!MCDR preference <pref_name> reset |
!!MCDR pref <pref_name> reset |
将偏好 <pref_name> 重置为默认值 |
查看 偏好 文档以获取更多关于 MCDR 偏好的信息
例如:
!!MCDR pref set language zh_cn: 将偏好language的值设置为zh_cn
检查更新
使用 !!MCDR checkupdate 或 !!MCDR cu 可手动检查来自 github 的更新
它将尝试在 github 中获取最新版本,并检查它是否比当前版本更新。如果是,它将显示 github 上的更新日志
服务端控制
!!MCDR server 子命令可用于控制被守护的服务端
以下是一个展示相关命令的表格
命令 |
功能 |
|---|---|
!!MCDR server |
显示服务端控制命令的帮助信息 |
!!MCDR server start |
启动服务端 |
!!MCDR server stop |
关闭服务端,且 MCDR 会继续运行 |
!!MCDR server stop_exit |
关闭服务端并退出MCDR |
!!MCDR server exit |
退出 MCDR。服务端应已关闭 |
!!MCDR server restart |
重启服务端 |
!!MCDR server kill |
杀死服务端,以及其所有子进程 |
这些命令同时也是 服务端接口 API 的一部分
调试
!!MCDR debug 包含了不少用于调试 MCDR 或 MCDR 插件的实用工具。它们主要是为开发者设计的,因此如果你是一位 MCDR 的用户,你可以跳过这一部分
线程转储
导出所有指定线程的堆栈追踪信息。一个用于快速分析你的线程正在干什么的方式
你可以使用 #all 作为线程名来导出所有线程的信息
格式:
!!MCDR debug thread_dump [<thread_name>] [(-o|--output) <output_file>] [--name-only]
参数:
thread_name:可选参数,要导出堆栈的线程名字。若未提供,或其值为#all,则导出所有线程--name-only:仅展示线程名,不要输出线程堆栈-o,--output:将线程信息导出结果输出至给定文件,以供进一步分析
翻译测试
查询给定翻译键的翻译结果,或者导出以给定路径为前缀的所有翻译键
格式:
!!MCDR debug translation get <translation_key>
!!MCDR debug translation dump <json_path> [(-o|--output) <output_file>]
参数:
-o,--output:将翻译数据导出结果输出至给定文件,以供进一步分析
例子:
!!MCDR debug translation get one.of.my.translation.key
!!MCDR debug translation get server_interface.load_config_simple.succeed
!!MCDR debug translation dump .
!!MCDR debug translation dump mcdr_server -o mcdr_translation_dump.json
!!MCDR debug translation dump mcdr_server.on_server_stop
命令树展示
使用方法 print_tree() 导出命令树
你可以通过插件 id 或根节点名来过滤命令树
格式:
!!MCDR debug command_dump all [(-o|--output) <output_file>]
!!MCDR debug command_dump plugin <plugin_id> [(-o|--output) <output_file>]
!!MCDR debug command_dump node <literal_name> [(-o|--output) <output_file>]
参数:
-o,--output:将指令树输出至给定文件,以供进一步分析
例子:
!!MCDR debug command_dump all -o mcdr_command_dump.txt
!!MCDR debug command_dump plugin my_plugin
!!MCDR debug command_dump node !!MyCommand