服务端处理器

服务端处理器是分析服务器输出并提供命令接口来控制服务器的对象。

MCDR 本身已经包含许多广泛使用的 Minecraft 服务端的处理器,但如果你有需要自定义输出格式的服务端,你可以编写自己的服务端处理器,并让 MCDR 使用它。

要设计服务端处理器,你需要从现有的服务端处理器类或 AbstractServerHandler 基类继承。

建议首先查看 MCDR 中服务端处理器的实现,并尝试理解它们。

示例

假设我们有一个原版服务器,但某些玩家的用户名加有前缀,这将导致玩家聊天消息的消息格式发生一些更改。例如,具有 ID Steve 和前缀 [Builder] 的玩家可能有以下聊天消息:

<[Builder]Steve> Hello
<[Builder]Steve> !!MCDR status

对于默认的原版服务端处理器,[Builder]Steve 是一个非法的玩家名称。幸运的是,服务器中所有可能的玩家前缀都遵循相同的格式,即 [前缀]玩家名称。因此,可以为之创建专用的处理器。

例如,上面的以下代码创建一个处理器,以在此服务器中处理玩家名:

from parse import parse

from mcdreforged.handler.impl import VanillaHandler


class MyHandler(VanillaHandler):
    def get_name(self) -> str:
        return 'the_handler_for_my_server'

    def parse_server_stdout(self, text: str):
        result = super().parse_server_stdout(text)
        if result.player is None:
            parsed = parse('<[{prefix}]{name}> {message}', result.content)
            if parsed is not None and self._verify_player_name(parsed['name']):
                result.player, result.content = parsed['name'], parsed['message']
        return result

于是,你可以使用此处理器来处理服务端。你需要在配置文件中执行以下操作:

  1. 将配置文件中的 handler 选项设置为 the_handler_for_my_server

  2. custom_handlers 选项中添加自定义处理器的路径。例如:

custom_handlers:
- the.package.to.my.handler.MyHandler

就这样。