VisRelay 模块
基本信息
net.glease.tc4tweak.modules.visrelay —— 可视化网络(VisNet)的中继节点处理:
**保存链接(saved link)**与父子关系设置。
2 个类
| 类 | 职责 |
|---|---|
SavedLinkHandler |
链接的判定、NBT 读写 |
SetParentHelper |
直接设置父子关系 |
SavedLinkHandler
| 方法 | 行 | 说明 |
|---|---|---|
processSavedLink(ITileVisNode) |
45 | 处理已保存链接,返回 boolean |
readFromNBT(TileVisNode, NBTTagCompound) |
118 | 返回 List<ChunkCoordinates> |
writeToNBT(TileVisNode, NBTTagCompound) |
134 | — |
内部有匿名/内部类返回 returnValue()(第 35 行)—— 供 processSavedLink
延迟求值。
SetParentHelper 的反射
cache = (ArrayList<WorldCoordinates>) FieldUtils.getField(
VisNetHandler.class, "cache", true).get(null);
nearbyNodes = (HashMap<WorldCoordinates, ArrayList<WeakReference<TileVisNode>>>) FieldUtils.getField(
VisNetHandler.class, "nearbyNodes", true).get(null);
强转取 Thaumcraft VisNetHandler 的两个私有静态字段:
cache→ArrayList<WorldCoordinates>nearbyNodes→HashMap<WorldCoordinates, ArrayList<WeakReference<TileVisNode>>>
nearbyNodes 用 WeakReference 包装节点 —— 手动改这个结构必须保持 WeakReference
语义,否则会造成节点无法回收或误回收。
ASM 侧接线
| 目标类 | Visitor |
|---|---|
thaumcraft.api.visnet.VisNetHandler |
VisNetHandlerVisitor |
thaumcraft.api.visnet.TileVisNode |
TileVisNodeVisitor |
thaumcraft.common.tiles.TileVisRelay |
TileVisRelayVisitor |
相关配置
general.saved_link 分组:enable、saveCompleteLink、debug
(见 Configuration Handler)。
相关条目
源码
src/main/java/net/glease/tc4tweak/modules/visrelay/SavedLinkHandler.javasrc/main/java/net/glease/tc4tweak/modules/visrelay/SetParentHelper.java