mcdreforged.handler.impl.beta18_handler 源代码

import re
from typing import Optional

import parse
from typing_extensions import override

from mcdreforged.handler.impl.vanilla_handler import VanillaHandler
from mcdreforged.info_reactor.info import Info
from mcdreforged.info_reactor.server_information import ServerInformation
from mcdreforged.minecraft.rtext.text import RTextBase
from mcdreforged.utils import string_util
from mcdreforged.utils.types.message import MessageText


[文档] class Beta18Handler(VanillaHandler): """ Yes, a handler for Minecraft beta 1.8 """ @classmethod @override def format_message(cls, message: MessageText) -> str: if isinstance(message, RTextBase): content = message.to_plain_text() else: content = str(message) return string_util.clean_minecraft_color_code(content) @override def get_send_message_command(self, target: str, message: MessageText, server_information: ServerInformation) -> Optional[str]: return 'tell {} {}'.format(target, self.format_message(message)) @override def get_broadcast_message_command(self, message: MessageText, server_information: ServerInformation) -> Optional[str]: return 'say {}'.format(self.format_message(message)) # 2020-12-27 02:56:35 [INFO] Loading properties # 2020-12-27 02:57:42 [INFO] <Steve> ping @classmethod @override def get_content_parsing_formatter(cls): return '{y:d}-{m:d}-{d:d} {hour:d}:{min:d}:{sec:d} [{logging}] {content}' __player_joined_parser = parse.Parser('{name} [{}] logged in with entity id {} at ({})') __player_left_parser = parse.Parser('{name} lost connection: {}') __server_startup_done_regex = re.compile(r'Done \([0-9.]*ns\)! For help, type "help" or "\?"') @override def parse_player_joined(self, info): # Steve [/127.0.0.1:2993] logged in with entity id 3827 at (-130.5, 69.0, 253.5) if not info.is_user: # there's an extra space character after {name} parsed = self.__player_joined_parser.parse(info.content) if parsed is not None and self._verify_player_name(parsed['name']): return parsed['name'] return None @override def parse_player_left(self, info: Info): # Steve lost connection: disconnect.quitting if info.is_from_server and self.__player_left_parser.parse(info.content) is not None: return info.content.split(' ')[0] return None @override def test_server_startup_done(self, info: Info): # Done (6368115300ns)! For help, type "help" or "?" if info.is_user: return False match = self.__server_startup_done_regex.fullmatch(info.content) return match is not None @override def test_rcon_started(self, info: Info): return False @override def test_server_stopping(self, info: Info): # Stopping server return not info.is_user and info.content == 'Stopping server'