ZZClientOnlySyncMessage

基本信息

属性 值
消息类 com.dreammaster.network.msg.ZZClientOnlySyncMessage
处理器 内嵌静态类 ZZClientOnlySyncMessageHandler(ZZClientOnlySyncMessage.java:31)
网络通道 SimpleNetworkWrapper(Refstrings.MODID) = modid dreamcraft(MainRegistry.java:180)
消息 ID(discriminator) 1(MainRegistry.java:184)
允许接收端 Side.CLIENT(MainRegistry.java:185)
注册时机 PreLoad(MainRegistry.java:181-185)
载荷 boolean enabled,1 bit
消息总数 1

⚠️ 本 mod 唯一的网络消息

com.dreammaster.network 包下只有 msg/ZZClientOnlySyncMessage.java 一个文件(find src/main/java/com/dreammaster/network -name '*.java' 单条结果)。本 mod 没有实体同步包、没有区块数据、没有世界数据传输。

功能

一条服务端 → 客户端单向的布尔开关同步,服务端发 true/false,客户端据此开关某个功能。

注册

dispatcher = new SimpleNetworkWrapper(Refstrings.MODID);
dispatcher.registerMessage(
        ZZClientOnlySyncMessage.ZZClientOnlySyncMessageHandler.class,
        ZZClientOnlySyncMessage.class,
        1,
        Side.CLIENT);

(MainRegistry.java:180-185)

因为 discriminator 是 1 且方向为 Side.CLIENT,服务端不会处理来自客户端的同 ID 消息。

序列化

方向 实现 内容
客户端 → 服务端(toBytes) ZZClientOnlySyncMessage.java:27-29 buf.writeBoolean(enabled)
服务端 → 客户端(fromBytes) ZZClientOnlySyncMessage.java:22-24 enabled = buf.readBoolean()

toBytes 写 1 个布尔,fromBytes 读 1 个布尔,两个方向不对称:服务端只调用 sendTo(内部调 toBytes),客户端的 fromBytes 负责解包。字段 enabled 是包级私有(无修饰符,ZZClientOnlySyncMessage.java:12)。

处理器

public static class ZZClientOnlySyncMessageHandler implements IMessageHandler<ZZClientOnlySyncMessage, IMessage> {
    @Override
    public IMessage onMessage(ZZClientOnlySyncMessage message, MessageContext ctx) {
        ScriptZZClientOnly.instance.handleServerMessage(message.enabled);
        return null;
    }
}

(ZZClientOnlySyncMessage.java:31-38)

处理器返回 null(ZZClientOnlySyncMessage.java:36),即不回发任何回复消息 —— 确认这是单向同步。副作用直接转交 ScriptZZClientOnly.instance 的静态单例(ScriptZZClientOnly.java:37 定义该单例)。

数值

数值名 值
消息数 1
discriminator 1
载荷大小 1 字节(writeBoolean / readBoolean)
方向 服务端 → 客户端(单向,处理器返回 null)
处理器返回值 null(不回发)

交互

触发 行为
服务端发出 enabled=true 客户端调 stamps(true),并把每个 coins 配方置 mEnabled=true / mHidden=false,置 registered=true(ScriptZZClientOnly.java:440-446)
服务端发出 enabled=false 客户端调 stamps(false),并把每个 coins 配方置 mEnabled=false / mHidden=true,置 registered=false(ScriptZZClientOnly.java:447-453)
消息到达但 initialized 为 false 抛 RuntimeException("ZZClientOnly not initialized!")(ScriptZZClientOnly.java:439)
玩家进入服务器 状态由服务端决定并推送,客户端不自行判断

玩家侧无任何直接交互 —— 没有指令、没有 GUI、没有物品。

相关条目

  • 配方脚本 - 接收本消息的 ScriptZZClientOnly 属于该体系