Skip to content

基本客户端 API

基础客户端模块会导出常用客户端 API、事件监听、跨端通信工具以及若干 QuMod 便捷封装。通常在 Client.py 中直接导入:

python
from .QuModLibs.Client import *

事件名写法

监听游戏事件时,推荐直接使用字符串事件名,例如 @Listen("ClientItemTryUseEvent")。旧式 Events.xxx 写法需要维护类属性映射,后续文档不再推荐。

IsServerUser

IsServerUser 用于标记当前客户端玩家是否为房主玩家。它适合单机或房主客户端专属逻辑,例如只允许房主执行某些客户端侧操作。

python
# Client.py
from .QuModLibs.Client import *

@Listen("ClientItemTryUseEvent")
def ClientItemTryUseEvent(args):
    if not IsServerUser:
        return

    itemDict = args["itemDict"]
    itemName = itemDict["itemName"]
    if itemName == "minecraft:diamond_sword":
        # 房主客户端专属逻辑
        ...

网络游戏须知

在联机大厅或服务器类网络游戏中,不存在“房主客户端”这一稳定概念,此时 IsServerUser 通常为 False。权威业务逻辑仍应放在服务端。

Request

Request 是带回调的远程请求封装。相比 Call 的单向调用,Request 更适合需要服务端返回结果的客户端交互。

python
# Client.py
from .QuModLibs.Client import *

def onResponse(data):
    print("返回数据结果: {}".format(data))

Request("ServerFunc", ("张三",), {}, onResponse)

参数说明:

  • Key:远程可执行对象名称。
  • args:位置参数元组。单个参数请写成 ("张三",)
  • kwargs:关键字参数字典。
  • onResponse:收到响应后的回调函数。

元组参数

Python 中 ("张三") 只是字符串表达式,不是元组;单元素元组必须写成 ("张三",)

CallOTClient

CallOTClient 用于让当前客户端请求服务端转发调用到其他玩家客户端。

python
# Client.py
from .QuModLibs.Client import *

CallOTClient(playerId, "ClientFuncName", "hello")

常见用途:

  • 向指定玩家客户端同步表现层事件。
  • 触发其他玩家客户端上的已授权函数。
  • 在多人房间中做轻量客户端间协作。

安全边界

CallOTClient 仍然需要经过服务端转发。不要把关键游戏判定只放在客户端,涉及奖励、伤害、背包、存档等权威逻辑时,应由服务端校验和执行。

Released under the BSD3 License