Skip to content

方块的生成条件

本页面镜像自
BedrockWiki

根据原始项目协议授权。本文经过AI翻译处理,如有内容遗漏,可以提交PR进行补充。

有时你可能需要根据下方或上方的方块条件来放置特定特征。虽然多数生成特征本身不具备条件判断功能,但我们可以通过简单的技巧实现这个需求。

TIP

本技巧利用了 aggregate_featuresingle_block_feature 特征。若想了解更多相关内容,请参阅特征类型文档。

文件结构

特征文件

这个特征通过 single_block_feature 实现条件判断功能。我们可以保留这个占位方块(若不影响后续生成),但后续会将其替换为空气方块以避免干扰。该特征本质上是一个"虚拟"特征,因为我们只需要它的条件判断功能而不需要实际生成方块。

json
{
    "format_version": "1.18.0",
    "minecraft:single_block_feature": {
        "description": {
            "identifier": "wiki:block_condition_feature"
        },
        "places_block": "minecraft:cobblestone", //任何不在"may_replace"列表中的方块
        "enforce_placement_rules": false,
        "enforce_survivability_rules": false,
        "may_replace": ["minecraft:air"], //仅允许在特定方块上生成
        "may_attach_to": { //附着条件 - 特征生成时周围允许存在的方块
            "bottom": ["minecraft:grass"] //仅允许在草方块上方生成
        }
    }
}
//这个"虚拟"特征只允许在草方块正上方的空气方块位置生成

接下来的特征负责将圆石替换回原始空气方块。如果你选择保留占位方块或该方块不会造成干扰,可以省略此步骤。

json
{
    "format_version": "1.18.0",
    "minecraft:single_block_feature": {
        "description": {
            "identifier": "wiki:block_replacement_feature"
        },
        "places_block": "minecraft:air", //将占位方块替换为无影响的方块
        "enforce_placement_rules": false,
        "enforce_survivability_rules": false,
        "may_replace": ["minecraft:cobblestone"] //前一个特征中使用的占位方块
    }
}
//此特征将占位方块替换回空气,避免后续生成问题

这个聚合特征按顺序执行:先放置条件判断方块,然后替换占位方块,最后生成实际特征。设置 early_outfirst_failure 确保任一环节失败时立即终止流程。该特征通过特征规则调用。

json
{
    "format_version": "1.18.0",
    "minecraft:aggregate_feature": {
        "description": {
            "identifier": "wiki:aggregate_placement_rock_feature"
        },
        "features": [
            "wiki:block_condition_feature", //用于条件判断的虚拟特征
            "wiki:block_replacement_feature", //清理占位方块的特征
            //从此处开始添加需要条件生成的实际特征
            "wiki:rock_ore_feature"
        ],
        "early_out": "first_failure" //任一特征失败则终止后续生成
    }
}
//该聚合特征按顺序执行所有子特征,由特征规则调用

这是需要条件生成的矿石特征示例。由于原生 ore_feature 无法直接设置生成条件,本技巧完美解决了这个问题。

json
{
	"format_version": "1.18.0",
	"minecraft:ore_feature": {
		"description": {
			"identifier": "wiki:rock_ore_feature"
		},
		"count": 12,
		"replace_rules": [
			{
				"places_block": "minecraft:stone",
				"may_replace": ["minecraft:air","minecraft:grass"]
			},
			{
				"places_block": {
                    "name": "minecraft:dirt",
                    "states": {
                      "dirt_type": "coarse"
                    }
                },
				"may_replace": ["minecraft:dirt"]
			}
		]
	}
}

TIP

若想深入了解矿石特征,请参考自定义矿石生成教程。

特征规则

json
{
	"format_version": "1.18.0",
	"minecraft:feature_rules": {
		"description": {
			"identifier": "wiki:overworld_after_surface_rock_feature",
			"places_feature": "wiki:aggregate_placement_rock_feature"
		},
		"conditions": {
			//在主世界生物群系的地表生成阶段后执行
			"placement_pass": "after_surface_pass",
			"minecraft:biome_filter": [
				{
					"any_of": [
						{
							"test": "has_biome_tag",
							"operator": "==",
							"value": "overworld"
						},
						{
							"test": "has_biome_tag",
							"operator": "==",
							"value": "overworld_generation"
						}
					]
				}
			]
		},
		"distribution": {
			//每个区块有1/3概率尝试生成1次
            "scatter_chance": 33,
			"iterations": 1, 
			"coordinate_eval_order": "xzy",
			"x": {
				"distribution": "uniform",
				"extent": [0, 15]
			},
			//根据地势高度生成
			"y": "q.heightmap(v.worldx,v.worldz)",
			"z": {
				"distribution": "uniform",
				"extent": [0, 15]
			}
		}
	}
}

总结

通过本教程,你已经掌握了如何为任意特征添加方块生成条件。虽然示例较为基础,但此技巧可扩展应用于复杂场景,兼容所有特征类型。

最终我们实现了一个仅在草方块上方空气位置生成的岩石特征。

生成效果截图: