- 低代码
- 代码生成
- 桌面应用
- 游戏开发
【免费下载链接】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.
本篇指南讲解 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),它给出了两条核心告诫:
- 如果使用了基础方块,某些参数可能会被禁用,或者因为基础方块要求它们保持基础方块默认值而无法正常工作;
- 仅在你完全确定需要的情况下才使用此参数,大多数方块应保持"默认基础方块"(即不使用任何基础类型)。
为什么选择基础方块会禁用一批参数
禁用逻辑的源码依据
当你切换基础方块时,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函数把所选基础类型映射为具体继承类:
| 基础方块 | 生成的继承类 |
|---|---|
| Stairs | StairBlock |
| Pane | IronBarsBlock |
| Sign | StandingSignBlock |
| HangingSign | CeilingHangingSignBlock |
| 其余类型 | 对应原版类名加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)
| 基础方块 | 预置状态属性 |
|---|---|
| Stairs | facing, half, shape, waterlogged |
| Slab | type, waterlogged |
| Fence | north, south, west, east, waterlogged |
| Wall | up, north, south, west, east, waterlogged |
| Leaves | distance, persistent, waterlogged |
| TrapDoor | facing, half, open, powered, waterlogged |
| Pane | north, south, west, east, waterlogged |
| Door | facing, half, hinge, open, powered |
| FenceGate | facing, in_wall, open, powered |
| EndRod | facing |
| PressurePlate | powered |
| Button | facing, face, powered |
| Sign | facing, rotation, waterlogged(含站立与墙壁告示牌属性) |
| HangingSign | attached, 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)。
使用建议与最佳实践
结合原文档告诫与源码实现,可以总结出以下实践准则:
- 默认保持"Default basic block":绝大多数自定义方块(装饰方块、矿石、自定义功能的方块)并不需要继承原版基础类,留空即可获得最大自由度——所有参数可用、支持自定义方块状态。
- 仅在需要原版方块交互语义时选用:例如制作自定义木材需要楼梯/台阶/栅栏配套,或需要真正的门、压力板、按钮等红石交互行为时,才选择对应基础类型。
- 接受参数被接管的事实:选择基础方块后,渲染类型、旋转模式、边界盒、含水、重力等参数会被禁用或锁定为默认值——这是为保证基础方块状态属性正确性的必要代价,不是软件缺陷。
- 留意必填的附属字段:选择 Door/TrapDoor/PressurePlate/Button 时记得配置 blockSetType;选择 FlowerPot 时记得配置盆栽;选择告示牌时记得准备实体纹理。
- 避免叠加使用:基础方块会占用预置状态属性(如
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.
相关推荐
Gel/EdgeDB 数据模型属性(Property)完全指南:类型、基数、约束、默认值与 DDL 操作
Gel/EdgeDB 数据模型属性(Property)完全指南:类型、基数、约束、默认值与 DDL 操作 属性(property)是 Gel(EdgeDB)数据
数据库图数据库关系型数据库MCreator 维度主填充方块(Main Filler Block)选型指南:从默认值到世界生成性能优化
MCreator 维度主填充方块(Main Filler Block)选型指南:从默认值到世界生成性能优化 导读 本文聚焦 MCreator 维度编辑器中的「主
低代码代码生成桌面应用游戏开发TypeScript 泛型(Generics)完全指南:从类型变量到约束与默认值
TypeScript 泛型(Generics)完全指南:从类型变量到约束与默认值 导读 本文以 TypeScript 使用手册(中文版)v2 手册的「类型操纵」
文档教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考