
这是原载于MCbbs论坛上的命令教程。随着论坛的消失,这系列教程经修缮(可能需要几天时间)后被迁移至此。
本文某种程度上是一个白话版的Wiki
作者不保证对本教程的维护和更新(全随兴致),请您自行判断内容是否过时。不过,若有更多问题欢迎在评论区提出
教程声明:
系列教程默认读者是按照顺序阅读的
教程默认读者有对Minecraft的基础了解
教程主要注重基础原理,实践内容极少
本篇教程适用于Java 1.20.6,但大部分内容也适用于1.13+
前言
本系列教程到现在已经有10篇了。
本教程致力于“亲民(罗嗦)”,与“完整”。
对于逻辑头脑较好或有编程基础的的学习者,实际上只要去看Wiki就够了,但本教程不求高效,只求适普性。
作者不想直接讲起较为复杂的内容然后只是在开头淡淡地来一句“本教程要求读者有对命令的一定了解。”所以便半推半就地——开始了本系列教程。
各位,"新手期"已经结束了。相信你在前九帖已经足够了解了指令的简单格式。
从本帖开始,作者会慢慢减少重复性的赘述,读者应该不再需要作者重复常识性的内容。请各位在阅读的时候保持大脑活跃。
诶,但这一篇还是很简单啦。
下一篇我们就要讲NBT了。
所以今天我们要来看的,是一个非常适合当作NBT的铺垫的指令——
更改方块,/setblock。
1. 方块修改指令/setblock
我们已经讲述过了一些可以修改玩家的位置,游戏模式,队伍,分数等指令。
而今天,我们的指令用于关于MC的组成部分——方块。
指令/setblock可以更改位于特定坐标的方块,并有多种可以选择的模式。
格式:
/setblock <x> <y> <z> <方块ID> 而<方块ID>即为该方块的英文ID。
实际上这些ID有一点像是方块的英文名字:
比如你可能知道“stone”是石头的意思。
所以:
/setblock 10 45 -6 stone 本指令的含义即是“将坐标(10, 45 ,-6)位置的方块替换为石头。”
你也可能知道空气是“air”,
所以:
/setblock 3 14 5 air 将坐标(3, 14, 5)的方块替换为空气——也就是清空此处的方块。
但你说,诶诶诶,我英语不好怎么办?你要说个石头或者泥土我知道英文是什么,但是要是什么“青金石砖”我上哪里知道去。
而且有的时候ID与名字不完全一样呢?
一个很容易想到的方法就是去找Wiki这里:Java版数据值列表#方块
链接内页面记录了MC所有方块的ID
但是——
我们有一种简单的多的方法来确定一个方块的ID。
游戏中按下F3+H(若键盘有fnLock,则按下fn+F3+H),即可显示高级标签提示。
这时,当你在物品栏中把鼠标移动到一个方块上时,你能看到的将不只是它的名字,更可以看到方块ID!
长这样:

高级提示框可以显示ID
图中红色线上的,就是他的ID。
除此之外,F3调试界面也可以显示当前指针看向的方块的ID:

右侧粉色标记处
但是,你可能发现了一个不寻常的东西。
图里写的东西是“minecraft:diamond_block”。
其中的“diamond_block”我知道,是“钻石块”的意思嘛
但是那个“minecraft:”是什么?
这是命名空间(Namespace)。
命名空间
前缀“minecraft:”代表了这是一个属于我的世界原版的东西。
当然,我现在玩的就是原版,也自然不会冒出拥有除了minecraft:以外的命名空间。
但你若安装了模组,就会发现这些模组添加的方块的命名空间并不是“minecraft:”,而是其他的什么,一般来讲,是本mod的ID。*
命名空间的主要作用之一是保证兼容。如果没有命名空间的话,假设模组1加入了一种新方块大理石,ID叫做marble——也就是英文大理石的意思——这个时候模组2也加入了大理石,ID也叫做marble——这样一来就冲突了。 但是有命名空间时,模组1的大理石ID叫做mod1:marble,模组2的叫做mod2:marble,这样一来就不冲突了。
当你要放置的是一个原版方块时,命名空间可以省略:
或者严谨点说,当不指定命名空间时,会自动默认为“minecraft:”
本指令:
/setblock ~ ~ ~ dirt 与:
/setblock ~ ~ ~ minecraft:dirt 以上两条指令效果一致
但如果你要放置的方块来自一个模组,你需要填写命名空间。
这里不作举例。
但是,各位。 这条指令不止这些。 它还可以变得长一点 2. 模式 除了简单地选择方块放置的位置与方块的种类外,我们还有三种可以选择的执行模式,或者叫“原方块处理方式”: 替换模式(replace),摧毁模式(destroy),与保留模式(keep)。 格式:
/setblock <x> <y> <z> <方块ID> [replace|destroy|keep] 我们可以从上述的三种模式“[replace|destroy|keep]”中选取一种使用。选择不同的模式会有不同的效果: 摧毁模式(Destroy) 在本模式下,被替换掉的方块会像是被玩家打掉一样,掉落为物品(如果可能的话),发出其破碎的声音,还会出现粒子效果。 就像下面这样:

摧毁模式
替换模式(Replace) 本模式与摧毁模式相反。方块会被无声无息地“替换”而不是暴力摧毁。不会有声音,不会掉落物品。原来的方块就消失了。 像这样:

