Skip to content

游戏接口 mc

lumen.mc 提供游戏侧接口,复刻 LeviLamina 的 mc 对象风格:

监听游戏事件

python
# 兼容别名(sb3 / LL 风格)
lumen.mc.listen("onJoin", lambda name: lumen.logger.info(f"{name} 进服"))
lumen.mc.listen("onChat", lambda name, msg: lumen.logger.info(f"{name}: {msg}"))
lumen.mc.listen("onLeft", lambda name: ...)
lumen.mc.listen("onDeath", lambda name, msg: ...)

支持任意 Endstone 事件(按类名字符串反射查找,随 Endstone 升级自动支持新事件):

python
# 监听玩家交互方块事件
def on_interact(event):
    player = event.player
    block = event.block
    lumen.logger.info(f"{player.name} 交互了 {block}")

lumen.mc.listen("PlayerInteractEvent", on_interact)

# 监听方块破坏
lumen.mc.listen("BlockBreakEvent", lambda e: lumen.logger.info(f"{e.player.name} 破坏了方块"))

# 监听实体生成
lumen.mc.listen("ActorSpawnEvent", lambda e: ...)

回调接收原生 Endstone 事件对象,拥有完整的事件 API(event.playerevent.blockevent.set_cancelled() 等)。

执行命令

python
# 异步执行(不关心输出,不阻塞)
lumen.mc.runcmd("say 服务器即将重启")

# 同步执行并捕获输出(阻塞调用线程,不要在游戏主线程用!)
result = lumen.mc.runcmdEx("list")
# result = {"success": True, "output": "There are 3/20 players online:\nSteve, Alex, ..."}
if result["success"]:
    lumen.logger.info(f"在线玩家: {result['output']}")

其他

python
# 全服广播
lumen.mc.broadcast("§a欢迎来到服务器!")

# 在线玩家列表
players = lumen.mc.online_players  # ["Steve", "Alex", ...]

基于 MIT 许可协议发布