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。
物品列表
- Eternal Singularity 永恒奇点 -
eternalsingularity:eternal_singularity,集齐全部奇点的产物,Avaritia 紫色稀有度 - Compound Singularity 复合奇点 -
eternalsingularity:combined_singularity,条件注册,meta 0–15 对应 16 个名字
配方机制
配置项
共 3 项,全部在 general category,配置对象由
event.getSuggestedConfigurationFile() 决定(EternalSingularityMod.java:50):
| 键 | 类型 | 默认值 | 阶段 |
|---|---|---|---|
classNameList |
字符串列表 | 4 个奇点物品全限定类名 | preInit |
useCompoundSingularities |
布尔 | 动态:奇点数 > 81 时为 true,且此时不可关闭 | postInit |
easyMode |
布尔 | false |
postInit |
- 奇点物品类名单 classNameList - 决定抽取哪些 mod 的奇点
- useCompoundSingularities - 复合模式开关与自动阈值
- easyMode - 聚合配方产出 1 或 16
脚本接口
- CraftTweaker 脚本接口 -
mods.eternalsingularity.add/remove,仅在 MineTweaker3 加载时注册
依赖
@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。这些名字不是可用物品。