You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minecraft Fabric 1.20现有方块属性修改方法求助

Minecraft Fabric 1.20+ 修改现有方块属性方案

针对1.20+版本,以下是几种可行的修改现有方块属性的方法:

  • 替换注册表中的方块实例
    直接创建带有修改后属性的方块,替换原版注册表中的对应条目。代码示例:

    @Override
    public void onInitialize() {
        // 获取原版石头方块
        Identifier stoneId = new Identifier("minecraft:stone");
        Block originalStone = Registry.BLOCK.get(stoneId);
        // 基于原版设置修改硬度和抗性
        BlockSettings newSettings = originalStone.getSettings().strength(8.0f, 1000.0f);
        // 创建新方块实例
        Block modifiedStone = new Block(newSettings);
        // 替换注册表中的方块
        Registry.register(Registry.BLOCK, stoneId, modifiedStone);
    }
    

    注意要在Fabric的初始化阶段执行,或者通过RegistryEvents.MODIFY事件监听,确保在注册表加载完成后替换,避免与其他Mod冲突。

  • 用Mixin修改方块类的初始化逻辑
    如果需要深度修改方块的行为或属性,Mixin是更合适的方案。比如修改原版石头的默认设置:

    @Mixin(StoneBlock.class)
    public abstract class StoneBlockMixin extends Block {
        public StoneBlockMixin(BlockSettings settings) {
            super(settings);
        }
    
        @Inject(method = "<init>*", at = @At("TAIL"))
        private void adjustStoneProperties(BlockSettings settings, CallbackInfo ci) {
            // 修改硬度、挖掘等级等属性
            settings.strength(8.0f).requiresTool();
        }
    }
    

    这种方式无需替换整个方块实例,直接修改原版类的初始化逻辑,兼容性更好,适合修改方块的固有行为。

  • 修改方块状态的属性值
    如果仅需调整方块状态的特定属性(如亮度、透明度),可以通过修改方块状态的默认值实现:

    @SubscribeEvent
    public void onBlockStateLoad(BlockStateLoadEvent event) {
        BlockState state = event.getState();
        if (state.isOf(Blocks.STONE)) {
            // 设置石头的亮度为10
            event.setState(state.with(BlockStateProperties.LIGHT_LEVEL, 10));
        }
    }
    

    注册这个事件监听后,所有加载的石头方块状态都会被修改亮度值,适合针对状态属性的调整。

内容的提问来源于stack exchange,提问作者Vladimir Dergachev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 00:21:06