Skip to content

自定义流体方块 ​

自定义流体方块可以创建类似水或岩浆的液体效果,支持自定义颜色、扩散范围、状态效果等。自定义流体需要成对注册:一个静态流体(水源)和一个动态流体(流动水),二者通过命名规则自动关联。

前置条件

本功能不需要开启实验性玩法。请先阅读 自定义基础方块 了解方块注册流程和 JSON 组件基础。流体方块通常需要配置动画纹理来呈现流动效果。

概述 ​

自定义流体由一对方块组成:

  • 静态流体(水源)— base_block: "liquid",放置后作为液体源头
  • 动态流体(流动水)— base_block: "flowing_liquid",由静态流体扩散产生

引擎通过 flowing_ 前缀自动匹配静态和动态流体,因此二者的命名必须严格遵循规则。

自定义流体继承原版水的大部分特性,包括:与岩浆互动(生成圆石/黑曜石)、玩家进入时的游泳效果、溺水伤害、与海绵互动等。

命名规则 ​

类型命名格式示例
静态流体命名空间:流体名mymod:green_water
动态流体命名空间:flowing_流体名mymod:flowing_green_water

重要

命名必须严格匹配。动态流体的方块名部分必须是静态流体方块名前加上 flowing_ 前缀,否则二者无法正常互转,流体扩散和收集行为都会异常。

netease:liquid 组件 ​

静态流体和动态流体都使用 netease:liquid 组件配置液体属性。部分字段仅对动态流体有效。

键类型默认值说明
liquid_colorarray(int)[255, 255, 255, 255]可选,流体颜色 RGBA,每个分量取值 0~255。透明度仅"精美图像"设置下生效
spread_rangeint8可选,扩散格数(1~8),仅动态流体有效
spread_delayint5可选,每经过该刻数扩散一格(每秒 20 刻),仅动态流体有效
spread_fireboolfalse可选,是否传播火焰(类似岩浆效果)
can_float_boatbooltrue可选,是否能浮起船。动态和静态流体均需设置
bucket_namestring"water_bucket"可选,空桶收集后获得的物品。自定义物品需带完整 ID(含命名空间)
water_splashstring"minecraft:water_splash_particle_manual"可选,实体进入流体时播放的粒子特效
mob_effectsarray(dict)[]可选,实体进入流体时添加的状态效果列表
remove_effectsarray(string)[]可选,实体进入流体时移除的状态效果名称列表

mob_effects 子字段 ​

键类型说明
effect_namestring状态效果名称(如 slowness、poison、wither)
durationint持续时间(秒)
amplifierint效果倍率,比等级小 1(如缓慢 II 的倍率为 1)
show_particlebool是否显示状态效果粒子,默认不显示

提示

如果未配置 netease:liquid 组件,流体的颜色、扩散范围和扩散延迟默认与原版水相同,但无法使船浮起来。建议始终显式配置该组件。

动画纹理 ​

流体方块需要在资源包的 textures/flipbook_textures.json 中配置帧动画,以呈现流动效果。通常需要两套动画:静态水面和流动水面。

json
[
    {
        "flipbook_texture": "textures/blocks/green_water_still",
        "atlas_tile": "mymod:green_water_still",
        "ticks_per_frame": 2,
        "frames": [0, 1, 2, 3, 4, 5],
        "replicate": 1,
        "blend_frames": true
    },
    {
        "flipbook_texture": "textures/blocks/green_water_flow",
        "atlas_tile": "mymod:green_water_flow",
        "ticks_per_frame": 1,
        "frames": [0, 1, 2, 3, 4, 5, 6, 7],
        "replicate": 1,
        "blend_frames": true
    }
]

贴图文件为竖向排列的帧动画图片(静水 + 流水各一张),放在 textures/blocks/ 目录中。

完整 JSON 示例 ​

以下示例创建一对绿色有毒流体,进入后对实体施加缓慢和中毒效果。

动态流体 ​

文件路径:行为包/netease_blocks/flowing_green_water.json

