Village Names Network

基本信息

属性 值
频道名 vnChannel(Reference.MOD_CHANNEL,utility/Reference.java)
建立位置 NetworkRegistry.INSTANCE.newSimpleChannel(Reference.MOD_CHANNEL)(VillageNames.java:504)
字段 VillageNames.VNNetworkWrapper(VillageNames.java:96)
消息数 4(全部为服务端 → 客户端,Side.CLIENT)
Discriminator 0 ~ 3(自增,messageID++)

⚠️ 另有一个未被使用的 NetworkHandler 类(network/NetworkHandler.java):它同样调用 newSimpleChannel(Reference.MOD_ID) 建立名为 VillageNames(而非 vnChannel)的频道,并提供 sendToServer / sendTo 辅助方法。全仓库无任何地方引用 NetworkHandler(grep NetworkHandler 仅命中文件自身定义),因此该类为死代码,其 VillageNames 频道不会被建立。按"死代码 ≠ 注册内容"的判定原则,本条目只记录实际生效的 VNNetworkWrapper 频道。

消息注册表

VNNetworkWrapper = NetworkRegistry.INSTANCE.newSimpleChannel(Reference.MOD_CHANNEL);
int messageID = 0;
VNNetworkWrapper.registerMessage(NetworkHelper.ZombieVillagerProfessionHandler.class, MessageZombieVillagerProfession.class, messageID++, Side.CLIENT);
VNNetworkWrapper.registerMessage(NetworkHelper.VillageGuardHandler.class, MessageVillageGuard.class, messageID++, Side.CLIENT);
VNNetworkWrapper.registerMessage(PacketHandlerClient.class, SToCMessage.class, messageID++, Side.CLIENT);
VNNetworkWrapper.registerMessage(NetworkHelper.ModernVillagerSkinHandler.class, MessageModernVillagerSkin.class, messageID++, Side.CLIENT);

(VillageNames.java:504-513)

ID 消息类 处理器 方向 用途
0 network/MessageZombieVillagerProfession.java NetworkHelper.ZombieVillagerProfessionHandler S→C 僵尸村民转化后的职业/外观同步
1 network/MessageVillageGuard.java NetworkHelper.VillageGuardHandler S→C 村民看守状态同步(当前仅同步 entityID)
2 prismarine/guardian/particle/SToCMessage.java PacketHandlerClient S→C 守卫者粒子特效(载荷为 byte[])
3 network/MessageModernVillagerSkin.java NetworkHelper.ModernVillagerSkinHandler S→C 现代村民皮肤合成参数同步(6 个 int)

VNNetworkWrapper 的字段注释标注了来源://Added from Dragon Artifacts(VillageNames.java:96)——即这套 SimpleNetworkWrapper 机制是移植自 Dragon Artifacts。

载荷字段

MessageZombieVillagerProfession (ID 0)

同步僵尸村民转化后的属性对象。发送辅助方法为 NetworkHelper.sendZombieVillagerProfessionMessage(int zombieId, ExtendedZombieVillager properties, EntityPlayer target)(network/NetworkHelper.java:101)。

MessageVillageGuard (ID 1)

构造器当前只传 entityID(network/MessageVillageGuard.java:21-25):

public MessageVillageGuard(int entityID) {
    this.entityID = entityID;
    //this.profession = profession;
    //this.career = career;
}

其 getProfession() / getCareer() 访问器被整段注释掉(:33-42),字段 profession / career 的赋值亦被注释。因此该消息当前只携带一个 int。

SToCMessage (ID 2)

位于 prismarine/guardian/particle/,配套 IParticleFactory 与 MobAppearance。载荷为不透明的 byte[](prismarine/guardian/particle/SToCMessage.java:12):

方法 行 说明
SToCMessage(byte[] dataToSet) :25 以字节数组构造
getData() :67 取回原始字节
toBytes(ByteBuf) / fromBytes(ByteBuf) :42 / :60 序列化

因此其具体粒子参数在传输层不可读,用于 Guardian 的尖刺/射线粒子特效表现(MobAppearance 负责生成与摆放)。

MessageModernVillagerSkin (ID 3)

载荷最丰富的消息,构造器一次携带 6 个 int(network/MessageModernVillagerSkin.java:21):

字段 访问器 行
entityID getEntityID() :44
profession getProfession() :42
career getCareer() :43
biomeType getBiomeType() :45
professionLevel getProfessionLevel() :46
skinTone getSkinTone() :47

这 6 个参数正是本 mod 模块化村民皮肤系统的输入:职业、职业层级、生成群系类型、职业等级、肤色——与 README.md 描述的"分层 JE 1.14 皮肤"(外层服饰按职业、内衬按群系、肤色按群系属性)一一对应。

处理器位置

处理器 文件
ZombieVillagerProfessionHandler network/NetworkHelper.java:134-137
VillageGuardHandler network/NetworkHelper.java:189-192
ModernVillagerSkinHandler network/NetworkHelper.java:63-66
PacketHandlerClient prismarine/guardian/particle/PacketHandlerClient.java

相关条目