!!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

这些命令将执行以下操作:

  1. 查询内置插件 my_plugin 的信息;

  2. 重载 ID 为 my_plugin 的插件;

  3. 启用并加载文件名为 another_plugin.py.disable 的插件。它的 ID 为 another_plugin

  4. 卸载 ID 为 another_plugin 的插件;

  5. 加载文件名为 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_pluginanother_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