自定义流体方块
自定义流体方块可以创建类似水或岩浆的液体效果,支持自定义颜色、扩散范围、状态效果等。自定义流体需要成对注册:一个静态流体(水源)和一个动态流体(流动水),二者通过命名规则自动关联。
前置条件
本功能不需要开启实验性玩法。请先阅读 自定义基础方块 了解方块注册流程和 JSON 组件基础。流体方块通常需要配置动画纹理来呈现流动效果。
概述
自定义流体由一对方块组成:
- 静态流体(水源)—
base_block: "liquid",放置后作为液体源头 - 动态流体(流动水)—
base_block: "flowing_liquid",由静态流体扩散产生
引擎通过 flowing_ 前缀自动匹配静态和动态流体,因此二者的命名必须严格遵循规则。
自定义流体继承原版水的大部分特性,包括:与岩浆互动(生成圆石/黑曜石)、玩家进入时的游泳效果、溺水伤害、与海绵互动等。
命名规则
| 类型 | 命名格式 | 示例 |
|---|---|---|
| 静态流体 | 命名空间:流体名 | mymod:green_water |
| 动态流体 | 命名空间:flowing_流体名 | mymod:flowing_green_water |
重要
命名必须严格匹配。动态流体的方块名部分必须是静态流体方块名前加上 flowing_ 前缀,否则二者无法正常互转,流体扩散和收集行为都会异常。
netease:liquid 组件
静态流体和动态流体都使用 netease:liquid 组件配置液体属性。部分字段仅对动态流体有效。
| 键 | 类型 | 默认值 | 说明 |
|---|---|---|---|
liquid_color | array(int) | [255, 255, 255, 255] | 可选,流体颜色 RGBA,每个分量取值 0~255。透明度仅"精美图像"设置下生效 |
spread_range | int | 8 | 可选,扩散格数(1~8),仅动态流体有效 |
spread_delay | int | 5 | 可选,每经过该刻数扩散一格(每秒 20 刻),仅动态流体有效 |
spread_fire | bool | false | 可选,是否传播火焰(类似岩浆效果) |
can_float_boat | bool | true | 可选,是否能浮起船。动态和静态流体均需设置 |
bucket_name | string | "water_bucket" | 可选,空桶收集后获得的物品。自定义物品需带完整 ID(含命名空间) |
water_splash | string | "minecraft:water_splash_particle_manual" | 可选,实体进入流体时播放的粒子特效 |
mob_effects | array(dict) | [] | 可选,实体进入流体时添加的状态效果列表 |
remove_effects | array(string) | [] | 可选,实体进入流体时移除的状态效果名称列表 |
mob_effects 子字段
| 键 | 类型 | 说明 |
|---|---|---|
effect_name | string | 状态效果名称(如 slowness、poison、wither) |
duration | int | 持续时间(秒) |
amplifier | int | 效果倍率,比等级小 1(如缓慢 II 的倍率为 1) |
show_particle | bool | 是否显示状态效果粒子,默认不显示 |
提示
如果未配置 netease:liquid 组件,流体的颜色、扩散范围和扩散延迟默认与原版水相同,但无法使船浮起来。建议始终显式配置该组件。
动画纹理
流体方块需要在资源包的 textures/flipbook_textures.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
{
"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
{
"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
{
"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
{
"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建议在静态和动态流体中保持一致,避免玩家在不同位置获得不同效果
常见问题
流体不扩散
排查步骤:
- 确认动态流体的命名是静态流体名加
flowing_前缀 - 确认动态流体的
base_block为flowing_liquid,静态流体为liquid - 通过
/setblock放置的静态流体需要等待周围方块变化才会触发扩散 - 确认
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)。
注意
自定义流体方块不支持自定义方块模型。流体的渲染由引擎内部的液体渲染器处理。
