🏗️ 生成(Generation)#

#bs.generation:help

Run a function over every position in a shaped region, spread across ticks.

../../_images/generation-light.png ../../_images/generation-dark.png

“美是数的和谐。”

—佚名

观看演示


🔧 函数#

你可以在下方找到此模块中的所有可用函数。


在长方体上#

#bs.generation:on_cuboid

遍历一个 3D 长方体,在每个位置执行回调。

输入:

执行 at <entity>positioned <x> <y> <z>:形状的原点

存储 bs:in generation.on_cuboid:

  • 遍历数据

    • run:每一步执行的回调

    • direction: 定义轴迭代顺序和方向的三字母字符串

      e/w 表示东/西,s/n 表示南/北,u/d 表示上/下(默认:eus,+x,+y,+z)

    • on_finished: 在过程结束时,在最终方块位置执行的命令

    • width:沿 x 轴的大小(默认值:1)

    • height:沿 y 轴的大小(默认值:1)

    • depth:沿 z 轴的大小(默认值:1)

    • spacing:位置之间的间距(默认值:1)

    • limit:每个游戏刻最多执行的步数(默认值:256)。

Lambda表达式:

分数 $generation.i bs.lambda:第一维度索引(0到size-1,与第一个方向字母绑定)

分数 $generation.j bs.lambda:第二维度索引(0到size-1,与第二个方向字母绑定)

分数 $generation.k bs.lambda:第三维度索引(0到size-1,与第三个方向字母绑定)

输出:

State:回调在每个位置执行。

示例:使用set_block_type回调将云杉楼梯替换为橡木楼梯

data modify storage bs:in generation.on_cuboid set value { \
  width:5, height:5, depth:5, \
  run:'function #bs.generation:callback/set_block_type {type:"minecraft:oak_stairs",with:{masks:[{block:"minecraft:spruce_stairs"}]}}' \
}
function #bs.generation:on_cuboid

贡献者:Aksiome


矩形迭代#

#bs.generation:on_rectangle

遍历一个2D矩形,在每个位置执行回调。

输入:

执行 at <entity>positioned <x> <y> <z>:形状的原点

存储 bs:in generation.on_rectangle

  • 遍历数据

    • run:每一步执行的回调

    • direction:定义轴向迭代顺序和方向的2字母字符串

      e/w 表示东/西,s/n 表示南/北,u/d 表示上/下(默认:es,+x,+z)。

    • on_finished: 在过程结束时,在最终方块位置执行的命令

    • width:沿 x 轴的大小(默认值:1)

    • height:沿 y 轴的大小(默认值:1)

    • depth:沿 z 轴的大小(默认值:1)

    • spacing:位置之间的间距(默认值:1)

    • limit:每个游戏刻最多执行的步数(默认值:256)。

Lambda表达式:

分数 $generation.i bs.lambda:第一维度索引(0到size-1,与第一个方向字母绑定)

分数 $generation.j bs.lambda:第二维度索引(0到size-1,与第二个方向字母绑定)

输出:

State:回调在每个位置执行。

示例:使用分形噪声生成地形

# Once
data modify storage bs:in generation.on_rectangle set value { \
  width:64, depth:64, limit: 64, \
  run:'function #bs.generation:callback/fractal_noise_2d {run:"function mypack:generate",with:{}}' \
}
function #bs.generation:on_rectangle

# mypack:generate
execute store result storage bs:ctx y int .01 run scoreboard players add $generation.noise bs.lambda 1000
function mypack:fill with storage bs:ctx

# mypack:fill
$fill ~ ~ ~ ~ ~$(y) ~ stone

贡献者:Aksiome


↩️ 回调#

下面列出了此模块中所有可用的回调。


实现说明

这些不是简单的回调。它们钩入内部以注入优化的子回调。繁重的初始化运行一次,然后轻量级回调处理实际的迭代。

方块回调#

依赖项

set_block_typeset_random_block 回调需要安装 bs.block 模块。

#bs.generation:callback/set_block {block:<value>,with:{}}

在每个位置放置特定方块。

输入:

函数宏

  • 参数

    • block: block to place (e.g., minecraft:stone)

    • with:附加设置

      • mode: placement mode [destroy|keep|replace] (default: replace)

      • masks:用于过滤位置的掩码列表(以AND方式组合)

        • 掩码条目

          • block: block to check (e.g., minecraft:stone, #minecraft:logs)

          • negate:反转条件(默认:false)

          • x:x偏移(默认:0)

          • y:y偏移(默认:0)

          • z:z偏移(默认:0)

示例:用石头填充,仅替换空气

run:'function #bs.generation:callback/set_block {block:"minecraft:stone",with:{masks:[{block:"minecraft:air"}]}}'
#bs.generation:callback/set_block_type {type:<value>,with:{}}

替换方块类型,同时保留状态和NBT数据。

输入:

函数宏

  • 参数

    • type: block type ID (e.g., minecraft:oak_stairs)

    • with:附加设置

      • mode: placement mode [destroy|keep|replace] (default: replace)

      • masks:用于过滤位置的掩码列表(以AND方式组合)

        • 掩码条目

          • block: block to check (e.g., minecraft:stone, #minecraft:logs)

          • negate:反转条件(默认:false)

          • x:x偏移(默认:0)

          • y:y偏移(默认:0)

          • z:z偏移(默认:0)

示例:将云杉楼梯转换为橡木楼梯,保留朝向

run:'function #bs.generation:callback/set_block_type {type:"minecraft:oak_stairs",with:{masks:[{block:"minecraft:spruce_stairs"}]}}'
#bs.generation:callback/set_random_block {blocks:[],with:{}}

从加权列表中放置随机选择的方块。

输入:

函数宏

  • 参数

    • blocks:加权方块列表

      • 方块条目

        • block | type:完整的方块字符串或保留状态的类型

        • weight:选择权重(默认:1)

    • with:附加设置

      • mode: placement mode [destroy|keep|replace] (default: replace)

      • masks:用于过滤位置的掩码列表(以AND方式组合)

        • 掩码条目

          • block: block to check (e.g., minecraft:stone, #minecraft:logs)

          • negate:反转条件(默认:false)

          • x:x偏移(默认:0)

          • y:y偏移(默认:0)

          • z:z偏移(默认:0)

示例:创建混合矿脉

run:'function #bs.generation:callback/set_random_block { \
  blocks:[{block:"minecraft:stone",weight:10},{block:"minecraft:coal_ore",weight:5},{block:"minecraft:iron_ore",weight:2}], \
  with:{masks:[{block:"minecraft:air",negate:1b}]} \
}'

贡献者:Aksiome


噪声回调#

依赖项

噪声回调需要安装 bs.random 模块。

#bs.generation:callback/fractal_noise_2d {run:<value>,with:{}}

计算分形噪声并以噪声值执行回调。组合多个八度的单纯形噪声以生成自然图案。

输入:

函数宏

  • 参数

    • run:接收噪声值并执行的回调函数。

    • with:噪声设置。

      • size:噪声粒度,数值越小细节越丰富(默认值:32)。

      • seed:用于复现结果的种子(默认值:随机)。

      • octaves:噪声层数(默认值:2)。

      • persistence:每层振幅乘数(默认值:0.5)。

      • lacunarity:每层的频率倍数(默认:2.0)。

Lambda表达式:

分数 $generation.noise bs.lambda:噪声值,范围为 [-1000, 1000]。

分数 $generation.i bs.lambda:第一维度索引(从迭代器继承)

分数 $generation.j bs.lambda:第二维度索引(从迭代器继承)

#bs.generation:callback/simplex_noise_2d {run:<value>,with:{}}

计算单纯形噪声并以噪声值执行回调。

输入:

函数宏

  • 参数

    • run:接收噪声值并执行的回调函数。

    • with:噪声设置。

      • size:噪声粒度,数值越小细节越丰富(默认值:32)。

      • seed:用于复现结果的种子(默认值:随机)。

Lambda表达式:

分数 $generation.noise bs.lambda:噪声值,范围为 [-1000, 1000]。

分数 $generation.i bs.lambda:第一维度索引(从迭代器继承)

分数 $generation.j bs.lambda:第二维度索引(从迭代器继承)

贡献者:Aksiome


💬 这对你有帮助吗?

欢迎在下方留下你的问题和反馈!