因为省略了分析过程的缘故,这里不好展开说明解决办法的推导过程,所以仍然,直接贴出解决办法:
边缘核能系列作者没有提供源代码,所以自己修改代码再编译一遍显然不可能,那么只有一条路了,祭出第二个大杀器——Harmony,不懂 C# 的吧友可以不用看了
,等好心人自制mod发布到工坊给你们订阅就好了。
首先问题的根本是 .GroupingLabel 的值为 null,而该类作为存储的一个建筑没有考虑到这一点(毕竟是1.5更新的),所以我们只需要利用 Harmony 写一个 Postfix 的 patch 修改这个属性的返回结果即可,即,让其不为空。
下面是参考代码,非常简单(只节选关键部分):
Harmony harmonyInstance = new Harmony("xxx.x.x.x.xxx");
harmonyInstance.Patch( original:AccessTools.TypeByName("Rimatomics.Building_storagePool").PropertyGetter("GroupingLabel"),
postfix: new HarmonyMethod(typeof(RimatomicsPatches), nameof(RimatomicsPatches.GroupingLabelPatch)));
public static void GroupingLabelPatch(ref string __result)
{
__result = "GroupPlural".Translate();
}
代码仅供参考,写成这样的形式也是可以的,但是这样你的工程文件就要添加边缘核能DLL的引用:
[HarmonyPatch(typeof(Rimatomics.Building_storagePool))]
public class XXXCLASSPATCH
{
[HarmonyPostfix]
[HarmonyPatch(nameof(Building_storagePool.GroupingLabel), MethodType.Getter)]
public static void xxxxxxPatchName(ref string __result)
{
__result = "GroupPlural".Translate();
}
}
patch 怎么写,见仁见智,效果达成就好,最终实现不报错: