SGBaseTE
基本信息
| 属性 | 值 |
|---|---|
| 类 | gcewing.sg.tileentities.SGBaseTE(tileentities/SGBaseTE.java:91),共 1571 行 |
| 父类 | BaseTileInventory |
| 附着方块 | gcewing_sg:stargateBase(在 SGBaseBlock 构造函数中注册,blocks/SGBaseBlock.java:63) |
| 库存槽数 | 5,全部为伪装槽(tileentities/SGBaseTE.java:118-120) |
| 状态枚举 | gcewing.sg.SGState,6 值(SGState.java:9-16) |
| 虹膜状态枚举 | gcewing.sg.IrisState,4 值(IrisState.java:9-14) |
功能
SGBaseTE 是整个模组的核心:地址计算、拨号状态机、能量消耗、传送、虹膜、伪装渲染、跨区块加载、OC 无线端点挂载全在这里。
地址与拨号
底座首次被服务端加载时(serverUpdate 的 !loaded 分支)计算自己的 homeAddress,失败则写入 addressError(tileentities/SGBaseTE.java:648-659)。地址编码规则见 星门地址。
拨号状态机按 SGState 推进:Idle → Dialling → Transient → Connected → Disconnecting,跨维度时多一个 InterDialling(SGState.java:11-16、tileentities/SGBaseTE.java:679-690)。每个符号先红石解锁、再由能量驱动,锁不住的位数叫"未拨通位数"(undialledDigitsRemaining),Idle 下会继续拨下一位(tileentities/SGBaseTE.java:681-682)。
能量
tickEnergyUsage() 每 tick 从控制器抽能量(tileentities/SGBaseTE.java:674)。energyToOpen 与 energyUsePerTick 不是配置项,而是由 energyPerFuelItem 推导出来的(tileentities/SGBaseTE.java:189-190):
energyToOpen = energyPerFuelItem / gateOpeningsPerFuelItemenergyUsePerTick = energyPerFuelItem / (minutesOpenPerFuelItem * 60 * 20)
因此调整 stargate.energyPerFuelItem 会同时改变单次开启成本与每 tick 消耗。
库存与伪装
5 个槽全部是伪装槽,firstCamouflageSlot = 0、numCamouflageSlots = 5(tileentities/SGBaseTE.java:118-120),对应 GUI 中每格最多放 1 个的 CamouflageSlot(guis/containers/slots/CamouflageSlot.java:13-15)。伪装内容决定导标的角度档位(baseCornerCamouflage(),见 tileentities/SGBaseTE.java:392-394)。
OC 无线端点
serverUpdate 首次加载时,若 SGCraft.ocIntegration != null,会调用 ocIntegration.onSGBaseTEAdded(this) 给底座挂一个 OCWirelessEndpoint(tileentities/SGBaseTE.java:657-658);区块卸载时若该端点存在则 remove()(tileentities/SGBaseTE.java:433-434)。这条链路确实双向连通,不是死代码。
数值
| 项目 | 值 | 配置键 | 来源 |
|---|---|---|---|
| 每件燃料能量 | 96000 | stargate.energyPerFuelItem |
tileentities/SGBaseTE.java:131 |
| 每件燃料可开启次数 | 24 | stargate.gateOpeningsPerFuelItem |
:134 |
| 每件燃料维持分钟 | 80 | stargate.minutesOpenPerFuelItem |
:135 |
| 门保持开启秒数 | 300 | stargate.secondsToStayOpen |
:136 |
| 单向通行 | 关闭 | stargate.oneWayTravel |
:137 |
| 任一端可关闭 | 开启 | stargate.closeFromEitherEnd |
:138 |
| 距离系数倍率 | 1.0 | stargate.distanceFactorMultiplier |
:132 |
| 跨维度系数倍率 | 4.0 | stargate.interDimensionMultiplier |
:133 |
| 区块加载半径 | 1 | options.chunkLoadingRange |
:139 |
| 事件日志 | 关闭 | options.logStargateEvents |
:140 |
| 奇点保留物品 | 关闭 | iris.preserveInventory |
:141 |
| 音效音量 | 1.0 | stargate.soundVolume |
:142 |
| 导标位置可变 | 开启 | stargate.variableChevronPositions |
:143 |
| 半透明渲染 | 开启 | stargate.transparency |
:148 |
| 单次开启能量 | 推导值 4000 | — | :189 |
| 每 tick 能量 | 推导值 1.0 | — | :190 |
| 拨号时间 / 跨维度拨号 | 40 / 10 tick | — | :105-106 |
| 瞬态 / 断开延时 | 20 / 30 tick | — | :108-109 |
baseCornerCamouflage() 取 5 个伪装槽中第 0 号与第 4 号槽的较大等级(tileentities/SGBaseTE.java:1480-1482)。等级判定:槽里是台阶 → 1,是完整立方体 → 2,空或其他 → 0(tileentities/SGBaseTE.java:1484-1494)。
完整 35 个配置键见 配置项。
交互
- 红石输入:解锁待拨符号。
redstoneInput字段记录当前红石状态。 - 红石输出:非
Idle时输出 15(由 Stargate Base 的getWeakPower提供)。 - GUI:见 界面。
- 跨维度传送:
SGLocation记录目标维度与区块坐标,传送后调用MystcraftIntegration.sendAgeData同步 Mystcraft 年龄数据(tileentities/SGBaseTE.java:1107)。
相关条目
- Stargate Base - 宿主方块
- Star Gate 多方块结构
- 星门地址
- Stargate Iris
- OpenComputers 集成 - 无线端点与接口