Eternal Singularity

[!INFO] Git Commit: 7f2cb7a | Updated: 2026-10-01(回源码审计)

modid:eternalsingularity(来自 Reference.java:5 public static final String MOD_ID = "eternalsingularity";, 作为实参传入 EternalSingularityMod.java:26 的 @Mod(modid = MOD_ID, ...)) 显示名: Eternal Singularity(Reference.java:6) 接受版本: acceptedMinecraftVersions = "[1.7.10]"(Reference.java:8) mcmod.info 描述: A Mod that Adds an Eternal Singularity! (That Works as a Singularity Binder) 作者: RCXcrafter、WanionCane、Wealthyturtle

一个内容包式小模组(共 8 个 .java 文件)。 它不产奇点,而是把 Avaritia 无限催化剂配方里散落的各类奇点 抽走并聚合成一个配方,产出「永恒奇点」—— 本质是个奇点合成器 (Singularity Binder)。

内容清单

类型 数量 说明
方块 0 无 block/ 资源目录,无 registerBlock
物品 2 永恒奇点(条件注册的复合奇点 ×16 meta)
实体 0(自有) 掉落物用 Avaritia 的 EntityImmortalItem,非自有
维度 / 群系 / 世界生成 0 完全不涉及

唯一的创造栏 CreativeTabs(EternalSingularityMod.java:38-45) 以 Eternal Singularity / 永恒奇点 为名,图标取 EternalSingularityItem.instance。

物品列表

配方机制

配置项

共 3 项,全部在 general category,配置对象由 event.getSuggestedConfigurationFile() 决定(EternalSingularityMod.java:50):

键 类型 默认值 阶段
classNameList 字符串列表 4 个奇点物品全限定类名 preInit
useCompoundSingularities 布尔 动态:奇点数 > 81 时为 true,且此时不可关闭 postInit
easyMode 布尔 false postInit

脚本接口

依赖

@Mod(dependencies = ...)(EternalSingularityMod.java:30)原文:

required-after:Avaritia;required-after:wanionlib@[1.7.10-1.3,);
after:thermsingul;after:universalsingularities;after:aobdsingularities;
required-after:gtnhlib@[0.8.32,)
依赖 强度 代码中的用途
Avaritia required-after Grinder、ExtremeCraftingManager、Config.craftingOnly、EntityImmortalItem、LudicrousItems
wanionlib [1.7.10-1.3,) required-after MineTweakerHelper.toStack()(脚本转换)
gtnhlib [0.8.32,) required-after UniversiumShader / ShaderProgram(EternalItemRenderer)
thermsingul after(软) ThermalSingularityItem,奇点来源之一
universalsingularities after(软) UniversalSingularityItem,奇点来源之一
aobdsingularities after(软) AOBDItemSingularity,奇点来源之一
MineTweaker3 非声明依赖 仅 Loader.isModLoaded 运行期判断(CommonProxy.java:56)

已知源码问题

  • 配方可能静默不存在:postInit 在 classSet.isEmpty() || craftingOnly 时直接 return 且不打日志(CommonProxy.java:67-70)。 此时永恒奇点物品已注册(在 preInit)却无任何获取途径。
  • 复合模式可合成性缺口:aboveTheLimit 阈值为 奇点 > 81 (行 84),但 16 档复合奇点全部有配方需要 奇点 >= 136。 奇点数落在 82–135 时复合模式被强制开启,聚合配方却要求 尚无获取途径的档位 → 永恒奇点不可合成。源码无回退。
  • easyMode 注释与实现不符:配置注释称「每 9 个奇点多得 1 个」, 实际代码是固定产出 16 个(CommonProxy.java:101, clamp_int(compoundMax=16, 1, 64))。以代码为准。
  • 脚本 API 可能 NPE:EternalRecipeTweaker 在 preInit 就注册, 但 eternalSingularityRecipe 到 postInit 才赋值; 一旦早退则该字段为 null,Add.apply()(EternalRecipeTweaker.java:48) 对 null 调 getInput() 抛 NPE,源码无判空。
  • 两个 Configuration 实例:preInit(行 39)与 postInit(行 82) 各 new 一次同一个 configFile,非同一对象,依赖磁盘落盘传递。
  • clamp_int 冗余:MathHelper.clamp_int(i, 0, 64)(行 109)与 clamp_int(compoundMax, 1, 64)(行 101)的入参恒在区间内,clamp 永不改变取值。
  • @SideOnly(Side.CLIENT) 误标:CompoundSingularityItem.getSubItems (行 48-49)是原版 Item 的通用方法(服务端也会调用),该注解在此语义不成立。
  • getOverrideKey() 返回 null:EternalRecipeTweaker 的 Add / Remove 均如此(行 72-74、118-120),不兼容 MineTweaker 的 override 机制。

未被采纳的线索(勿误记为物品)

  • 两个 .lang 文件中 //Unused Combined Singularities 段落下的 60 余条名字(Awesome / Cosmic / Impossible / Supercalifragilistic 等) 全部是注释(行首 //),且没有对应贴图、没有对应 meta。 getSubItems 只枚举 0–15(CompoundSingularityItem.java:50), 资源目录也只有 combined_singularity_0..15。这些名字不是可用物品。