# 自定义流体

# 概述

自定义流体需要设置两个方块,一个静态流体,一个动态流体。液体在流动过程中最外层是动态流体,其他都是静态流体,二者会相互转换。当流体扩散完毕后可见的均已转化为静态流体,可以通过设置不同颜色来观察动态流体与静态流体之间的相互转换。

# base_block设置

  • 自定义流体的base_block,静态流体需要设为liquid,动态流体需要设为flowing_liquid
  • 命名规则,因为静态流体与动态流体是相互转换的,在引擎层通过flowing去定位,所以需要注册一对才能正常使用
    • 静态流体——命名空间:流体方块名,例如customLiquid:red_water
    • 动态流体——命名空间:flowing_流体方块名,例如customLiquid:flowing_red_water

# 动画纹理

  • 流体需要在resource/textures/flipbook_textures.json中配置动画纹理使其贴图拥有动态流动效果,属于微软功能。

# 流体方块介绍

  • 可在netease:liquid中设置流体方块的流动速度、流动范围、颜色以及能否使船浮起来
  • 流体方块与原版水一致,如图所示:

special-4

# netease:liquid

类型 默认值 解释
liquid_color array [255, 255, 255, 255] 可选,流体颜色,4个数依次对应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 状态效果名称
duration int 状态效果持续时间
amplifier int 状态效果倍率,比等级小1,例如力量II的倍率为1
show_particle bool 是否显示状态效果的粒子效果,默认不显示

# 自定义流体方块相关特性

  • 可以在游戏内通过指令/setblock放置方块,静态方块放置后不会向周围扩散,当其周围方块发生变化时会转变成流动方块,继承流动特性
  • 继承自原版水,因此会有原版水的特性,例如和岩浆有互动、玩家进入会有流动效果、溺水、与海绵互动等。
  • 用水桶装载后会生成普通水桶,通过配置bucket_name可实现生成别的物品,可结合自定义桶实现自定义流体的装载与倒出

# 示例

动态流体:

{
    "format_version": "1.16.0",
    "minecraft:block": {
        "description": {
            "identifier": "customblocks:flowing_green_water",
            "register_to_creative_menu": true,
            "base_block": "flowing_liquid"
        },
        "components": {
            "netease:liquid": {
                "liquid_color": [ 0, 128, 0, 254 ],
                "spread_range": 4,
                "spread_delay": 5,
                "bucket_name": "customBucket:green_bucket",
                "spread_fire": true,
                "mob_effects": [
                    {
                        "effect_name": "slowness",
                        "duration": 3,
                        "amplifier": 1,
                        "show_particle": true
                    },
                    {
                        "effect_name": "weakness",
                        "duration": 1,
                        "amplifier": 4
                    }
                ],
                "remove_effects": [ "speed", "jump_boost" ]
            }
        }
    }
}

静态流体:

{
    "format_version": "1.16.0",
    "minecraft:block": {
        "description": {
            "identifier": "customblocks:green_water",
            "register_to_creative_menu": false,
            "base_block": "liquid"
        },
        "components": {
            "netease:liquid": {
                "liquid_color": [ 0, 128, 0, 254 ],
                "bucket_name": "customBucket:green_bucket",
                "spread_fire": true,
                "mob_effects": [
                    {
                        "effect_name": "slowness",
                        "duration": 3,
                        "amplifier": 1,
                        "show_particle": true
                    },
                    {
                        "effect_name": "weakness",
                        "duration": 1,
                        "amplifier": 4
                    }
                ],
                "remove_effects": [ "speed", "jump_boost" ]
            }
        }
    }
}