建筑指导仪 / 强化建筑指导仪

基本信息

属性 值
注册名 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:17 import)

强化版的差异

差异点 普通版 强化版
中心贴图 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 末影珍珠

相关条目