平台与能力 API

基本信息

属性 值
全局单例 com.sk89q.worldedit.WorldEdit(WorldEdit.getInstance())
平台管理 com.sk89q.worldedit.extension.platform.PlatformManager
平台实现 com.sk89q.worldedit.forge.ForgePlatform(本模组的 1.7.10 实现)
能力枚举 com.sk89q.worldedit.extension.platform.Capability
平台注册点 ForgeWorldEdit.java:162-166(new ForgePlatform(this) 后 getPlatformManager().register(platform))
平台注销点 ForgeWorldEdit.java:189-191(serverStopping)

能力(Capability)

ForgePlatform.getCapabilities() 声明 6 项能力及其偏好(ForgePlatform.java:212-221):

能力 Preference 含义
CONFIGURATION PREFER_OTHERS 提供 LocalConfiguration
WORLDEDIT_CUI NORMAL 支持 CUI 协议
GAME_HOOKS NORMAL 挂接原版游戏事件
PERMISSIONS NORMAL 提供权限体系
USER_COMMANDS NORMAL 提供 ServerInterface(用户指令入口)
WORLD_EDITING PREFERRED 提供世界读写能力

Capability.CONFIGURATION 的持有者被 //we reload 用于取配置并发事件(WorldEditCommands.java:76-78:queryCapability(Capability.CONFIGURATION).getConfiguration())。

/worldedit version 会遍历 Capability.values() 逐个报告由哪个平台提供,无提供者显示 NONE(WorldEditCommands.java:60-65)。

WorldEdit 单例持有的工厂

WorldEdit 实例在静态块中完成初始化(WorldEdit.java:109-113):

  • WorldEditPrefixHandler.register("com.sk89q.worldedit")(log4j 日志前缀,与指令无关)
  • getVersion()
  • BundledBlockData.getInstance() —— 加载方块注册表

对外暴露的工厂(WorldEdit.java):

工厂 用途
getPlatformManager() 平台注册与能力查询
getEventBus() 事件总线
getBlockFactory() 由文本解析 BaseBlock
getItemFactory() 由文本解析 BaseItem
getMaskFactory() 构造掩码
getPatternFactory() 构造图案
getSessionManager() 会话存取
getServer() 转发到 getPlatformManager().getServerInterface()(:848-850)
getLightingScheduler() / setLightingScheduler() 光照调度器

1.7.10 专属的方块/物品解析桥

src/main/resources/com/sk89q/worldedit/world/registry/blocks.json(167,462 字节,172 条记录)把 1.7.10 的数字 ID 映射到 minecraft:xxx 命名空间,每条含 legacyId、id、unlocalizedName、material(后者含 fullCube、opaque、powerSource、liquid、solid、hardness、resistance、slipperiness、grassBlocking、ambientOcclusionLightValue 等 1.7.10 物理属性)。

这是 1.7.10 特有的「数字 ID ↔ 命名空间」桥接,在 1.12+ 的方块状态体系中不存在对应物,属于必须与其它 MC 版本隔离的内容。

平台注册时序

阶段 事件 动作 行
客户端/服务端启动 FMLPreInitializationEvent 建工作目录、读配置、注册 4 个方块变换钩子 ForgeWorldEdit.java:103-137
初始化 FMLInitializationEvent 注册事件总线 + proxy handlers :139-143
服务端启动前 FMLServerAboutToStartEvent RotationMappings.init、填充群系、注册 ForgePlatform、装 ForgeLightingScheduler :150-174
服务端启动 FMLServerStartedEvent 投递 PlatformReadyEvent :194-199
服务端停止 FMLServerStoppingEvent 关闭光照调度器、注销平台 :176-192

serverAboutToStart 开头有一段重入保护:若 platform != null 说明上次没走停止流程,先记 logger.warn("FMLServerStartingEvent occurred when FMLServerStoppingEvent hasn't") 并注销旧平台(ForgeWorldEdit.java:152-157)。

相关条目