Constructable Trigger(构造触发器)
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | structurelib:item.structurelib.constructableTrigger |
| 物品类 | com.gtnewhorizon.structurelib.item.ItemConstructableTrigger |
| 显示名 | Multiblock Structure Hologram Projector |
| 未本地化名称 | item.structurelib.constructableTrigger |
| 最大堆叠 | 64(未显式设置,使用默认) |
| 创意模式标签 | StructureLib |
注册调用为 GameRegistry.registerItem(itemConstructableTrigger = new ItemConstructableTrigger(), itemConstructableTrigger.getUnlocalizedName())。第二个参数传入的是 getUnlocalizedName() 的结果,而该结果已经带有 item. 前缀,因此注册名中会再次出现一次 item.,形成 structurelib:item.structurelib.constructableTrigger。这一重复前缀在 1.7.10 Forge 中确实存在,本仓库其他分类(AkashicTome 的物品白名单)也记录了这一实际 ID。
功能
Constructable Trigger(中文社区常称"全息投影器")是 StructureLib 构造性多方块系统的核心交互物品,物品类本身很薄,所有逻辑都委托给 ConstructableUtility 和 ChannelDataAccessor。
物品承担三项功能:
- 通道配置 GUI:服务端、对空气右键且不潜行时打开
GuiScreenConfigureChannels - 注册表配置 GUI:客户端、潜行且对空气右键时打开 Forge 配置 GUI 的
registries页 - 结构检查 / 提示 / 自动放置:对多方块控制器方块右键时进入
ConstructableUtility.handle()
使用方式
| 操作 | 条件 | 效果 |
|---|---|---|
| 对空气右键 | 服务端(!world.isRemote)且不潜行 |
player.openGui(..., 0, ...) 打开通道配置 GUI |
| 对空气右键 | 客户端(world.isRemote)且潜行 |
StructureLib.instance().proxy().displayConfigGUI("registries") 打开注册表配置 GUI |
| 对控制器方块右键 | onItemUseFirst |
ConstructableUtility.handle(stack, player, world, x, y, z, side) |
前两项的前提是 getMovingObjectPositionFromPlayer(world, player, true) == null,即准星必须指向空气;若指向方块则两项都不触发,只走第三条路径。
构造流程
ConstructableUtility.handle 包裹 startHinting/endHinting,在内部按目标方块实体类型依次尝试解析出 IConstructable:
- 方块实体实现
IConstructableProvider→ 取getConstructable() - 方块实体直接实现
IConstructable→ 直接使用 - 该方块实体类在
IMultiblockInfoContainer中注册过 → 转换出IConstructable
三者都不满足则不触发任何构造逻辑。潜行与否决定走检查提示还是生存自动放置:不潜行时服务端直接返回 true,由客户端生成全息提示;潜行时进入服务端限流与 survivalConstruct 流程。
悬浮提示
不持 Shift 时依次显示(desc.0 无颜色,desc.1–4 为蓝色):
Triggers Constructable InterfaceShows multiblock construction schematic,use on the multiblock controller.(Sneak use on controller to build)Quantity of schematics in item stack affects tier/mode/type
若该物品存在子通道(NBT channels 复合标签非空),再追加一行 Hold [LSHIFT] to display channel data。
持 Left Shift 时改为显示子通道数量与明细:首行为 Contain %d sub channel.,随后每行一个 键: 值,由 ChannelDataAccessor 遍历得出。
相关条目:/sl_channel、多方块构造机制、通道系统。