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(grepNetworkHandler仅命中文件自身定义),因此该类为死代码,其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 |
相关条目
- Guardian - 消息 ID 2 的粒子效果作用对象
- villager skin tones settings - 消息 ID 3 同步的肤色相关配置