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 |
三处容易误判的地方
-
registerTileEntities()是个空钩子。BaseMod在子系统循环里调用它(BaseMod.java:124),但SGCraft与 6 个集成类都没有覆写它。7 个 TileEntity 全部由各自方块的构造函数经BaseBlock内部的GameRegistry.registerTileEntity注册——方块类名不是注册,构造函数才是。 -
Tok’ra 村民没有任何交易。
SGCraft.registerVillagers确实注册了村民与交易处理器(SGCraft.java:344-348),但SGTradeHandler.manipulateTradesForVillager的方法体是空的。该类存在且被注册,不是死代码,但功能上等于一个换皮的村民。 -
CC 侧没有网络包转发。
SGInterfaceTE.rebroadcastNetworkPacket是空方法体(tileentities/SGInterfaceTE.java:33),只有OCInterfaceTE覆写了它。CC 接口方块也没有 GUI。这两点都是模组的既定设计,此处按现状记录。
方块列表
- Stargate Base - 星门唯一的逻辑核心,自行扫描周边判定是否成立
- Stargate Ring - 外环方块,一个类的 2 个 meta 变体
- Stargate Controller - 供能并可改写地址的 DHD,右键上下分两个界面
- Naquadah Ore - 掉落 2–6 个硅岩,是全链条的起点
- Naquadah Alloy Block - 9 合 1 压缩的合金块
物品列表
- Naquadah - 唯一基础材料,同时是控制器唯一燃料
- Naquadah Alloy - 锭 / 块两种形态的同一材料
- Stargate Crystals - 核心 / 控制两种水晶,合成默认关闭
- Stargate Chevron Upgrade - 把导标数从 7 提到 9
- Stargate Iris Upgrade - 加装可开合虹膜屏障,含前置叶片
- Ridiculously Large Capacitor - 能量单元的合成前置,无电气接口
TileEntity 列表
多方块结构列表
- Star Gate - 5×5 竖直外框 + 1 底座,图案由底座方块自行校验
实体列表
- Stargate Iris - 虹膜升级的碰撞载体,开着时不参与碰撞
集成列表
- Stargate Power Units(IC2 / RF) - 两种电气桥接方块,共用同一套代码与 GUI
- OpenComputers Integration - OC 节点 + 11 个 Lua 回调 + 跨星门无线转发
- ComputerCraft Integration - CC 外设 + 11 个 Lua 方法 + 主线程调用队列
- Thermal Expansion Integration - 只贡献 1 条替代配方
- Mystcraft Integration - 跨维度传送后同步 age 数据
世界生成列表
- Naquadah Ore World Generation - 熔岩下与孤立两种矿脉,默认开启
- Structure Under Desert Pyramid - 给沙漠金字塔加装星门遗迹,默认关闭
封包列表
- Packet Channel - 通道名
SGCraft,2 条客户端到服务端消息
配置项列表
- Configuration - 36 个键,7 个类别,附逐项读取点
- Stargate Address - 36 进制、7 或 9 位、±139 967 区块的地址编码方案
配方列表
- Naquadah Chain - 矿石到合金块的完整材料链
- Stargate Assembly - 4 个结构方块 + 2 种水晶,含逐材料用量统计
- Upgrade Recipes - 导标升级、虹膜叶片、虹膜升级
- Integration Block Recipes - 能量单元与两个接口方块,按环境组合列出
界面列表
- GUI Screens - 5 个 GUI 枚举值的容器、界面、尺寸与触发方块