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

见 TC4 Transformer。

相关配置

general.saved_link 分组:enable、saveCompleteLink、debug (见 Configuration Handler)。

相关条目

源码

  • src/main/java/net/glease/tc4tweak/modules/visrelay/SavedLinkHandler.java
  • src/main/java/net/glease/tc4tweak/modules/visrelay/SetParentHelper.java