kill_server.events.server_event 源代码

from mcdreforged import MCDRPluginEvents, PluginEvent, PluginServerInterface
from mcdreforged.plugin.plugin_event import MCDREvent

server: PluginServerInterface | None = PluginServerInterface.psi_opt()


[文档] class ServerEvent(PluginEvent): """服务器事件, 包括服务端控制等 Attributes: id (str): 事件 ID """
[文档] def __init__(self, event_id: str) -> None: """创建一个服务器控制事件""" super().__init__(event_id)
[文档] @classmethod def is_server_event(cls, e: PluginEvent) -> bool: """判断该事件是否为一个服务器控制事件 .. note:: 包括 MCDR 内置的和本插件定义的 """ return ServerEvents.contains_id(e.id)
class _ServerEventStorage: """服务器事件存储类""" EVENT_DICT: dict[str, MCDREvent | ServerEvent] = {} """包含所有控制事件的字典, 以 ID 为键""" @classmethod def register(cls, event: MCDREvent | ServerEvent): if event.id in cls.EVENT_DICT: raise KeyError(event.id) cls.EVENT_DICT[event.id] = event @classmethod def get_mcdr_event(cls) -> list[MCDREvent]: return [e for e in cls.EVENT_DICT.values() if isinstance(e, MCDREvent)] @classmethod def get_server_event(cls) -> list[ServerEvent]: return [e for e in cls.EVENT_DICT.values() if isinstance(e, ServerEvent)]
[文档] class ServerEvents: """装有全部服务器生命周期/控制事件的常量类 该类包含 MCDR 内置的服务器生命周期事件和本插件定义的全部服务器控制事件. 所有的 MCDR 内置声明周期事件均为 MCDREvent 实例, 所有的自定义事件均为 ServerEvent 实例. See Also: MCDR 官方文档: - https://docs.mcdreforged.com/zh-cn/latest/plugin_dev/event.html - https://docs.mcdreforged.com/zh-cn/latest/code_references/ServerInterface.html#server-control """ # --- Server Controlling/Lifecycle Events --- # Server starting SERVER_PRE_STARTING: MCDREvent = MCDRPluginEvents.SERVER_START_PRE """服务器准备启动 :事件 ID: ``mcdr.server_start_pre`` :回调参数: :class:`~mcdreforged.plugin.si.plugin_server_interface.PluginServerInterface` See Also: https://docs.mcdreforged.com/zh-cn/latest/plugin_dev/event.html#server-start-pre """ SERVER_STARTING: MCDREvent = MCDRPluginEvents.SERVER_START """服务器正在启动 :事件 ID: ``mcdr.server_start`` :回调参数: :class:`~mcdreforged.plugin.si.plugin_server_interface.PluginServerInterface` See Also: https://docs.mcdreforged.com/zh-cn/latest/plugin_dev/event.html#server-start """ SERVER_STARTED: MCDREvent = MCDRPluginEvents.SERVER_STARTUP """服务器已启动 :事件 ID: ``mcdr.server_startup`` :回调参数: :class:`~mcdreforged.plugin.si.plugin_server_interface.PluginServerInterface` See Also: https://docs.mcdreforged.com/zh-cn/latest/plugin_dev/event.html#server-startup """ # Server Stopping SERVER_STOPPING: ServerEvent = ServerEvent("kill_server.server_stopping") """服务器正在停止 :事件 ID: ``kill_server.server_stopping`` :回调参数: :class:`~mcdreforged.plugin.si.plugin_server_interface.PluginServerInterface` """ PLUGIN_STOPPING_SERVER: ServerEvent = ServerEvent( "kill_server.plugin_stopping_server" ) """服务器正在被插件/MCDR命令关闭 当且仅当 :meth:`ServerInterface.stop() <mcdreforged.plugin.si.server_interface.ServerInterface.stop>` 调用时触发 :事件 ID: ``kill_server.plugin_stopping_server`` :回调参数: :class:`~mcdreforged.plugin.si.plugin_server_interface.PluginServerInterface` """ PLUGIN_KILLING_SERVER: ServerEvent = ServerEvent( "kill_server.plugin_killing_server" ) """服务器正在被插件/MCDR命令强制关闭 当且仅当 :meth:`ServerInterface.kill() <mcdreforged.plugin.si.server_interface.ServerInterface.kill>` 调用时触发 :事件 ID: ``kill_server.plugin_killing_server`` :回调参数: :class:`~mcdreforged.plugin.si.plugin_server_interface.PluginServerInterface` """ SERVER_STOPPED: MCDREvent = MCDRPluginEvents.SERVER_STOP """服务器已停止 :事件 ID: ``mcdr.server_stop`` :回调参数: :class:`~mcdreforged.plugin.si.plugin_server_interface.PluginServerInterface`, :class:`int` See Also: https://docs.mcdreforged.com/zh-cn/latest/plugin_dev/event.html#server-stop """ # --- World Relevant Event --- WORLD_SAVED: ServerEvent = ServerEvent("kill_server.world_saved") """世界已保存 :事件 ID: ``kill_server.world_saved`` :回调参数: :class:`~mcdreforged.plugin.si.plugin_server_interface.PluginServerInterface` """ # Methods @classmethod def get_event_list(cls) -> list[MCDREvent | ServerEvent]: """:meta private:""" return list(_ServerEventStorage.EVENT_DICT.values()) @classmethod def contains_id(cls, event_id: str) -> bool: """:meta private:""" return event_id in _ServerEventStorage.EVENT_DICT
def __register_server_events(): for name, value in vars(ServerEvents).items(): if not name.startswith("_") and isinstance(value, MCDREvent | ServerEvent): _ServerEventStorage.register(value) __register_server_events() def dispatch(event: PluginEvent, args: tuple = ()): """以指定参数分发事件 .. note:: 当 server 为 None 时应该是文档环境 """ assert server is not None server.dispatch_event(event, args)