KillServer

Force to kill mc server

management

Installation command

!!MCDR plugin install kill_server

Author

Synced at

...

Last update

...

Latest version

Total downloads

16

Back to catalogue

KillServer

在关服卡死时强制关闭服务器

Warning

此插件使用 dowhen 模块实现, 可能不够稳定

Tip

BUG Report: GitHub issues

介绍

对于下面的情况(实际可能还有更多适用的情况):

  1. Fabric 服务器卡死不关闭
  2. pause 命令诱发用户Ctrl+C操作,导致 MCDR 关闭与存档恢复冲突,最终致使存档损坏

本插件提供监听服务器关闭并且在这些情况下强制关闭服务器的功能, 给小白腐竹们提供一个简单且无脑的解决方案

使用方法

直接安装到 MCDR 的插件文件夹下即可, 可以从 GitHubPluginCatalogue 手动下载插件文件

你也可以用下面的 MCDR 命令安装 KillServer

!!MCDR plg install kill_server

安装后只需要注意服务器关闭不要用 Minecraft 原生的 /stop 命令, 换用 MCDR 命令来关闭, 比如 !!MCDR server stop !!MCDR server restart

你都用 MCDR 了竟然还不知道原生 /stop 会让 MCDR 关闭吗?
你都用 MCDR 了竟然还用不支持运行时回档的备份模组而不是 PrimeBackup、QuickBackupM 吗?

配置

配置项类型默认值含义注释
enableboolTrue是否启用插件不影响事件分发
waiting_timefloat60等待服务器关闭的时间, 超时强制关闭单位为秒
mcdr_onlyboolFalse是否只监听 PluginStoppingServerEvent

新的事件

KillServer 创建了三个字面量事件 ServerStoppingEvent, PluginStoppingServerEventWorldSavedEvent 用以监听服务器控制事件

你可以通过下面的方式在自己的插件中使用这些事件

from kill_server import ServerStoppingEvent, PluginStoppingServerEvent, WorldSavedEvent
from mcdreforged import event_listener, PluginServerInterface


# import
@event_listener(ServerStoppingEvent)
def on_server_stopping(server: PluginServerInterface):
    pass


# or id
@event_listener("kill_server.server_stopping")  # also 
def on_server_stopping(server: PluginServerInterface):
    pass

Tip

如果你只是需要各个事件而不需要强制关闭功能的话可以把配置中的 enable 项设定为 false, 该配置只会影响强制关闭功能而不会停止事件分发

ServerStoppingEvent

字面量事件 ServerStoppingEvent = LiteralEvent("kill_server.server_stopping") 用以监听服务器关闭, 这个事件会在服务器开始关闭时 (例如 /stop 被调用时) 触发

  • 事件 ID: kill_server.server_stopping
  • 回调参数: PluginServerInterface

PluginStoppingServerEvent

事件 PluginStoppingServerEvent = LiteralEvent("kill_server.plugin_stopping_server") 用以监听 由插件调用 ServerInterface.stop() 或调用 MCDR 命令 导致的服务器开始关闭, 这个事件会在服务器关闭时 (例如 !!MCDR server stop 被调用时) 触发

Important

  1. 该事件同时会引发 ServerStoppingEvent
  2. ServerInterface.kill() 不会触发该事件, 因为服务器此时不是正常开始关闭而是进程组被 kill
  • 事件 ID: kill_server.plugin_stopping_server
  • 回调参数: PluginServerInterface

WorldSavedEvent

KillServer 创建了一个字面量事件 WorldSavedEvent = LiteralEvent("kill_server.world_saved") 用以监听服务器是否将世界保存好, 这个事件会在服务器保存世界完成时 (例如 /save 被调用之后) 触发

  • 事件 ID: kill_server.world_saved
  • 回调参数: PluginServerInterface

README source: src/KillServer/README.md