Minecraft 1.17.1 Fabric模组cube_column模型axis属性识别失败问题
问题根源
你只完成了资源端的blockstate、模型配置,Java端的自定义方块类没有注册Axis状态属性,报错中的「Unknown blockstate property: 'axis'」已经明确指向该问题,Minecraft不知道你这个方块存在axis状态属性,导致blockstate里的所有变体配置全部匹配不上。你提供的blockstate、模型文件配置均无语法错误,不需要修改,只要完成下述Java端修改即可。
修复步骤
1. 在方块类中声明并注册Axis属性
首先确保你的自定义方块类实现了Axis属性的注册逻辑,以Forge 1.17.1开发环境为例,核心代码如下:
// 导入必要类 import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.core.Direction; public class StonePillarBlock extends Block { // 复用原版自带的Axis枚举属性 public static final EnumProperty<Direction.Axis> AXIS = BlockStateProperties.AXIS; public StonePillarBlock(Properties properties) { super(properties); // 注册默认方块状态,默认沿Y轴放置 this.registerDefaultState(this.stateDefinition.any().setValue(AXIS, Direction.Axis.Y)); } @Override protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) { // 将AXIS属性加入方块的状态定义列表 builder.add(AXIS); } // 可选:实现放置方块时根据玩家点击面自动对应轴向的逻辑 @Override public BlockState getStateForPlacement(BlockPlaceContext context) { return this.defaultBlockState().setValue(AXIS, context.getClickedFace().getAxis()); } }
2. 确认方块注册使用自定义类
检查你的方块注册代码,不要直接用原版Block类实例化,替换为你上面编写的带Axis属性的自定义类:
// 错误写法,无Axis属性 // public static final RegistryObject<Block> STONE_PILLAR = BLOCKS.register("stone_pillar", () -> new Block(BlockBehaviour.Properties.of(Material.STONE).strength(2.0F))); // 正确写法 public static final RegistryObject<Block> STONE_PILLAR = BLOCKS.register("stone_pillar", () -> new StonePillarBlock(BlockBehaviour.Properties.of(Material.STONE).strength(2.0F)));
3. 验证
重新构建模组启动游戏即可,此时游戏已经能识别该方块的axis属性,对应三个方向的模型都会正常加载渲染。
内容的提问来源于stack exchange,提问作者Pulsar
相关产品推荐
相关产品推荐

