专栏/MC命令教程“真”从零开始 (十四) 最接近神的一次:填充命令/fill

MC命令教程“真”从零开始 (十四) 最接近神的一次:填充命令/fill

2024年09月01日 01:25--浏览 · --点赞 · --评论
粉丝:1014文章:17

这是原载于MCbbs论坛上的命令教程。随着论坛的消失,这系列教程经修缮(可能需要几天时间)后被迁移至此。

本文某种程度上是一个白话版的Wiki。

作者不保证对本教程的维护和更新(全随兴致),请您自行判断内容是否过时。不过,若有更多问题欢迎在评论区提出。

教程声明:

  1. 系列教程默认读者是按照顺序阅读的

  2. 教程默认读者有对Minecraft的基础了解

  3. 教程主要注重基础原理,实践内容极少

  4. 本篇教程适用于Java 1.21,但绝大部分内容也适用于1.13+

前言


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

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

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

这里提醒:用这两条命令做一些技术手段还是可以的。

但是如果你想让它们帮你盖出你想要的形状或是房子那是高估它们了。这时你需要的是辅助模组,比如WorldEdit或Axiom。


1. 填充命令/fill


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

格式:

命令/fill的逻辑十分简单:

指定两个坐标,其对角线形成的长方体就是选中的区域。该区域的所有空间均会被替换为后面指定的“<方块>”。

上面的“<坐标点1>“ 与 ”<坐标点2>”均是由3个数字所指定的坐标,所以,将格式展开显示就是这样的:

(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个方块。在1.19.4之后,这个上限可以被游戏规则commandModificationBlockLimit更改。详见第九篇。

这实际上并没有多少方块。所以如果你想要一次性填充大量的方块,在1.19.4之前,你将需要分成几次执行命令。(如果你填充方块是个一次性事件(比如为了建筑),干脆点,用WorldEdit等辅助模组)

同时,一次性/fill大量方块可以说是游戏中最耗费性能的行为之一。如果数量过于庞大会引起长时间的卡顿,无响应,甚至崩溃。

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


1.1 方块状态

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

在系列第十篇,我们有讲过方块状态。这是一种用来决定方块形式的东西,比如类似台阶类方块是上面一层还是下面一层这类的问题。

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

比如:

将目标区域替换为下半的白桦树台阶

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


2. 模式


上面我们已经讲过了/fill命令的基础逻辑。

不过,除了指定范围和方块外,这个命令还可以更长:

我们还可以指定“模式”,或者说“原方块处理方式”。


模式”指定了关于本命令的一些额外选项。这里的“模式”一共有5种:

replace(替换模式),destroy(摧毁模式),keep(保留模式),hollow(空心模式),与outline(轮廓线模式)。


格式:

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

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


  -  摧毁模式 (destroy)


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

比如:

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


摧毁模式


  -  替换模式 (replace)


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

比如:

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

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

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

但是replace模式除此之外还有一个神奇的功能,它能够替换一个特定的方块,而不是一股脑把区域的所有方块都替换掉。也可以叫做“方块筛选”

比如你可以说,只替换选中区域内的石头,不替换其他东西:

格式:

比如:

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

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


只替换玻璃

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

蛮有趣的吧

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


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

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

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

不只是方块状态,你也可以选中一个标签进行替换。标签可以理解为一个个的“种类”。比如标签"#wool"(也就是“羊毛”的意思)包含了所有颜色的羊毛。

比如:

将所有的羊毛无论颜色替换为玻璃:

#wool

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

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

图中的命令其实是birch_slab,不过是一样的。

你可以使用自定义标签,也可以在Wiki此处寻找所有游戏默认的标签。


  -  保留模式 (keep)


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

比如:

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

只替换空气

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

你可以发现上面的命令与这一条相同:

由于另两种空气的存在(洞穴空气和虚空空气,见Wiki),该命令不完全等价,但列举该命令只是为了方便理解,所以就不细究了。


  -  空心模式 (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,与标签


投诉或建议