☰
MCreator 方块基础类型(Block Base)完全指南:参数禁用机制与默认值约定
2026/10/16 17:24:22 网站建设 项目流程
  • 低代码
  • 代码生成
  • 桌面应用
  • 游戏开发

【免费下载链接】MCreator

MCreator is an open-source software used to make Minecraft Java Edition mods, Minecraft Bedrock Edition Add-Ons, resource packs, and data packs using an intuitive easy-to-learn interface or with an integrated code editor. It is used worldwide by Minecraft players, aspiring mod developers, for education, online classes, and STEM workshops.

项目地址:https://gitcode.com/gh_mirrors/mc/MCreator
点击查看免费下载

本篇指南讲解 MCreator 方块编辑器中"基础方块(Block base)"参数的设计动机与正确用法。该参数决定自定义方块在代码层面继承哪个原版方块类(如StairBlock、SlabBlock、DoorBlock),并会据此自动禁用一批与之冲突的编辑参数。读完本文,你将理解为什么选择基础方块后部分参数变灰、各基础类型的特性差异,以及如何遵循"默认基础方块"约定避免生成无效代码。

什么是基础方块参数

在 MCreator 的方块(Block)编辑界面中,"基础方块"是一个可选项,位于方块编辑器的"基础方块"(block base panel)区块内。它允许创作者从以下 14 种原版基础类型中选择一种,作为自定义方块在代码层的继承父类:

Stairs(楼梯)、Slab(台阶)、Fence(栅栏)、Wall(墙)、Leaves(树叶)、TrapDoor(活板门)、Pane(玻璃板)、Door(门)、FenceGate(栅栏门)、EndRod(末地烛)、PressurePlate(压力板)、Button(按钮)、FlowerPot(花盆)、Sign(告示牌)、HangingSign(悬挂告示牌)

这些选项定义在数据模型类 Block.java 的@LimitedOptions注解中,UI 端通过 BlockGUI.java 读取,并在下拉框中合并了第一个特殊选项"Default basic block"(默认基础方块,即不继承任何基础类型)。

对应的帮助文档位于 default/block/base.md(简体中文版本见 zh_CN/block/base.md,捷克语版本见 cs_CZ/block/base.md),它给出了两条核心告诫:

  1. 如果使用了基础方块,某些参数可能会被禁用,或者因为基础方块要求它们保持基础方块默认值而无法正常工作;
  2. 仅在你完全确定需要的情况下才使用此参数,大多数方块应保持"默认基础方块"(即不使用任何基础类型)。

为什么选择基础方块会禁用一批参数

禁用逻辑的源码依据

当你切换基础方块时,BlockGUI.java 的blockBase下拉框监听器会立即执行一批字段禁用/重置操作。以下参数在选择了非默认基础方块后全部被禁用:

被禁用的参数原因
渲染类型(renderType)渲染方式由基础方块几何结构决定,不再允许自定义
禁用偏移(disableOffset)偏移行为由基础方块自身的模型/状态逻辑接管
边界盒(boundingBoxList)碰撞箱必须与基础方块的形状语义一致
旋转模式(rotationMode)朝向/旋转由基础方块自带的状态属性(如facing、half)驱动
是否可含水(isWaterloggable)是否含水由基础方块的状态属性waterlogged决定
是否受重力(hasGravity)重力行为与基础方块类冲突,选择后被强制设为关闭

同时,代码会执行一系列强制重置(仅在新建非编辑模式下自动执行,避免破坏已保存数据):旋转模式复位为"无"、渲染类型复位为单纹理、含水与重力强制关闭、非碰撞方块关闭、推入反应(reactionToPushing)复位为NORMAL、可燃性关闭等。

各基础类型的专属参数面板

部分基础方块还带有专属参数卡片(通过CardLayout动态切换,见 BlockGUI.java):

  • Door / TrapDoor / PressurePlate / Button:需要额外的blockSetType(方块组类型),可选OAK、STONE、IRON,定义于 Block.java,并标注了@NonNullIf(非空校验:选中这些基础类型时必须提供);
  • FlowerPot(花盆):需要指定pottedPlant(盆栽植物),且自动关闭方块物品、把硬度/抗性归零、音效设为石头、推入反应设为DESTROY;
  • Sign / HangingSign(告示牌):需要提供告示牌实体纹理(signEntityTexture),悬挂告示牌还需额外的 GUI 纹理(signGUITexture),并禁用物品栏(hasInventory);
  • Leaves(树叶):强制透明类型为SOLID、推入反应为DESTROY、可燃、加入"装饰品"创造模式标签,并自动启用透明度;
  • Pane / Stairs / Slab:强制透明类型分别为CUTOUT_MIPPED/ 相应默认值,并设置对应创造模式标签。

与非基础方块冲突的参数联动

选择基础方块后,部分与状态属性相关的参数会被隐藏或由基础方块接管。例如 BlockGUI.java 中的nonUserProvidedProperties()方法会把该基础类型的预置状态属性从用户可编辑列表中剔除——这些属性由基础方块强制提供,用户无法修改其默认值。这正好印证了文档中"参数被禁用或无法正常工作"的说法:它们被基础方块的默认状态值锁定。

基础方块如何映射为原版方块类

在代码生成阶段,模板 block/block.java.ftl 中的getBlockClass函数把所选基础类型映射为具体继承类:

基础方块生成的继承类
StairsStairBlock
PaneIronBarsBlock
SignStandingSignBlock
HangingSignCeilingHangingSignBlock
其余类型对应原版类名加Block(如SlabBlock、DoorBlock、LeavesBlock…)

构造函数也会按类型分支传入不同的原版构造参数(见 block.java.ftl):

  • Stairs:super(Blocks.AIR.defaultBlockState(), ...);
  • Door/TrapDoor/PressurePlate:super(BlockSetType.XXX, ...);
  • Button:super(BlockSetType.XXX, 30 或 20, ...)(OAK为 30 tick,其余为 20 tick);
  • FenceGate:super(WoodType.OAK, ...);
  • FlowerPot:super(() -> (FlowerPotBlock) Blocks.FLOWER_POT, () -> 盆栽方块, ...)并注册到原版花盆的addPlant;
  • Sign/HangingSign:传入自定义的WoodType。

此外,模板还会针对特定基础类型补充行为特性(block.java.ftl):

  • FenceGate、PressurePlate、Fence、Wall、Sign、HangingSign添加.forceSolidOn();
  • EndRod添加.forceSolidOff();
  • Leaves添加.isSuffocating(→false)和.isViewBlocking(→false),模拟原版树叶的遮挡行为。

基础方块与方块状态属性(Block States)的交互

各基础类型的预置状态属性由生成器配置定义。在两个支持 NeoForge 的生成器中可以找到同一份映射表:

  • block.definition.yaml(generator-1.21.1)
  • block.definition.yaml(generator-26.3.x)
基础方块预置状态属性
Stairsfacing, half, shape, waterlogged
Slabtype, waterlogged
Fencenorth, south, west, east, waterlogged
Wallup, north, south, west, east, waterlogged
Leavesdistance, persistent, waterlogged
TrapDoorfacing, half, open, powered, waterlogged
Panenorth, south, west, east, waterlogged
Doorfacing, half, hinge, open, powered
FenceGatefacing, in_wall, open, powered
EndRodfacing
PressurePlatepowered
Buttonfacing, face, powered
Signfacing, rotation, waterlogged(含站立与墙壁告示牌属性)
HangingSignattached, facing, rotation, waterlogged(含天花板与墙壁悬挂告示牌属性)

这些属性在 UI 端由 BlockStatePropertyUtils.java 的getBlockBaseProperties()方法读取,它直接从生成器的block_base_properties配置解析并缓存。选中基础方块后,该列表中的属性会被视为"非用户提供属性"而移出可编辑区域,从而保证与基础方块的行为一致。

另外要注意:选择基础方块会使自定义方块状态(block states)列表失效。数据模型中 Block.java 的supportsBlockStates()明确返回:只有当blockBase为空时方块才支持自定义状态,而 BlockGUI.java 也据此禁用状态编辑 UI。因此,需要自定义状态属性(如自定义facing之外的枚举)时,请保持"默认基础方块"。

数据模型中的联动约束

在 Block.java 中可以看到基础方块与其他字段的强约束关系:

  • blockSetType对 Door、TrapDoor、PressurePlate、Button 为必填;
  • pottedPlant对 FlowerPot 为必填;
  • signEntityTexture对 Sign、HangingSign 为必填;
  • signGUITexture对 HangingSign 为必填。

这些约束通过@NonNullIf注解实现,保存时如果缺少必填字段会收到校验错误提示。

基础方块还会影响其他行为逻辑:

  • renderType()(Block.java):除FlowerPot外,任何基础方块都会把渲染类型强制返回-1,即完全由基础方块类决定渲染;
  • isFullCube()(Block.java):所有基础类型都被判定为非完整立方体,从而正确参与遮挡剔除与碰撞计算;
  • isDoubleBlock():Door被识别为双格方块(Block.java);
  • getDefaultDrop():FlowerPot的掉落物强制为盆栽植物(Block.java);
  • Leaves的掉落支持精准采集与剪刀(Block.java)。

使用建议与最佳实践

结合原文档告诫与源码实现,可以总结出以下实践准则:

  1. 默认保持"Default basic block":绝大多数自定义方块(装饰方块、矿石、自定义功能的方块)并不需要继承原版基础类,留空即可获得最大自由度——所有参数可用、支持自定义方块状态。
  2. 仅在需要原版方块交互语义时选用:例如制作自定义木材需要楼梯/台阶/栅栏配套,或需要真正的门、压力板、按钮等红石交互行为时,才选择对应基础类型。
  3. 接受参数被接管的事实:选择基础方块后,渲染类型、旋转模式、边界盒、含水、重力等参数会被禁用或锁定为默认值——这是为保证基础方块状态属性正确性的必要代价,不是软件缺陷。
  4. 留意必填的附属字段:选择 Door/TrapDoor/PressurePlate/Button 时记得配置 blockSetType;选择 FlowerPot 时记得配置盆栽;选择告示牌时记得准备实体纹理。
  5. 避免叠加使用:基础方块会占用预置状态属性(如facing、waterlogged),因此不能与自定义状态属性叠加;需要自定义状态的方块必须放弃基础方块。

小结

MCreator 的"基础方块"参数是一把双刃剑:它让你以极低成本复用原版方块类的完整行为(红石、含水、碰撞、渲染),但代价是让出一批参数的控制权,并把状态属性锁定在基础方块的默认约定上。理解 block.definition.yaml 中的属性映射、block.java.ftl 中的类继承逻辑,以及 BlockGUI.java 中的联动禁用规则,就能在方块创作时做出正确取舍——这也是原文档那句"仅在你完全确定需要的情况下才使用此参数"背后的全部工程理由。

  • 低代码
  • 代码生成
  • 桌面应用
  • 游戏开发

【免费下载链接】MCreator

MCreator is an open-source software used to make Minecraft Java Edition mods, Minecraft Bedrock Edition Add-Ons, resource packs, and data packs using an intuitive easy-to-learn interface or with an integrated code editor. It is used worldwide by Minecraft players, aspiring mod developers, for education, online classes, and STEM workshops.

项目地址:https://gitcode.com/gh_mirrors/mc/MCreator
点击查看免费下载

相关推荐

上一篇:如何用开源神器一键修复Windows运行库问题?
下一篇:5步快速掌握OpenRocket:免费开源火箭仿真软件从安装到实战

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询