手册:minecraft:scatter_feature

来自Minecraft基岩版开发Wiki
minecraft:scatter_feature
模式
所属域
features
类型
散植地物
加入版本
?

散植地物(Scatter Feature)用于将地物散植到区块当中。

语法[编辑]

"minecraft:scatter_feature": {
  "description": {
    "identifier": "<par1>"
  },
  "places_feature": "<par2>",
  "project_input_to_floor": <par3>
  "iterations": <par4>,
  "scatter_chance": <par5>,
  "x": <par6>,
  "y": <par7>,
  "z": <par8>,
  "coordinate_eval_order": "<par9>"
}

结构[编辑]

  •  minecraft:scatter_feature:根对象。
    • *description:描述。
    • *places_feature:设置要散植的地物,填写其赋命名空间标识符。
    •  project_input_to_floor:设置是否将地物投射到高度图中。
    • *iterations:设置地物的迭代次数(即地物尝试放置的次数)。
    •  scatter_chance:设置地物的散植成功机会。默认值为100。当填写数字时,游戏会将该数字当做百分数:
      "scatter_chance": 12.5
      
      使用Molang表达式时,游戏将以分数形式来读取:
      "scatter_chance": "1 / 8"
      
      对象形式的参数也可以表示分数:
      "scatter_chance": {
        "numerator": 1,
        "denominator": 8
      }
      
      以上三种形式的成功机会都是12.5%。
    •  x:设置放置时相对于地物原点的x轴坐标。可填整数或Molang;对象形式可用于设置预设的分布类型
    •  y:设置放置时相对于地物原点的y轴坐标。可填整数或Molang;对象形式可用于设置预设的分布类型
    •  z:设置放置时相对于地物原点的z轴坐标。可填整数或Molang;对象形式可用于设置预设的分布类型
    •  coordinate_eval_order:设置坐标的判断顺序。默认值为xzy。可填写xyzxzyyxzyzxzxyzyx

判断顺序[编辑]

散植地物放置目标地物时,会首先根据  scatter_chance 设置的分散机会来判断此次放置是否成功。若失败,则停止后面的步骤,反之则进行下一步判断。

接下来它将判断设置的迭代次数,若迭代次数没有解析为正整数,则不会进行下一步的判断。

然后它将根据设置的迭代次数进行相应次数的迭代,无论每次迭代因何种原因失败,都不会影响下一次迭代。对于每次迭代,都会使用相同的顺序来计算其坐标。

分布类型[编辑]

游戏内预设了6种分布类型用于将地物分布在一定范围内,通过填写对应的接口字符串在地物规则或部分地物中使用它们。例如:

"x": {
  "distribution": "uniform",
  "extent": [ 0, 16 ]
}

下表列出了可用的接口字符串:

ID 字符串 描述
1 uniform 均匀分布类型,可将目标地物在指定的半开区间(左闭右开)范围内均匀地随机放置。
2 gaussian 高斯分布类型,可将目标地物以高斯分布的形式随机放置在指定半开区间(左闭右开)范围内。
3 inverse_gaussian 逆高斯分布类型,可将目标地物以逆高斯分布的形式随机放置在指定半开区间(左闭右开)范围内。
4 fixed_grid 固定网格分布类型,可将目标地物以指定步长和初始偏移量的网格形式在指定闭区间范围内均匀放置。
5 jittered_grid 抖动网格分布类型,可将目标地物以指定步长和初始偏移量的网格形式在指定闭区间范围内随机放置。
6 triangle 三角分布类型,可将目标地物以三角分布的形式在指定的区间范围内放置。

网格分布[编辑]

网格分布分为固定网格分布和抖动网格分布,它们都有两个参数来决定网格的步长和初始偏移量,分别是  step_size grid_offset 。步长的默认值为1,初始偏移量的默认值为0。

网格分布的语法结构如下:

  •  x/y/z:x/y/z轴坐标参数对象。
    • *distribution:随机分布类型
    • *extent:分布范围。
    •  step_size:网格步长。默认值为1,以方块为单位。
    •  grid_offset:网格初始偏移量。默认值为0,以方块为单位。

如果有两个及以上的坐标轴使用了网格分布,则当某一坐标轴上迭代到指定的范围边缘(最大范围)时,游戏将会跳到下一行从最小范围处继续迭代。进行迭代的坐标轴的优先级由  coordinate_eval_order 决定,默认值为xzy。也就是说,(前提三个坐标轴都使用了网格分布)默认情况下游戏会先在x轴上以指定步长进行迭代,假设迭代次数无限大,则当迭代到最大范围时,游戏将在z轴上移动指定步长,并回到x轴的最小范围处继续迭代(会计入之前已经消耗的步长,其他坐标轴也同理),以此类推;当z轴上到达最大范围处时,游戏将在y轴上移动指定步长,并回到z轴的最小范围处继续迭代,以此类推。下面给出了一个示例:

"iterations": 8,
"x": {
  "distribution": "fixed_grid",
  "extent": [ -2, 2 ],
  "step_size": 3,
  "grid_offset": 1
},
"z": {
  "distribution": "fixed_grid",
  "extent": [ -2, 2 ],
  "step_size": 1
},
"y": 0

该示例以地物原点为中心,在xz坐标平面创建了一个5×5的网格。由于x坐标轴设置了1格初始偏移,所以游戏会跳过(0,0),从(1,0)处开始第一次迭代,然后数3格,并在第3格处进行第二次迭代,也就是(4,0)。此时x轴上已经到达最大范围处了(坐标(4,0)是x轴方向上的第5格),由于没有设置坐标判断顺序,游戏将依照默认的x→z→y的优先级来进行下一步判断,所以游戏会在z轴上移动1格(因为没有设置步长所以默认为1),x轴回到最小范围处继续迭代,即在(2,1)处迭代一次。在进行下一次迭代时,游戏在x轴上数了2格但已到达最大范围,所以会在z轴上移动1格并继续把x轴上剩余的1格数完,即在(0,2)处迭代一次……以此类推,直到8次迭代完成。下面给处了更为直观的演示:

1
2
3
4
5
6
7
8
往右为x轴正方向,往下为z轴正方向。金块表示地物原点;钻石块表示每次迭代放置地物的位置,上面用数字注明了是第几次迭代;绿色羊毛表示初始偏移的量;箭头表示迭代方向。

历史[编辑]

基岩版
??加入了minecraft:scatter_feature

漏洞[编辑]

关于“minecraft:scatter_feature”的漏洞在国际版中由漏洞追踪器维护,请在此报告漏洞。

Template:Navbox schema