本帖最后由 Dahesor 于 2023-1-1 12:11 编辑

☆【命令】命令教程"真"从零开始(十五)☆
☆最接近神的一次:填充命令/fill☆


声明:
1. 本系列教程默认读者拥有关于Minecraft游戏本身的基础了解。
2. 本系列全部教程绝对适用于当前Java最新版 (1.19.3)
3. 本系列教程致力于基础原理而非使用方法,因为某些原因,这是本声明里最重要的一条。
4. 本教程 需要读者有特定的命令知识。这些这些内容在 下方表格中列出

<<<<<< 返回系列目录 ←←

需要前置知识:
请确保你理解下列的内容。下表的所有内容一定在本系列教程的某一帖讨论过,所以若您是从本系列第一帖起阅读至今,可以不用看。
对于跳跃式阅读的读者,还请检查一番:






本帖使用了较多的图片与GIF,可能加载较慢



前言

在我以前(很久以前)帮别人制作地图(指帮堆方块)的时候,经常想着要是能一下填充出我想要的形状就好了。

可惜,还在1.7.10的当时……还没有我们今天要讲的这条命令。

今天的内容就是,可以在指定区域填充方块的命令,/fill,

这里提醒:用这两条命令做一些技术手段还是可以的。
但是如果你想让它们帮你盖出你想要的形状或是房子那是高估它们了。

做好人,接近WorldEdit,远离 /fill与/clone!

1. 填充命令/fill


神奇的命令/fill,可以将一个矩形区域替换为指定的方块。
格式:
  1. /fill <坐标点1> <坐标点2> <方块>
复制代码


命令/fill的逻辑十分简单:
指定两个坐标,其对角线形成的长方体就是选中的区域。该区域的所有空间均会被替换为后面指定的“<方块>”。
上面的“<坐标点1>“ 与 ”<坐标点2>”均是由3个数字所指定的坐标,所以,将格式展开显示就是这样的:
  1. /fill <x1> <y1> <z1> <x2> <y2> <z2> <方块>
复制代码
(fill格式,简化版)

两个坐标形成的长方体的内容即是选中的区域,该区域内的内容均会被替换为指定的方块。

为了给你一个“两个坐标形成的长方体”的概念,请看下图:




图中,黄色方块与钻石块就是我们选中的两个坐标。红色玻璃就是它们的对角线,而绿色玻璃就是它们选中的区域。

简单地将黄色方块与钻石块的坐标填入<坐标点1> <坐标点2>,并将<方块>指定为石头(stone),即可得到:

/fill ~ ~ ~ ~8 ~8 ~8 stone


注意这里我使用了"~"相对坐标。这是为了方便您理解。
在使用中,您应该把它们替换为坐标。(除非相对坐标就是你想要的)


命令执行后,将会把指定的区域全部替换为石头:



上面的被选中的,8*8*8的区域中的内容被全部替换为石头
当然,8*8*8可能有点小?
我们也可以玩点疯狂的,比如,放置一个25×25×25的TNT堆:

/fill ~ ~ ~ ~25 ~-25 ~25 tnt
(注意以上命令的颜色仅是为了方便阅读,与命令本身无关)







边长25!霍,这可是15625个TNT!
那我们是不是可不可以想填充多少个就填充多少个?

……不行。
/fill命令的上限是,一次最多只能填充32768个方块

这实际上并没有多少方块。所以如果你想要一次性填充大量的方块,将需要分成几次执行命令。(或者干脆点,用WorldEdit这个mod/插件)

对/fill命令的另一个限制是,它不能在未加载的区块中填充,关于这部分的内容,请看系列第8帖。


1.1 方块状态

以下涉及较高级内容,可跳过,对后文无影响



1.2 模式

上面我们已经讲过了/fill命令的基础逻辑。
不过,除了指定范围和方块外,这个命令还可以更长:
我们还可以指定“ 模式 ”,或者说“原 方块处理方式 ”。

模式 ”指定了关于本命令的一些额外选项。这里的“模式”一共有5种:
replace(替换模式) destroy(摧毁模式) keep(保留模式) hollow(空心模式) ,与 outline(轮廓线模式)

格式:
  1. /fill <x> <y> <z> <x2> <y2> <z2> <方块ID> [destroy|hollow|keep|outline|replace]
复制代码

将上面5种模式之中的1种填写在命令的最后,你就可以赋予命令一些额外的选项。

下面,我们将详细说明这五种不同的模式。使用不同的模式执行命令将有不同的效果。


摧毁 模式 (destroy)

在本模式下,被替换掉的方块会像是被玩家破坏掉的一样,掉落为物品(如果可能的话),发出其破碎的声音,还会出现粒子效果。
比如:

/fill ~ ~ ~ ~8 ~8 ~8 glass destroy





替换 模式 (replace)

本模式与摧毁模式相反,选中区域方块会被无声无息地“替换”,而不会出现声音,掉落物等:
比如:

/fill ~ ~ ~ ~8 ~8 ~8 glass replace





注意替换模式是/fill命令的默认模式。如果你不指定模式那么游戏将会默认是替换模式。也就是说,下面的命令与上面的等价:

/fill ~ ~ ~ ~8 ~8 ~8 glass


但是replace模式除此之外还有一个神奇的功能,它能够替换一个特定的方块,而不是一股脑把区域的所有方块都替换掉。也可以叫做“方块筛选”
比如你可以说,只替换选中区域内的石头,不替换其他东西:
格式:
  1. /fill <坐标点1> <坐标点2> <方块ID> replace [<被替换的方块ID>]
复制代码


比如:
/fill ~ ~ ~ ~8 ~8 ~8 glass replace stone

将指定区域的石头替换为玻璃,其他保留不动:




注意上面。只有石头变成了玻璃,其他的则保留不变。
蛮有趣的吧

这种“过滤”的用法只有replace拥有,其他的模式都不可以。

以下涉及较高级内容,可跳过,对后文无影响



保留 模式 (keep)


保留模式与替换模式类似,但是它只替换空气方块,其他的方块保留原样。

比如:

/fill ~ ~ ~ ~8 ~8 ~8 glass keep




注意上面所有原有的方块不变,只有空气被替换了。

你可以发现上面的命令与这一条相同: 【注1】
/fill ~ ~ ~ ~8 ~8 ~8 glass replace air


(如果你知道MC除了空气还有虚空空气和洞穴空气的话。keep对于这三种空气都是有效的)

空心模式 ( hollow )

看名字就能明白,本模式所形成的正方体是空心的:
比如:


/fill ~ ~ ~ ~8 ~8 ~8 glass hollow




注意其“空心内部”的物品被替换为了空气,没有保留。



轮廓线模式 (outline)

与空心模式相似,但本模式只替换外层而不把“空心内部”替换为空气:
比如:


/fill ~ ~ ~ ~8 ~8 ~8 glass outline




注意与hollow模式不同,本模式不会将中间的内容替换为空气。



总结

下面对本帖的内容提供梳理:

-命令fill可以填充一片区域为指定方块,其格式为/fill <坐标点1> <坐标点2> <方块ID> [destroy|hollow|keep|outline|replace [<被替换的方块>]]
-其中坐标点1与2为由6个数字组成的两个坐标,其形成的对角线所属的长方体即为选中的区域
-方块ID为要填充的方块
  • 支持使用方块状态或NBT

-命令可以添加模式
  • 替换模式为直接替换
  • 摧毁模式会模拟被玩家破坏的情况
  • 保留模式只替换空气
  • 空心模式生成空心结构
  • 轮廓线模式只替换轮廓线

-使用替换模式时可加入方块筛选,使命令只替换指定的方块
  • 筛选支持方方块状态,NBT,与标签




以上就是本帖的全部内容了。本来是打算和clone二合一放在一起的……但是……我……我……算了。




附录,注释,与外部链接


注释

【1】由于另两种空气的存在,该命令不完全等价,但列举该命令只是为了方便理解,所以就不细究了。


#更新日志

Java 1.17/a  页面发布
Java 1.17/b  感谢chixvv的提醒,改正了一处误导信息
Java 1.17.1/a  感谢ruhuasiyu,现在修改了空气的信息(我第一次知道虚空空气是可以放的诶)

Java 1.18/a 1.18版本升级完成


彩蛋:










2021.12 数据,可能有更多内容 ☆【命令】命令教程&quot;真&quot;从零开始(十五)☆ ☆最接近神的一次:填充命令/fill☆


声明:
1. 本系列教程默认读者拥有关于Minecraft游戏本身的基础了解。
2. 本系列全部教程绝对适用于当前Java最新版 (1.17)
3. 本系列教程致力于基础原理而非使用方法,因为某些原因,这是本声明里最重要的一条。
4. 本教程 需要读者有特定的命令知识。这些这些内容在 下方表格中列出


需要前置知识:
请确保你理解下列的内容。下表的所有内容一定在本系列教程的某一帖讨论过,所以若您是从本系列第一帖起阅读至今,可以不用看。
对于跳跃式阅读的读者,还请检查一番:


带有本符号的内容是阅读本帖的大前提,您必须理解。
带有本符号的内容意味着,若您不清楚可能会对阅读本帖的特定片段造成困扰,但大体上可以理解。
点击链接可以跳转至对应教程:


有关命令基础格式 【命令】命令教程“真”从零开始 (一) 指令本身,选择器,与命令方块
有关坐标相对坐标,局部坐标 【命令】命令教程“真”从零开始 (二) 命令tp与相对,局部坐标与朝向锚
有关区块加载 【命令】命令教程“真”从零开始 (八) 区块与强制加载命令/forceload
有关/setblock与方块状态 【命令】命令教程“真”从零开始 (十) 简单,又新手(雾)的方块指令/setblock






本帖使用了较多的图片与GIF,可能加载较慢


前言


在我以前(很久以前)帮别人制作地图(指帮堆方块)的时候,经常想着要是能一下填充出我想要的形状就好了。


可惜,还在1.7.10的当时……还没有我们今天要讲的这条命令。


今天的内容就是,可以在指定区域填充方块的命令,/fill,


这里提醒:用这两条命令做一些技术手段还是可以的。
但是如果你想让它们帮你盖出你想要的形状或是房子那是高估它们了。


做好人,接近WorldEdit,远离 /fill与/clone!
1. 填充命令/fill


神奇的命令/fill,可以将一个矩形区域替换为指定的方块。
格式:

代码:

  1. /fill <坐标点1> <坐标点2> <方块>



命令/fill的逻辑十分简单:
指定两个坐标,其对角线形成的长方体就是选中的区域。该区域的所有空间均会被替换为后面指定的“&lt;方块&gt;”。
上面的“&lt;坐标点1&gt;“ 与 ”&lt;坐标点2&gt;”均是由3个数字所指定的坐标,所以,将格式展开显示就是这样的:

代码:

  1. /fill <x1> <y1> <z1> <x2> <y2> <z2> <方块>
(fill格式,简化版)


两个坐标形成的长方体的内容即是选中的区域,该区域内的内容均会被替换为指定的方块。


为了给你一个“两个坐标形成的长方体”的概念,请看下图:





图中,黄色方块与钻石块就是我们选中的两个坐标。红色玻璃就是它们的对角线,而绿色玻璃就是它们选中的区域。


简单地将黄色方块与钻石块的坐标填入&lt;坐标点1&gt; &lt;坐标点2&gt;,并将&lt;方块&gt;指定为石头(stone),即可得到:


/fill ~ ~ ~ ~8 ~8 ~8 stone


注意这里我使用了&quot;~&quot;相对坐标。这是为了方便您理解。
在使用中,您应该把它们替换为坐标。(除非相对坐标就是你想要的)


命令执行后,将会把指定的区域全部替换为石头:





上面的被选中的,8*8*8的区域中的内容被全部替换为石头
当然,8*8*8可能有点小?
我们也可以玩点疯狂的,比如,放置一个25×25×25的TNT堆:


/fill ~ ~ ~ ~25 ~-25 ~25 tnt
(注意以上命令的颜色仅是为了方便阅读,与命令本身无关)





咳咳:

我的电脑没能录下来后面发生的事
(所以,注意,下面的截图用的已经是另一张地图了)


边长25!霍,这可是15625个TNT!
那我们是不是可不可以想填充多少个就填充多少个?


……不行。
/fill命令的上限是,一次最多只能填充32768个方块


这实际上并没有多少方块。所以如果你想要一次性填充大量的方块,将需要分成几次执行命令。(或者干脆点,用WorldEdit这个mod/插件)


对/fill命令的另一个限制是,它不能在未加载的区块中填充,关于这部分的内容,请看系列第8帖。


1.1 方块状态


以下涉及较高级内容,可跳过,对后文无影响
系列第十帖 ,我们有讲过方块状态。这是一种用来决定方块形式的东西,比如类似台阶类方块是上面一层还是下面一层这类的问题。


/fill命令可以指定方块状态。如果你不知道是什么是方块状态,请去看系列第十帖。


比如:


/fill ~ ~ ~ ~8 ~8 ~8 birch_slab[type=bottom]
将目标区域替换为下半的白桦树台阶


fill同样支持NBT,但不做举例。有兴趣可以查看本系列第11帖,


1.2 模式


上面我们已经讲过了/fill命令的基础逻辑。
不过,除了指定范围和方块外,这个命令还可以更长:
我们还可以指定“ 模式 ”,或者说“原 方块处理方式 ”。


模式 ”指定了关于本命令的一些额外选项。这里的“模式”一共有5种:
replace(替换模式) destroy(摧毁模式) keep(保留模式) hollow(空心模式) ,与 outline(轮廓线模式)


格式:

代码:

  1. /fill <x> <y> <z> <x2> <y2> <z2> <方块ID> [destroy|hollow|keep|outline|replace]

将上面5种模式之中的1种填写在命令的最后,你就可以赋予命令一些额外的选项。


下面,我们将详细说明这五种不同的模式。使用不同的模式执行命令将有不同的效果。


摧毁 模式 (destroy)


在本模式下,被替换掉的方块会像是被玩家破坏掉的一样,掉落为物品(如果可能的话),发出其破碎的声音,还会出现粒子效果。
比如:


/fill ~ ~ ~ ~8 ~8 ~8 glass destroy





替换 模式 (replace)


本模式与摧毁模式相反,选中区域方块会被无声无息地“替换”,而不会出现声音,掉落物等:
比如:


/fill ~ ~ ~ ~8 ~8 ~8 glass replace





注意替换模式是/fill命令的默认模式。如果你不指定模式那么游戏将会默认是替换模式。也就是说,下面的命令与上面的等价:


/fill ~ ~ ~ ~8 ~8 ~8 glass


但是replace模式除此之外还有一个神奇的功能,它能够替换一个特定的方块,而不是一股脑把区域的所有方块都替换掉。也可以叫做“方块筛选”
比如你可以说,只替换选中区域内的石头,不替换其他东西:
格式:

代码:

  1. /fill <坐标点1> <坐标点2> <方块ID> replace [<被替换的方块ID>]



比如:
/fill ~ ~ ~ ~8 ~8 ~8 glass replace stone


将指定区域的石头替换为玻璃,其他保留不动:





注意上面。只有石头变成了玻璃,其他的则保留不变。
蛮有趣的吧


这种“过滤”的用法只有replace拥有,其他的模式都不可以。


以下涉及较高级内容,可跳过,对后文无影响


你也可以在方块筛选上添加方块状态


将所有的下半的白桦木台阶替换为玻璃:


/fill ~ ~ ~ ~8 ~8 ~8 glass replace birch_slab[type=bottom]





不只是方块状态,你也可以选中一个标签进行替换。关于标签的内容在 第13帖 简单地提过,可以去看。
比如:
/fill ~ ~ ~ ~8 ~8 ~8 glass replace #wool
将所有的羊毛无论颜色替换为玻璃:





将标签与方块状态混合也是允许的:


把所有上半的台阶无论种类替换为玻璃:


/fill ~ ~ ~ ~8 ~8 ~8 glass replace #slabs[type=top]


保留 模式 (keep)


保留模式与替换模式类似,但是它只替换空气方块,其他的方块保留原样。


比如:


/fill ~ ~ ~ ~8 ~8 ~8 glass keep





注意上面所有原有的方块不变,只有空气被替换了。


你可以发现上面的命令与这一条相同: 【注1】
/fill ~ ~ ~ ~8 ~8 ~8 glass replace air


(如果你知道MC除了空气还有虚空空气和洞穴空气的话。keep对于这三种空气都是有效的)


空心模式 ( hollow )


看名字就能明白,本模式所形成的正方体是空心的:
比如:


/fill ~ ~ ~ ~8 ~8 ~8 glass hollow





注意其“空心内部”的物品被替换为了空气,没有保留。


轮廓线模式 (outline)


与空心模式相似,但本模式只替换外层而不把“空心内部”替换为空气:
比如:


/fill ~ ~ ~ ~8 ~8 ~8 glass outline





注意与hollow模式不同,本模式不会将中间的内容替换为空气。


总结


下面对本帖的内容提供梳理:


-命令fill可以填充一片区域为指定方块,其格式为/fill &lt;坐标点1&gt; &lt;坐标点2&gt; &lt;方块ID&gt; [destroy|hollow|keep|outline|replace [&lt;被替换的方块&gt;]]
-其中坐标点1与2为由6个数字组成的两个坐标,其形成的对角线所属的长方体即为选中的区域
-方块ID为要填充的方块
  • 支持使用方块状态或NBT

-命令可以添加模式
  • 替换模式为直接替换
  • 摧毁模式会模拟被玩家破坏的情况
  • 保留模式只替换空气
  • 空心模式生成空心结构
  • 轮廓线模式只替换轮廓线

-使用替换模式时可加入方块筛选,使命令只替换指定的方块
  • 筛选支持方方块状态,NBT,与标签



以上就是本帖的全部内容了。本来是打算和clone二合一放在一起的……但是……我……我……算了。


附录,注释,与外部链接


注释


【1】由于另两种空气的存在,该命令不完全等价,但列举该命令只是为了方便理解,所以就不细究了。


#更新日志


Java 1.17/a页面发布
Java 1.17/b感谢chixvv的提醒,改正了一处误导信息Java 1.17.1/a感谢ruhuasiyu,现在修改了空气的信息(我第一次知道虚空空气是可以放的诶)


彩蛋:


tnt是假的啦:



TNT不会爆炸偶
但就这样也很卡


上一篇: 【命令】命令教程“真”从零开始(十四)修改属性/attribute【一拳打爆末影龙】 系列《命令教程“真”从零开始》 前往来自 麻瓜草稿簿 系列教程索引 【命令】命令教程“真”从零开始 (一) 指令本身,选择器,与命令方块
【命令】命令教程“真”从零开始 (二) 命令tp与相对,局部坐标与朝向锚
【命令】 命令教程“真”从零开始 (三) 四个新手指令
【命令】 命令教程“真”从零开始 (四) 有关队伍命令/team的……差不多一切
【命令】命令教程“真”从零开始 (五) 记分板与/scoreboard
【命令】 命令教程“真”从零开始 (六) /tag指令,与进阶~选择器参数
【命令】命令教程“真”从零开始 (七) 新手指令杂烩2号
【命令】命令教程“真”从零开始 (八) 区块与强制加载命令/forceload
【命令】命令教程“真”从零开始 (九) 调整苦力怕防爆,防喷/gamerule
【命令】命令教程“真”从零开始 (十) 简单,又新手(雾)的方块指令/setblock
【命令】命令教程“真”从零开始 ( X ) 我就不信不能用大白话讲清楚NBT
【命令】命令教程&quot;真&quot;从零开始(十二)数据运算三方法之一修改NBT/data
【命令】命令教程“真”从零开始(十三)给予与替换物品,命令/replaceitem
【命令】命令教程“真”从零开始(十四)修改属性/attribute【一拳打爆末影龙】 【命令】命令教程“真”从零开始(十五)最接近神的一次:填充命令/fill 【命令】命令教程&quot;真&quot;从零开始(十六)复制一片区域:复制命令/clone


下一篇: 【命令】命令教程&quot;真&quot;从零开始(十六)复制一片区域:复制命令/clone