/setblock 放置方块
在指定坐标放置或替换单个方块,支持方块状态与放置模式
在指定坐标放置或替换单个方块,是地图搭建与命令方块编程中最基础的方块操作命令。基岩版 1.16.210 起支持方块状态(block states),1.19.70 移除了旧版数据值(tileData)参数,新版应改用命名方块状态。批量放置方块时可配合 /fill 使用。
原理
/setblock 在服务端直接改写世界存档中的方块存储,而不是模拟玩家「放置方块」的动作。命令解析位置参数后,定位到对应区块的方块存储,把目标位置原有的方块整体替换为新的「方块 ID + 方块状态」组合。这个过程不经过玩家放置方块的合法性检查:不需要消耗物品、不受交互距离限制,也不要求目标方块满足任何放置条件,因此你可以凭空放置基岩、命令方块、悬浮的方块,甚至把方块放置在实体当前占据的位置。
命令只在已加载的区块内生效。如果目标坐标位于未加载区块或超出世界边界,命令会执行失败并返回错误。这意味着你用命令方块自动化建造时,需要保证目标区域处于加载状态,例如配合常加载区域或让玩家停留在附近,否则 /setblock 不会产生任何效果。
写入新方块后,游戏会对相邻方块触发方块更新,让红石电路、水流、重力方块等系统做出响应,这也是 /setblock 放置的红石元件能被正常检测、水源会开始流动、沙子会下落的原因。旧方块的处理方式由放置模式决定:默认的 replace 静默覆盖,不产生掉落物、不播放声音;destroy 模拟玩家破坏,掉落旧方块及其内容物并播放破坏音效;keep 只在目标为空气时写入,否则命令失败。
需要留意的是,/setblock 只设置方块本体,不设置方块实体(NBT)数据。因此命令放置的箱子是空的、放置的告示牌没有文字。基岩版没有 Java 版的 /data 命令,无法通过命令直接读写方块 NBT,方块实体数据只能借助附加包等外部手段实现。
语法
新版语法(1.19.70+):
/setblock <位置> <方块> [方块状态] [模式]
旧版语法(1.19.70 以下):
/setblock <位置> <方块> [数据值] [模式]
参数
<位置>— 坐标(x y z),指定要放置或替换方块的目标位置。支持绝对坐标(如100 64 100)、相对坐标(如~ ~-1 ~)和局部坐标(如^ ^ ^1)。<方块>— 方块 ID(如stone、diamond_block、torch),指定要放置的方块类型。完整的方块 ID 列表见下方「常用方块 ID」章节。[方块状态]— 方块的命名状态(block states),用["键"="值"]语法指定方块的变体、朝向、颜色等属性。可选,省略时使用该方块的默认状态。详见下方「方块状态」章节。[数据值]— 旧版方块数据值(tileData,整数),用于指定方块变体。已弃用,基岩版 1.19.70 起移除,应改用方块状态。[模式]— 放置模式,可选值replace/destroy/keep,决定如何处理目标位置原有的方块。可选,默认replace。详见下方「放置模式」章节。
放置模式
| 模式 | 说明 |
|---|---|
replace | 默认模式。直接覆盖目标方块(包括空气),旧方块不产生掉落物、不播放声音。 |
destroy | 先模拟玩家破坏目标方块:旧方块及其内容物掉落为物品,播放破坏音效,再写入新方块。 |
keep | 仅当目标位置为空气时写入新方块;若目标已有非空气方块,命令执行失败,不改变任何方块。 |
方块状态
方块状态(block states,又称方块属性)决定方块的具体外观与行为,例如羊毛的颜色、原木的种类、按钮是否被按下。基岩版 1.19.70 起统一使用命名方块状态取代旧版数据值。方块状态写在方括号内,格式为 ["键"="值"],多个状态用逗号分隔。字符串值需要用引号包裹,整数和布尔值(true / false)不加引号。状态名在较新版本中可省略 minecraft: 命名空间前缀。
几个典型示例:
["color"="orange"]— 橙色羊毛["wood_type"="birch"]— 白桦原木["button_pressed_bit"=false,"facing_direction"=1]— 未按下、朝向为 1 的按钮
每个方块必须列出它所需的全部状态,或完全省略方括号;只列出一部分状态可能导致命令失败。省略方括号或写 [] 时使用方块的默认状态。
常用方块 ID
| 方块 | ID |
|---|---|
| 空气 | air |
| 石头 | stone |
| 基岩 | bedrock |
| 钻石块 | diamond_block |
| 金块 | gold_block |
| 铁块 | iron_block |
| 草方块 | grass |
| 玻璃 | glass |
| 火把 | torch |
| 水 | water |
| 岩浆 | lava |
| 命令方块 | command_block |
| 重复命令方块 | repeating_command_block |
| 连锁命令方块 | chain_command_block |
| 红石块 | redstone_block |
| TNT | tnt |
完整的方块 ID 列表可在游戏内命令自动补全中查看,或查阅 Minecraft Wiki (在新标签页中打开)。
示例
在脚下放置一块石头:
/setblock ~ ~-1 ~ stone
把脚下那格替换为石头。相对坐标 ~ ~-1 ~ 表示以执行者位置为原点、向下偏移一格。
在指定坐标放置钻石块:
/setblock 100 64 100 diamond_block
在世界坐标 (100, 64, 100) 处放置一个钻石块,静默覆盖该位置原有的任何方块。
破坏头顶方块并保留掉落物:
/setblock ~ ~1 ~ air destroy
用 destroy 模式把头顶的方块替换为空气,原方块会像被玩家挖掘一样掉落为物品并播放破坏音效。air 与 destroy 组合常用于清除方块同时保留掉落物。
只在空气位置放置玻璃:
/setblock ~ ~ ~ glass keep
用 keep 模式在你所在位置放置玻璃。仅当该位置为空气时才会写入,若已有方块则命令失败,避免误覆盖已有建筑。
放置指定颜色的羊毛:
/setblock ~ ~ ~ wool ["color"="orange"]
在你所在位置放置一块橙色羊毛。方块状态 ["color"="orange"] 指定羊毛颜色,省略时默认放置白色羊毛。
放置去皮白桦原木:
/setblock ~ ~1 ~ wood ["wood_type"="birch","stripped_bit"=true]
在头顶放置一根去皮白桦原木。这里同时指定两个方块状态:wood_type 决定木头种类,stripped_bit 决定是否去皮。
基岩版注意
- 需要 OP 等级 1,且世界需开启「允许作弊」。
- 默认
replace模式会静默覆盖任何方块(包括空气),不产生掉落物、不播放声音。 destroy模式会模拟玩家挖掘:旧方块掉落为物品并播放破坏音效,配合air可清除方块并保留掉落物。keep模式只在目标为空气时生效,目标已有方块时命令失败且不改变任何方块。- 与 Java 版差异:Java 版把方块状态内联在方块 ID 中(如
chest[facing=east]),基岩版则使用独立的方块状态参数["键"="值"];Java 版需要 OP 等级 2,基岩版为 1;Java 版 1.21.5+ 新增的strict模式在基岩版中不存在。 - 版本兼容:方块状态在 1.16.210 加入,旧版数据值(tileData)在 1.19.70 移除,旧版附加包或地图迁移时需改用命名方块状态。
- 命令只设置方块本体,不设置方块实体数据,因此放置的箱子、漏斗等容器内容为空,告示牌无文字。
- 目标位置必须在已加载区块内,否则命令失败;自动化建造需配合常加载区域。
- 基岩版没有 Java 版的
/data命令,无法通过命令直接读写方块 NBT 数据。
常见问题
为什么 /setblock 有时执行失败?
常见原因有三种:目标坐标位于未加载区块或超出世界边界;keep 模式遇到非空气方块;方块状态只列出一部分。你可以在聊天栏查看命令输出的错误提示,定位具体原因。
destroy 和 replace 有什么区别?
destroy 会像玩家挖掘一样掉落旧方块及其内容物并播放破坏音效;replace 静默覆盖旧方块,不产生任何掉落物和声音。清除方块又想保留掉落物时用 destroy,纯粹覆盖时用 replace(默认)。
如何放置有颜色或朝向的方块?
使用方块状态参数,例如橙色羊毛写 ["color"="orange"],朝东的箱子写 ["minecraft:cardinal_direction"="east"]。省略方块状态则使用默认值。