SGCraft

[!INFO] Git Commit: 3809fc0 | Updated: 2026-10-02

SGCraft(模组内自称 SG Craft)是 Greg Ewing 为 Minecraft 1.7.10 撰写的星际之门模组,是 Stargate 方块门这一机制的原始实现。整个模组围绕一个概念:玩家用 硅岩 供能,在底座上输入 7 或 9 位符号地址,拨通后即可在同一或不同维度之间传送实体。地址由区块坐标与维度经哈希交织编码而成(见 星门地址),因此地址是位置的确定性函数,不存在"手动注册"这一步。

身份字符串(与目录名 / 显示名均不同)

项 值 来源
modid SGCraft(大写 S、G、C) Info.java:6,经 @Mod(modid = Info.modID) 传入(SGCraft.java:62)
显示名 SG Craft(有空格) Info.java:5
注册域(方块 / 物品) gcewing_sg SGCraft.java:105 显式覆写 blockDomain / itemDomain
资源域(贴图 / 语言) sgcraft BaseMod.java:88-91,assetKey = modID.toLowerCase()
目录名 SGCraft python3 os.listdir('/Users/evlos/a/mirror') 实测
jar 名 无 customArchiveBaseName 该键在 gradle.properties:199 被注释掉(# customArchiveBaseName =),Gradle Convention 因此回落到 modId,产物为 SGCraft-<version>.jar
FML coremod 无 全仓库仅 SGCraft.java:61 一处 @Mod 注解类,且是普通 @Mod 而非 @Mod(containerMod = true);grep -rn 'containerMod' src/ 命中 0 次

三个域互不相同是本模组最容易踩的坑:游戏中方块与物品的真实名字是 gcewing_sg:stargateBase,但资源(贴图、语言文件、伤害来源)用的是 sgcraft 与 gcewing_sg 混用——死亡信息 death.attack.sgcraft:transient 用 sgcraft,而语言键 tile.gcewing_sg:stargateBase.name 用 gcewing_sg。所以查资源时用 sgcraft,查注册名时用 gcewing_sg。

版本与 MC 版本

证据 值 来源
版本门 ① minecraftVersion 1.7.10 gradle.properties:24
版本门 ② forgeVersion 10.13.4.1614 gradle.properties:27
版本门 ③ FML 加载器 cpw.mods.fml 源码中 57 处 import,无任何 net.neoforged / net.fabricmc

三种形式全部命中。tools/version_gate.py 判定 ok / 1.7.10。本仓库是完整的 Gradle 源码工程(RetroFuturaGradle + gtnhconvention 插件),不存在"decompiled jar 作为记录来源"的例外情形。

引用的 commit 是 3809fc0a4ffbb4c682ff7d0747fb9e77d1356afa(git cat-file -t 返回 commit,已核实),提交标题 “Disable SG chunk data if ore gen config is not enable (#28)”。

不采用 git describe 的原因:本仓库的唯一 tag 是 1.4.13-GTNH,git describe --tags 因此返回 1.4.13-GTNH。这个串看起来像 Minecraft 版本,其实既不是 MC 版本也不是 mod 版本(mod 版本由 Gradle Convention 从 git 描述生成,gradle.properties 中没有 modVersion 键)。按 GOAL 规定不以 tag 作为版本门,改用 minecraftVersion / forgeVersion / FML import 三项硬证据。

语言与源码构成

项 值
源码语言 纯 Java,177 个 .java,0 .scala / .kt
@Mod 注解类 1 个(gcewing.sg.SGCraft,SGCraft.java:61-67)
语言文件 de_DE.lang 30 键、en_US.lang 33 键、zh_CN.lang 31 键
资源域目录 assets/sgcraft/(含 lang/、textures/、sounds.json、8 个 smeg 自定义模型)

@Mod 只有 1 个,不存在同名类需要按内容区分的情况。

依赖关系

硬依赖(写在 @Mod(dependencies) 里)

模组 声明 来源
OpenComputers after:OpenComputers SGCraft.java:65
GTNHLib required-after:gtnhlib@[0.2.4,) SGCraft.java:65

required-after 意味着 GTNHLib 缺失时 SGCraft 不会加载(版本需 ≥ 0.2.4)。OpenComputers 虽在同一字符串里,但前缀是 after 而非 required-after,因此属软依赖——缺失时 SGCraft 照常加载,只是不注册任何 OC 内容。gradle.properties 的 dependencies.gradle 中三个条目(IC2、OpenComputers、GTNHLib)均为 api,CoFH Core / Mystcraft / ComputerCraft 为 compileOnly(仅编译期引用)。

软依赖(运行期 integrateWithMod 检测)

模组 子系统 缺失后果 来源
IC2 IC2Integration 无 IC2 能量单元与电容 SGCraft.java:119
CoFH Core RFIntegration 无 RF 能量单元 SGCraft.java:120
Thermal Expansion TXIntegration RF 单元改用兜底配方 SGCraft.java:121
ComputerCraft CCIntegration 无 CC 接口方块 SGCraft.java:122
OpenComputers OCIntegration 无 OC 接口方块与无线转发 SGCraft.java:123
Mystcraft MystcraftIntegration 跨维度传送不发送 age 数据 SGCraft.java:124-126

6 个子系统实例在 preInit 中一次性创建(SGCraft.java:119-126),随后由 BaseMod 统一驱动 preInit / configure / registerBlocks / registerItems / registerWorldGenerators / registerContainers / registerEntities / registerVillagers(BaseMod.java:120-131),以及 postInit 阶段的 registerRecipes / registerOther(BaseMod.java:141-146)。方块在 preInit 注册、配方在 postInit 注册,这个阶段差对排查"方块存在但无配方"很关键。

注册内容统计(仅计活注册)

类别 数量 说明
方块 9 5 个核心 + 4 个随软依赖条件注册
物品 8 7 个核心 + 1 个条件物品
TileEntity 7 均在方块构造函数内注册,不是走 registerTileEntities() 钩子
实体 1 IrisEntity
村民 1 Tok’ra,但交易处理器是空方法
容器 / 界面 5 / 5 见 GUI Screens
世界生成器 1 + 1 结构组件 矿石生成器 + 沙漠金字塔结构组件
矿辞 3 oreNaquadah、naquadah、ingotNaquadahAlloy
配方 最多 20 随环境组合变化,见 Integration Block Recipes
配置键 36 35 个带类型 + 1 个自动分配
网络消息 2 见 Packet Channel
创造栏 1 gcewing_sg:sgcraft,图标为星门底座的 ItemBlock

三处容易误判的地方

  1. registerTileEntities() 是个空钩子。 BaseMod 在子系统循环里调用它(BaseMod.java:124),但 SGCraft 与 6 个集成类都没有覆写它。7 个 TileEntity 全部由各自方块的构造函数经 BaseBlock 内部的 GameRegistry.registerTileEntity 注册——方块类名不是注册,构造函数才是。

  2. Tok’ra 村民没有任何交易。 SGCraft.registerVillagers 确实注册了村民与交易处理器(SGCraft.java:344-348),但 SGTradeHandler.manipulateTradesForVillager 的方法体是空的。该类存在且被注册,不是死代码,但功能上等于一个换皮的村民。

  3. CC 侧没有网络包转发。 SGInterfaceTE.rebroadcastNetworkPacket 是空方法体(tileentities/SGInterfaceTE.java:33),只有 OCInterfaceTE 覆写了它。CC 接口方块也没有 GUI。这两点都是模组的既定设计,此处按现状记录。

方块列表

物品列表

TileEntity 列表

  • SGBaseTE - 地址、拨号状态机、能量、传送、虹膜、伪装
  • DHDTE - 4 槽燃料仓与自动连接逻辑

多方块结构列表

  • Star Gate - 5×5 竖直外框 + 1 底座,图案由底座方块自行校验

实体列表

  • Stargate Iris - 虹膜升级的碰撞载体,开着时不参与碰撞

集成列表

世界生成列表

封包列表

  • Packet Channel - 通道名 SGCraft,2 条客户端到服务端消息

配置项列表

  • Configuration - 36 个键,7 个类别,附逐项读取点
  • Stargate Address - 36 进制、7 或 9 位、±139 967 区块的地址编码方案

配方列表

界面列表

  • GUI Screens - 5 个 GUI 枚举值的容器、界面、尺寸与触发方块