json
{
    "format_version": "1.16.0",
    "minecraft:block": {
        "description": {
            "identifier": "mymod:flowing_green_water",
            "base_block": "flowing_liquid"
        },
        "components": {
            "netease:liquid": {
                "liquid_color": [0, 180, 60, 200],
                "spread_range": 4,
                "spread_delay": 5,
                "spread_fire": false,
                "can_float_boat": true,
                "bucket_name": "mymod:green_water_bucket",
                "water_splash": "minecraft:water_splash_particle_manual",
                "mob_effects": [
                    {
                        "effect_name": "slowness",
                        "duration": 3,
                        "amplifier": 1,
                        "show_particle": true
                    },
                    {
                        "effect_name": "poison",
                        "duration": 2,
                        "amplifier": 0,
                        "show_particle": true
                    }
                ],
                "remove_effects": ["speed", "jump_boost"]
            }
        }
    }
}

静态流体 ​

文件路径:行为包/netease_blocks/green_water.json

json
{
    "format_version": "1.16.0",
    "minecraft:block": {
        "description": {
            "identifier": "mymod:green_water",
            "base_block": "liquid",
            "register_to_create_menu": true,
            "category": "Nature"
        },
        "components": {
            "netease:liquid": {
                "liquid_color": [0, 180, 60, 200],
                "can_float_boat": true,
                "bucket_name": "mymod:green_water_bucket",
                "mob_effects": [
                    {
                        "effect_name": "slowness",
                        "duration": 3,
                        "amplifier": 1,
                        "show_particle": true
                    },
                    {
                        "effect_name": "poison",
                        "duration": 2,
                        "amplifier": 0,
                        "show_particle": true
                    }
                ],
                "remove_effects": ["speed", "jump_boost"]
            }
        }
    }
}

资源包 — terrain_texture.json ​

json
{
    "resource_pack_name": "mymod",
    "texture_name": "atlas.terrain",
    "texture_data": {
        "mymod:green_water_still": {
            "textures": "textures/blocks/green_water_still"
        },
        "mymod:green_water_flow": {
            "textures": "textures/blocks/green_water_flow"
        }
    }
}

资源包 — blocks.json ​

json
{
    "mymod:green_water": {
        "textures": "mymod:green_water_still",
        "sound": "stone"
    },
    "mymod:flowing_green_water": {
        "textures": "mymod:green_water_flow",
        "sound": "stone"
    }
}

资源包 — 本地化 ​

tile.mymod:green_water.name=绿色毒水
tile.mymod:flowing_green_water.name=流动的绿色毒水

流体特性 ​

  • 通过 /setblock 放置的静态流体不会主动向周围扩散;当周围方块发生变化时,会转变为动态流体并开始流动
  • 自定义流体继承原版水的特性:与岩浆互动生成圆石/黑曜石、玩家在流体中游泳和溺水、与海绵互动等
  • 用水桶装载后默认获得普通水桶,通过 bucket_name 可自定义装载后获得的物品(可配合自定义桶使用)
  • mob_effects 和 remove_effects 建议在静态和动态流体中保持一致,避免玩家在不同位置获得不同效果

常见问题 ​

流体不扩散 ​

排查步骤:

  1. 确认动态流体的命名是静态流体名加 flowing_ 前缀
  2. 确认动态流体的 base_block 为 flowing_liquid,静态流体为 liquid
  3. 通过 /setblock 放置的静态流体需要等待周围方块变化才会触发扩散
  4. 确认 spread_range 值 ≥ 1

船在流体上无法浮起 ​

原因: can_float_boat 默认为 true,但如果未配置 netease:liquid 组件,船无法浮起。确保静态和动态流体都配置了 netease:liquid 组件,并且 can_float_boat 设为 true。

流体颜色不生效 ​

原因: liquid_color 的透明度分量(第 4 个值)仅在"精美图像"画质设置下生效。在"流畅"画质下,透明度可能被忽略。

用桶收集后获得了普通水桶 ​

原因: 未设置 bucket_name 字段,或 bucket_name 的值不正确。自定义物品需要带完整的命名空间前缀(如 mymod:green_water_bucket)。

注意

自定义流体方块不支持自定义方块模型。流体的渲染由引擎内部的液体渲染器处理。

下一步 ​