替换模式
保留模式(keep) 本模式下只替换空气方块。若选中的位置不是空气,则不会替换。除了这点以外与替换模式相同。 像这样:

保留模式
因为在图中,位置上已经有一个钻石砖了,所以保留模式无法将其替换为玻璃。 注意:
如果你不选择模式,将会默认为替换模式。
任何模式都会引起方块更新。
处于replace模式时,你无法替换一个“与原方块相同的方块”。这听起来好像无所谓,如果想要放置的和原来的方块相同好像指令不管成不成功都一样啊。但其实不然,在这种情况下指令执行失败了,如果你接上一个条件制约的连锁型命令方块时,该命令方块不会执行。 到这里应该都还好吧各位。 那我们就要进入今天真正难的地方了。 3. 方块状态 你有没有想过一个问题? 比如说,你想放置一个活塞。 但你又知道,活塞可以有六个不同的朝向,上下左右前后均可。 那么,如何控制,我要放置的活塞要朝向哪边呢? 这里,我们要用到“方块状态(Blockstate)”。 方块状态。看名字就知道,这玩意决定了一个方块当前的状态。 对于活塞来说方块状态储存了它的朝向,而对于其他方块,可能存储了其他的东西,例如一个拉杆是否拉开,或者半砖是上一半还是下一半。 我想说的是,不同的方块有不同的方块状态。 我们可以在方块ID的后面接上一对中括号“[]”来决定一个方块的状态: 像这样:
/setblock ~ ~ ~ piston[] replace 在执行位置放置一个活塞 英文“piston”是活塞的ID。而我们在其后添加了一个“[]”。 这条指令是可以运行的,但是毫无意义。因为我们的“[]”里啥也没有,相当于一座空的房子。 想要让它们起作用,我们要在其中添加内容物。 这些被添加在中括号内的东西的格式为: “[方块状态名=值]”。 让我们来如此解释: 只要你学过一点英语,你就会知道“facinig”是“朝向”的意思,而“up”又是“向上”的意思。 在本例中,“facing”就是“方块状态名”,而“up”就是值。 所以:
[fancing=up] 的含义就是—— 朝向向上。 将上面的东西带入指令:
/setblock ~ ~ ~ piston[facing=up] 放置一个向上的活塞 同理,“down”是向下,所以:
/setblock ~ ~ ~ piston[facing=down] 放置一个向下的活塞 当然,你可以将这个值替换为东西南北来得到面向四周的活塞:
/setblock ~ ~ ~ piston[facing=east] 放置一个向东的活塞 不是很难吧? 3.2 多个状态 你应该知道活塞除了朝向以外还有另一个种状态,就是该活塞是否伸出。 当然,我们只要把上面的方块状态名换为“extended”,即“伸展”的意思——即可控制该项。 就像上一帖的/gamerule指令一样,该状态中我们使用“true”代表“真”,“false”代表“假”。 所以,举一反三,很容易就可以得到下面两条指令:
/setblock ~ ~ ~ piston[extended=false] 放置一个活塞头没有伸出的活塞。(也就是默认值)
/setblock ~ ~ ~ piston[extended=true] 放置一个伸出了活塞头的活塞。然而,如果没有红石信号,这个活塞头会立马缩回去,像下面这样:

活塞立刻收回
好现在我们有了两种方块状态。当你需要在一条指令内确定多种状态时,使用逗号“,”来隔开。 比如:
/setblock ~ ~ ~ piston[extended=true,facing=up] 放置一个向上且伸开的活塞 注意,这里的逗号是英文的逗号,不要切错输入法! 各位各位 现在有个问题。 我怎么知道这些“方块状态名”或者“值”该填什么? 你要说朝向我能猜出来是“facing”,但是要是“是否伸缩”,我怎么知道改写“extended”?又怎么知道要用"true"来代表真,而不是“yes”? 方法有二(或者说,两个半)。 第一,看Wiki 不是所有的方块都有方块状态。像是石头这种一成不变的方块就没有。 但是对于任何一个有的方块,在其相对应的Wiki页面中。你可以找到一个叫做“方块状态”的表格。 这里我用门来举例: 下面是从中文MCWiki截取的一张图片:

来自中文MC Wiki。截图时间2024/6/12,版本1.21
在这里我们可以清楚地看到所有对于门的,可用的方块状态。 所以看着这个表就很容易得出:
/setblock ~ ~ ~ oak_door[facing=east,half=upper,hinge=left,open=true] 放置一个面向东方,门轴在左,打开状态的上半截木门。呃……大概长这样:

奇怪状态的木门
第二,你可以直接打指令,并使用命令补全系统。 当你输入命令时,游戏会提示你有哪些选项。 像这样:

命令补全
对,只要你知道每项状态都代表了什么意思,那么按一下Tab,游戏就会帮你自动补全。 这样简单多了有没有! 然后,当你在在F3调试屏时,可以看到目前指针指向的方块的所有状态:

主要缺点是无法得知所有接受值
需要注意的是,这些方块状态只是状态罢了。 一些方块实体,比如箱子—— 像是“箱子内的东西”之类的东西,我们无法使用方块状态确定。 我们要用的是另一种更强大的东西—— NBT 这就是我们下一篇的要讨论的东西。 以上就是本期的全部内容了。 我们,下一期,就说NBT! 目标是“谁问NBT怎么回事,只要把本教程糊他脸上即可解决问题” 再会,各位。