Skip to content

模组开发

Forge 侧可以先按这个顺序看:遗址类型 -> 遗址实例 -> 存档持久化数据 -> 活跃运行态 -> 共鸣结果 -> 回收快照。

已确认的事实

项目 结论
游戏版本 Minecraft 1.20.1
Loader Forge
原版考古刷扫链路 BrushItem.useOn(...)BrushItem.onUseTick(...)BrushableBlockEntity.brush(...)
世界级持久化 ServerLevel.getDataStorage() + DimensionDataStorage.computeIfAbsent(...)
世界保存检查点 LevelEvent.Save
区块辅助持久化 ChunkDataEvent.Load / ChunkDataEvent.Save
活跃区块生命周期 ChunkEvent.Load / ChunkEvent.Unload
玩家交互入口 刷扫链路 + PlayerInteractEvent.RightClickItem / RightClickBlock
玩家长期数据迁移 PlayerEvent.Clone
客户端 tooltip ItemTooltipEvent
客户端区块同步补点 ChunkWatchEvent.Watch / UnWatch

几类核心对象

往下读时,可以先抓住这几类对象:

层级 对象 作用
前期发现定义 CivilizationShellDefinitionEarlyExcavationNodeDefinition 组织环境痕迹、前期节点和耗尽规则
正式遗址类型 SiteTypeDefinition 定义一类遗址的宿主、锚点、激活和运行态参数
正式实例引用 SiteRefDiscoveredSiteRecord 指向一座已写入正式记录的遗址,而不是一种类型
遗址记录主表 SiteLedgerSavedData 保存遗址实例、生命周期和覆盖区块
运行中状态 SiteRuntimeRegistryActiveSiteRuntime 保存当前现场的短生命周期状态
结算结果 ResonanceResultRecoveredRelicSnapshot 把一次现场折叠成可消费、可保存的结果

顺序最好别打乱。类型不是实例,实例不是运行态,运行态也不是回收结果。

四种状态

实现里可以先把状态分成四种:

状态 对应对象 生命周期
遗址记录主表 SiteLedgerSavedData 跟随维度存档
现场运行状态 SiteRuntimeRegistryActiveSiteRuntime 只在现场运行期间存在
玩家长期知识 玩家长期数据 跟随玩家长期进度
物品结算快照 RecoveredRelicSnapshot 跟随物品流转

任何实现问题,本质上都要先回答“这条数据属于哪一层”。答不清这个问题,存档持久化数据、区块缓存、tooltip 和玩家数据就一定会混在一起。

关键问题

主题 主要对象 关键页面
前期发现和正式勘探如何分界 CivilizationShellDefinitionEarlyExcavationNodeDefinitionSiteTypeDefinition Design/SurveyImplementation/Survey
遗址实例如何定位与写入存档持久化数据 SiteLedgerSavedDataSiteRef Design/SurveyImplementation/Survey
激活如何接过这条引用 ActivationServiceActivationAdapterSiteRuntimeBridgeSiteRuntimeRegistry Design/ActivationImplementation/Activation
遗址记录主表、区块缓存、玩家短标记怎样分层 SavedData、chunk data、player persistent data Implementation/CatalogueImplementation/SiteRuntime
共鸣结果如何被消费 ResonanceResolverResonanceResult Design/ResonanceImplementation/Resonance
回收结果如何保存与读取 RecoveredRelicSnapshotRelicTooltipView Design/RecoveryImplementation/Recovery