建筑指导仪 / 强化建筑指导仪
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | OpenBlocks:guide、OpenBlocks:builder_guide |
| 对应类 | openblocks.common.block.BlockGuide、openblocks.common.block.BlockBuilderGuide |
| TileEntity | 普通版 TileEntityGuide(TileEntityGuide.java:57);强化版 TileEntityBuilderGuide extends TileEntityGuide(TileEntityBuilderGuide.java:21) |
| 材质 | Material.rock(BlockGuide.java:191) |
| 发光等级 | 0.6(BlockGuide.java:192) |
| 朝向模式 | BlockRotationMode.THREE_FOUR_DIRECTIONS(BlockGuide.java:193) |
| 放置模式 | BlockPlacementMode.SURFACE(BlockGuide.java:194) |
| 实心方块 | 否,isOpaqueCube() 返回 false(BlockGuide.java:197-199) |
| 树叶可替换 | 否,canBeReplacedByLeaves 返回 false(BlockGuide.java:234) |
| 可燃 | 否,isFlammable 返回 false(BlockGuide.java:239) |
| 声明位置 | OpenBlocks.java:256(guide)、:259-263(builder_guide) |
强化版继承 BlockGuide(BlockBuilderGuide.java:16),只覆写两个方法;@RegisterBlock 中 textureName = "guide",与普通版共用贴图前缀。
功能
建筑指导仪在客户端渲染一个由玩家用「+ / −」按钮定义的幽灵方块结构,用于辅助照图施工。它不存储方块实体,只存储半轴长度(HalfAxis)数组。
- 交互按钮定义在内嵌接口
IShapeManipulator(BlockGuide.java:42-45),每个按钮对应某个HalfAxis的递增或递减 - 选中框由
getSelectedBoundingBoxFromPool计算(BlockGuide.java:250-251),深度常量SELECTION_BOX_DEPTH = 0.01、P = 1.0/16.0(BlockGuide.java:38、:40) - 客户端通过
onSelected绘制选中框(BlockGuide.java:274),由DrawBlockHighlightEvent驱动(BlockGuide.java:17import)
强化版的差异
| 差异点 | 普通版 | 强化版 |
|---|---|---|
| 中心贴图 | getCenterIconName()(BlockGuide.java:225) |
openblocks:guide_center_ender(BlockBuilderGuide.java:22-24) |
| 按钮是否激活 | 未覆写(恒定激活) | 仅当手持物不是 ItemBlock 时激活(BlockBuilderGuide.java:27-30) |
| 随机刻表现 | 未覆写 randomDisplayTick |
每刻生成烟粒子与青色火焰粒子(BlockBuilderGuide.java:33-39) |
| 客户端渲染通道 | TileEntityGuide 单通道 |
shouldRenderInPass 允许 pass 0 与条件性 pass 1(TileEntityBuilderGuide.java:25-28) |
| 形状边界 | 不限 | canAddCoord 要求三轴中至少一轴偏移 > 1,保证施工者始终可进入(TileEntityBuilderGuide.java:65-68) |
areButtonsActive 返回 false 意味着:强化版手持方块右键时不会触发尺寸按钮,从而可以直接放置方块。
自动成型(仅强化版)
强化版的 TileEntity 实现了 IGuideAnimationTrigger,其自动成型逻辑在 TileEntityBuilderGuide 中,可以核实:
- 进入成型模式:正上方一格放黑曜石即启用(
isInFillMode,TileEntityBuilderGuide.java:110-112) - 生存模式:右键时遍历形状内的坐标,找到第一个存在且为空气的格子,先发
BlockEvent.PlaceEvent事件;事件未被取消才真正放置,放置后扣除 1 个物品并通过 RPC 触发动画(survivalPlaceBlocks,TileEntityBuilderGuide.java:71-108) - 每 tick 最多放 1 个:
--heldItem.stackSize后立即return true(TileEntityBuilderGuide.java:99-100) - 创造模式:
isInFillMode()时直接setBlock铺满全部坐标,不消耗物品(creativeReplaceBlocks,TileEntityBuilderGuide.java:60-62) - 前 gating:
active.get()为 false 时完全不响应(onItemUse,TileEntityBuilderGuide.java:32-53) - 动画:在指导仪与目标格之间画一条 3D 线,每点生成 5 组
portal+blockdust_<id>_<meta>粒子(trigger,TileEntityBuilderGuide.java:119-136)
贴图注册(BlockGuide.java:211-221):openblocks:guide(标记,:213)、中心图标(:214,名称来自 getCenterIconName())、顶/底面 openblocks:guide_top_new(:216)、四侧 openblocks:guide_side_new(:218)。
数值
| 数值名 | 配置项 | 默认值 | 来源 |
|---|---|---|---|
| 红石灵敏度 | guide.redstoneSensitivity |
1 | Config.java:544 |
| 渲染距离平方 | guide.renderDistanceSq |
256 × 256 = 65536 | Config.java:549 |
| 使用高级渲染器 | guide.useAdvancedRenderer |
true | Config.java:554 |
高级渲染器创建失败时回退到 GuideLegacyRenderer 并打 WARN(client/renderer/tileentity/guide/GuideRendererSelector.java:47-50)。另两条回退路径:运行环境根本不支持高级渲染时(GuideRendererSelector.java:41)、配置 useAdvancedRenderer 为 false 时(GuideRendererSelector.java:44),均直接返回旧渲染器。
redstoneSensitivity 的取值语义由源码注释给出:0 = 不敏感,1 = 通电即开,−1 = 反相(Config.java:545)。
交互
| 触发 | 行为 |
|---|---|
| 右键(未手持方块) | 显示尺寸增减按钮,点击后沿对应半轴 +1 / −1 |
| 右键(强化版,手持方块) | 按钮不激活,允许直接放置方块 |
| 中键选取 | ISelectionAware,由 OpenModsLib 处理 |
| 随机刻 | 强化版生成烟 + 青色火焰粒子 |
RPC 接口 openblocks.rpc.IGuideAnimationTrigger 由 OpenModsLib 的 RpcCallDispatcher 注册(OpenBlocks.java:619-622),供客户端驱动结构动画。
合成配方
普通建筑指导仪(Config.java:618-632):
grg
gtg
grg
| 字符 | 物品 |
|---|---|
g |
blockGlass 玻璃 |
t |
Blocks.torch 火把 |
r |
dustRedstone 红石粉 |
强化建筑指导仪(Config.java:633-649):
grg
ete
grg
| 字符 | 物品 |
|---|---|
g |
blockGlass 玻璃 |
t |
Blocks.torch 火把 |
r |
dustRedstone 红石粉 |
e |
Items.ender_pearl 末影珍珠 |
相关条目
- 配置项全表 -
guide分类的 3 个配置项 - 模组 API 与扩展点 -
IGuideAnimationTrigger所在的 RPC 注册表