[命令] 命令教程“真”从零开始 (十) 简单,又新手(雾)的方块指令/setblock
声明:
1. 本教程默认所有读者看过本系列之前的内容。作者不对可能冒出来的术语或方言负责。系列教程链接见 索引 。
2. 本系列教程默认读者拥有关于Minecraft游戏本身的基础了解。
3. 本系列全部教程绝对适用于当前Java最新版(1.19.3)。但本帖的内容适用于自1.13以来的任意版本。
4. 本系列教程致力于基础原理而非使用方法,因为某些原因,这是本声明里最重要的一条。
<<<<<< 返回系列目录 ←←
本系列教程座右铭:
请相信可能性
……这鬼玩意真是越来越像创世神了,(植物)【跸——】的。
前言
1. 方块修改指令/setblock
- /setblock <x> <y> <z> <方块ID>
- /setblock 10 45 -6 stone
- /setblock 3 14 5 air
- /setblock ~ ~ ~ dirt
- /setblock ~ ~ ~ minecraft:dirt
*当然,模组作者愿意也是可以用minecraft:的,但是除非想要覆盖原有内容一般不这么做
但是,各位。
这条指令不止这些。
它还可以变得长一点
2. 模式
除了简单地选择方块放置的位置与方块的种类外,我们还有三种可以选择的执行模式,或者叫“原方块处理方式”:
替换模式(replace) , 摧毁模式(destroy) ,与 保留模式(keep) 。
格式:
- /setblock <x> <y> <z> <方块ID> [replace|destroy|keep]
我们可以从上述的三种模式“ [replace|destroy|keep] ”中选取一种使用。选择不同的模式会有不同的效果:
摧毁模式(Destroy)
在本模式下,被替换掉的方块会像是被玩家打掉一样,掉落为物品(如果可能的话),发出其破碎的声音,还会出现粒子效果。
就像下面这样:
替换模式(Replace)
本模式与摧毁模式相反。方块会被无声无息地“替换”而不是暴力摧毁。不会有声音,不会掉落物品。原来的方块就消失了。
像这样:
保留模式(keep)
本模式下只替换空气方块。若选中的位置不是空气,则不会替换。除了这点以外与替换模式相同。
像这样:
因为在图中,位置上已经有一个钻石砖了,所以保留模式无法将其替换为石头。
注意,如果你不选择模式,将会默认为替换模式。
注意,任何模式都会引起方块更新。 接下来,处于replace模式时,你无法替换一个“与原方块相同的方块”。這听起来好像无所谓,如果想要放置的和原来的方块相同好像指令不管成不成功都一样啊。
但其实不然,在这种情况下指令执行失败了,如果你接上一个条件制约的连锁型命令方块时,该命令方块不会执行。
(使用/execute store)时也会有不同输出。
到这里应该都还好吧各位。
那我们就要进入今天真正难的地方了。
3. 方块状态
你有没有想过一个问题?
比如说,你想放置一个活塞。
但你又知道,活塞可以有六个不同的朝向,上下左右前后均可。
那么,如何控制,我要放置的活塞要朝向哪边呢?
这里,我们要用到“ 方块状态(Blockstate) ”。
方块状态。看名字就知道,这玩意决定了一个方块当前的状态。
对于活塞来说方块状态储存了它的朝向,而对于其他方块,可能存储了其他的东西,例如一个拉杆是否拉开,或者半砖是上一半还是下一半。
我想说的是,不同的方块有不同的方块状态。
我们可以在方块ID的后面接上一对 中括号 “ [] ”来决定一个方块的状态:
像这样:
- /setblock ~ ~ ~ piston[] replace
英文“ piston ”是活塞的ID。而我们在其后添加了一个“ [] ”。
这条指令是可以运行的,但是毫无意义。因为我们的“[]”里啥也没有,相当于一座空的房子。
想要让它们起作用,我们要在其中添加内容物。
这些被添加在中括号内的东西的格式为:
“[方块状态名=值]”。
让我们来如此解释:
只要你学过一点英语,你就会知道“ facinig ”是“ 朝向 ”的意思,而“ up ”又是“ 向上 ”的意思。
在本例中,“facing”就是“ 方块状态名 ”,而“up”就是 值 。
所以:
- [fancing=up]
朝向向上。
将上面的东西带入指令:
- /setblock ~ ~ ~ piston[facing=up] replace
同理,“ down ”是 向下 ,所以:
- /setblock ~ ~ ~ piston[facing=down] replace
本指令会放置一个向下的活塞。
当然,你可以将这个值替换为东西南北来得到面向四周的活塞:
- /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截取的一张图片:
在这里我们可以清楚地看到所有对于门的,可用的方块状态。
所以看着这个表就很容易得出:
- /setblock ~ ~ ~ oak_door[facing=east,half=upper,hinge=left,open=true]
第二,你可以直接打指令,并使用命令补全系统。
当你输入命令时,游戏会提示你有哪些选项。
像这样:
对,只要你知道每项状态都代表了什么意思,那么按一下Tab,游戏就会帮你自动补全。
这样简单多了有没有!
然后,当你在在F3调试屏时,可以看到目前指针指向的方块的所有状态:
需要注意的是,这些方块状态只是状态罢了。
一些方块实体,比如箱子——
像是“箱子内的东西”之类的东西,我们无法使用方块状态确定。
我们要用的是另一种更强大的东西——
NBT
这就是我们下一帖的要讨论的东西。
以上就是本期的全部内容了。
我们,下一期,就说NBT!
目标是“谁问NBT怎么回事,只要把本教程糊 0 他脸上即可解决问题”
咳咳。因为NBT将是本教程到目前为止最复杂的一期,所以请给我两周的时间准备~
对。
顺手求一下收藏,点赞,与人气。
再会,各位。
#更新日志
Java 1.16.5/a 页面发布
Java 1.16.5/b 感谢@chixvv 的提醒,加入了在调试屏中查看方块状态的说明。
Java 1.16.5/c 排版,修改错字
Java 1.16.5/d 补充了关于替换模式无法替换相同方块的说明。
Java 1.17/a 1.17版本升级完成
Java 1.18/a 1.18版本升级完成
Java 1.19.3/a 1.19升级完成
上一帖: [命令] 命令教程“真”从零开始 (九) 十分流水帐地一期教程教会你/gamerule
索引:系列《命令教程“真”从零开始》
下一篇: [命令] 命令教程“真”从零开始 ( X ) 我就不信不能用大白话讲清楚NBT
2021.12 数据,可能有更多内容
[命令] 命令教程“真”从零开始 (十) 简单,又新手(雾)的方块指令/setblock声明:
1. 本教程默认所有读者看过本系列之前的内容。作者不对可能冒出来的术语或方言负责。系列教程链接在最后。
2. 本系列教程默认读者拥有关于Minecraft游戏本身的基础了解。
3. 本系列全部教程绝对适用于当前Java最新版(1.17)。但本帖的内容适用于自1.13以来的任意版本。
4. 本系列教程致力于基础原理而非使用方法,因为某些原因,这是本声明里最重要的一条。
本系列教程座右铭:
——前DS 祈 • 梦
——前DS 神商
前言
本系列教程到现在已经有10帖了。看起来好像讲得都是十分简单的内容,但是这已经是全部教程计划内容的4分之1了。
本教程致力于“亲民(罗嗦)”,与“完整”。对于逻辑头脑较好的的学习者,实际上只要去看Wiki就够了,但本教程不求高效,只求适普性。作者不想直接讲起较为复杂的内容然后只是在开头淡淡地来一句“本教程要求读者有对命令的一定了解。”所以便半推半就地——开始了本系列教程。
各位,"新手期"已经结束了。相信你在前九帖已经足够了解了指令的简单格式。从本帖开始,作者会慢慢减少重复性的赘述,读者应该不再需要作者重复常识性的内容。请各位在阅读的时候保持大脑活跃。
诶,但这一帖还是很简单啦。
下一帖我们就要讲NBT了。所以今天我们要来看的,是一个非常适合当作NBT的铺垫的指令——更改方块, /setblock 。
1. 方块修改指令/setblock
我们已经讲述过了一些可以修改玩家的位置,游戏模式,队伍,分数等指令。而今天,我们的指令用于关于MC的组成部分——方块。
指令/setblock可以更改位于特定坐标的方块,并有多种可以选择的模式。格式:
代码:
- /setblock <x> <y> <z> <方块ID>
实际上这些ID有一点像是方块的英文名字:比如你可能知道“stone”是 石头 的意思。所以:
代码:
- /setblock 10 45 -6 stone
你也可能知道 空气 是“ air ”,所以:
代码:
- /setblock 3 14 5 air
但你说,诶诶诶,我英语不好怎么办?你要说个石头或者泥土我知道英文是什么,但是要是什么“青金石砖”我上哪里知道去。而且有的时候ID与名字不完全一样呢?
一个很容易想到的方法就是去找Wiki这里: Java版数据值列表#方块 链接内页面记录了MC所有方块的ID
但是——我们有一种简单的多的方法来确定一个方块的ID。游戏中按下 F3+H (若键盘有fnLock,则按下fn+F3+H),即可显示高级标签提示。
这时,当你在物品栏中把鼠标移动到一个方块上时,你能看到的将不只是它的名字,更可以看到方块ID!长这样:
或者这样:
图中红色框里面的,就是他的ID但是,你可能发现了一个不寻常的东西。图里写的东西是“ minecraft:diamond_block ”。其中的“diamond_block”我知道,是“钻石块”的意思嘛但是那个“ minecraft: ”是什么?
这是 命名空间(Namespace) 。前缀“ minecraft: ”代表了这是一个属于我的世界 原版 的东西。当然,我现在玩的就是原版,也自然不会冒出拥有除了minecraft:以外的命名空间。
但你若安装了模组,就会发现这些模组添加的方块的命名空间并不是“minecraft:”,而是其他的什么,一般来讲,是本mod的ID。 *
当你要放置的是一个 原版 方块时,命名空间可以省略:或者严谨点说,当不指定命名空间时,会自动默认为“minecraft:”
本指令:
代码:
- /setblock ~ ~ ~ dirt
代码:
- /setblock ~ ~ ~ minecraft:dirt
但如果你要放置的方块来自一个模组,你需要填写命名空间。这里不作举例。
*当然,模组作者愿意也是可以用minecraft:的,但是除非想要覆盖原有内容一般不这么做
但是,各位。
这条指令不止这些。
它还可以变得长一点
2. 模式
除了简单地选择方块放置的位置与方块的种类外,我们还有三种可以选择的执行模式,或者叫“原方块处理方式”:
替换模式(replace) , 摧毁模式(destroy) ,与 保留模式(keep) 。
格式:
代码:
- /setblock <x> <y> <z> <方块ID> [replace|destroy|keep]
我们可以从上述的三种模式“ [replace|destroy|keep] ”中选取一种使用。选择不同的模式会有不同的效果:
摧毁模式(Destroy)
在本模式下,被替换掉的方块会像是被玩家打掉一样,掉落为物品(如果可能的话),发出其破碎的声音,还会出现粒子效果。
就像下面这样:
替换模式(Replace)
本模式与摧毁模式相反。方块会被无声无息地“替换”而不是暴力摧毁。不会有声音,不会掉落物品。原来的方块就消失了。
像这样:
保留模式(keep)
本模式下只替换空气方块。若选中的位置不是空气,则不会替换。除了这点以外与替换模式相同。
像这样:
因为在图中,位置上已经有一个钻石砖了,所以保留模式无法将其替换为石头。
注意,如果你不选择模式,将会默认为替换模式。
注意,任何模式都会引起方块更新。 接下来,处于replace模式时,你无法替换一个“与原方块相同的方块”。這听起来好像无所谓,如果想要放置的和原来的方块相同好像指令不管成不成功都一样啊。
但其实不然,在这种情况下指令执行失败了,如果你接上一个条件制约的连锁型命令方块时,该命令方块不会执行。
(使用/execute store)时也会有不同输出。
到这里应该都还好吧各位。
那我们就要进入今天真正难的地方了。
3. 方块状态
你有没有想过一个问题?
比如说,你想放置一个活塞。
但你又知道,活塞可以有六个不同的朝向,上下左右前后均可。
那么,如何控制,我要放置的活塞要朝向哪边呢?
这里,我们要用到“ 方块状态(Blockstate) ”。
方块状态。看名字就知道,这玩意决定了一个方块当前的状态。
对于活塞来说方块状态储存了它的朝向,而对于其他方块,可能存储了其他的东西,例如一个拉杆是否拉开,或者半砖是上一半还是下一半。
我想说的是,不同的方块有不同的方块状态。
我们可以在方块ID的后面接上一对 中括号 “ [] ”来决定一个方块的状态:
像这样:
代码:
- /setblock ~ ~ ~ piston[] replace
英文“ piston ”是活塞的ID。而我们在其后添加了一个“ [] ”。
这条指令是可以运行的,但是毫无意义。因为我们的“[]”里啥也没有,相当于一座空的房子。
想要让它们起作用,我们要在其中添加内容物。
这些被添加在中括号内的东西的格式为:
“[方块状态名=值]”。
让我们来如此解释:
只要你学过一点英语,你就会知道“ facinig ”是“ 朝向 ”的意思,而“ up ”又是“ 向上 ”的意思。
在本例中,“facing”就是“ 方块状态名 ”,而“up”就是 值 。
所以:
代码:
- [fancing=up]
朝向向上。
将上面的东西带入指令:
代码:
- /setblock ~ ~ ~ piston[facing=up] replace
同理,“ down ”是 向下 ,所以:
代码:
- /setblock ~ ~ ~ piston[facing=down] replace
本指令会放置一个向下的活塞。
当然,你可以将这个值替换为东西南北来得到面向四周的活塞:
代码:
- /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截取的一张图片:
在这里我们可以清楚地看到所有对于门的,可用的方块状态。
所以看着这个表就很容易得出:
代码:
- /setblock ~ ~ ~ oak_door[facing=east,half=upper,hinge=left,open=true]
第二,你可以直接打指令,并使用命令补全系统。
当你输入命令时,游戏会提示你有哪些选项。
像这样:
对,只要你知道每项状态都代表了什么意思,那么按一下Tab,游戏就会帮你自动补全。
这样简单多了有没有!
然后,当你在在F3调试屏时,可以看到目前指针指向的方块的所有状态:
需要注意的是,这些方块状态只是状态罢了。
一些方块实体,比如箱子——
像是“箱子内的东西”之类的东西,我们无法使用方块状态确定。
我们要用的是另一种更强大的东西——
NBT
这就是我们下一帖的要讨论的东西。
以上就是本期的全部内容了。
我们,下一期,就说NBT!
目标是“谁问NBT怎么回事,只要把本教程糊0他脸上即可解决问题”
咳咳。因为NBT将是本教程到目前为止最复杂的一期,所以请给我两周的时间准备~
对。
顺手求一下收藏,点赞,与人气。
再会,各位。
#更新日志
Java 1.16.5/a页面发布
Java 1.16.5/b感谢@chixvv 的提醒,加入了在调试屏中查看方块状态的说明。
Java 1.16.5/c排版,修改错字
Java 1.16.5/d补充了关于替换模式无法替换相同方块的说明。
Java 1.17/a 1.17版本升级完成
上一帖: [命令] 命令教程“真”从零开始 (九) 十分流水帐地一期教程教会你/gamerule
系列《命令教程“真”从零开始》
前往来自 麻瓜草稿簿 的 系列教程索引
【命令】命令教程“真”从零开始 (一) 指令本身,选择器,与命令方块
【命令】命令教程“真”从零开始 (二) 命令tp与相对,局部坐标与朝向锚
【命令】 命令教程“真”从零开始 (三) 四个新手指令
【命令】 命令教程“真”从零开始 (四) 有关队伍命令/team的……差不多一切
【命令】命令教程“真”从零开始 (五) 记分板与/scoreboard
【命令】 命令教程“真”从零开始 (六) /tag指令,与进阶~选择器参数
【命令】命令教程“真”从零开始 (七) 新手指令杂烩2号
【命令】命令教程“真”从零开始 (八) 区块与强制加载命令/forceload
【命令】命令教程“真”从零开始 (九) 调整苦力怕防爆,防喷/gamerule
【命令】命令教程“真”从零开始 (十) 简单,又新手(雾)的方块指令/setblock
【命令】命令教程“真”从零开始 ( X ) 我就不信不能用大白话讲清楚NBT
【命令】命令教程"真"从零开始(十二)数据运算三方法之一修改NBT/data
【命令】命令教程“真”从零开始(十三)给予与替换物品,命令/replaceitem
【命令】命令教程“真”从零开始(十四 ) 修改属性/attribute【一拳打爆末影龙】 【命令】命令教程“真”从零开始(十五)最接近神的一次:填充命令/fill 【命令】命令教程"真"从零开始(十六)复制一片区域:复制命令/clone
下一篇: [命令] 命令教程“真”从零开始 ( X ) 我就不信不能用大白话讲清楚NBT
