第十三章 clear-清除物品的指令
2020年1月5日 13:09 1917字
(该章节最后大修于2025年11月22日)
我们第一个学习的指令是 /give,作用是给予玩家一样物品。有正必有负,Minecraft 还有一条指令,和 /give完全相反,这条指令就是 /clear。(该章节最后大修于2025年11月22日)
clear 在英文中有三种意思,分别是:
- 清楚地;明白的。
- 清除;不再受阻。
- 离开;不靠近。
/clear
作用:清除玩家的单个或所有物品。
需要权限等级:Java-2,基岩-1
格式:
Java1.12.2 之后
/clear [目标选择器:玩家] [物品ID:字符串] [清除的最大数量:Int整数]基岩版和 Java1.13 之前
/clear [目标选择器:玩家] [物品ID:字符串] [要清除物品的数据值:Int整数] [清除的最大数量:Int整数]目标选择器——这个必须填玩家。不填默认为命令执行者,即清除命令执行者(自己)的所有物品。
物品名——可以填需要清除的指定物品其 ID,不填默认清除指定玩家的所有物品。
要清除物品的数据值——这个如果不填,即同时不填数量(接下来这个参数)和这个参数,或只填写-1,将会只清除所有指定玩家具有指定物品ID的物品,而不会检查其数据值。
清除的最大数量——默认是全部清除(相当于填 -1),填的话可以指定一次清除最大清除多少物品。注意是最大!也就是说,就算背包里的指定物品没有达到最大数量,还是一样会被清除。
在之前的 /give,我们遇到的数据值参数填 -1 和 0 并没有区别。但在这里,若数据值填写 -1 和 0 就有区别了!
例如(以下故事和人物纯属虚构,如有雷同,可能不是巧合),玩基岩版或 Java1.12.2 的你,此时假设你现在在背包中拥有一些橡木和云杉木。你花了整整 1 个小时的时间采集了这些木头,以扩张你的农庄。但是,此时一位邪恶的腐竹盯上了你,由于你砍伐了大量的树木而没有践行可持续发展的理念,这位腐竹决定给你一点教训。
跨过山和大海,穿过人山人海,你终于到达了你的农庄。而此时,这位腐竹已经通过插件看透了你的背包,并准备了以下指令:
/clear @a[name="lbwnb"] log 0
激动万分的时刻到了!你颤抖地打开了工作台,开启农庄扩建的第一步。但就在你正要将橡木放进工作台的时候,突然之间,全部橡木消失了!
<[生存 1 区]lbwnb>?
<[生存 1 区]lbwnb>为啥我一大堆橡木突然不见了?(
<[生存 2 区]YYT>???
<[生存 1 区]lbwnb>但云杉木还在啊?
也许是这个土豆服务器刚好吃掉了你的橡木。运气问题?这么想着,你又花了亿点时间收集了足够多的橡木。以防万一,过程中每过几分钟你都会检查一遍背包里,然而一切正常。但是在暗处,有一个隐形的人一直在背后跟踪着你,ta 已经准备好了第二条指令:
/clear @a[name="lbwnb"] log -1
<[生存 1 区]lbwnb>xdm我要打开工作台了,祝天下再无土豆服务器!
<[生存 2 区]YYT>awa
<[生存 1 区]lbwnb>???
<[生存 1 区]lbwnb>好了,这下所有原木都不见了(
你刚想抨击一下这个土豆服务器,突然之间,一道金光闪瞎了你的 24K 钛合金狗眼!
<工作台之神>年轻的 lbwnb 哟!刚才服务器吞掉的是这些金块还是这些钻石块?
你一脸懵逼,回答说:“不是,是一堆木头(”
<工作台之神>诚实的好孩子,这是你的木头。为了奖励你的诚实,既然你这么需要木头,那么老夫再送你一些树苗~
你还来不及感到失望,然后就见到了混杂在一堆树苗中的点券......
注意到了吗?第一个指令中,腐竹使用了 0 作为数据值,清除了你的全部橡木。而第二条指令使用了 -1 作为数据值,却清除了你的全部原木!这是为什么?
如果你在 Minecraft Wiki 上做一番调查,就会发现橡木和云杉木其实共用了同一个物品(方块) ID,也就是 minecraft:log。为了区分这两种木头,橡木使用了 0 作为数据值,而云杉木和其他木头使用了更大的值作为数据值。因此,当指定数据值为 0 时,其实就相当于指定了需要清除的木头种类,即橡木原木。但数据值一定是一个非负整数,而 -1 是一个负数,这意味着 -1 不可能代表一个特定的木头种类。那么 -1 代表什么呢?
匹配当前物品 ID 下的所有物品种类!
下面举个栗子:
/clear @a diamond 0 1
这个是以基岩版的格式为基础的,Java 版 1.12.2 之后版本需去掉那个 0。意思是清除所有玩家物品栏里的数据值是 0 的钻石,并且只清除 1 颗。
需要注意,clear这条指令及其特殊,它的数据值参数是在数量参数前面的,而不是填完数量参数再填数据值参数!
清除的最大数量可以填0。但是填0又有什么用呢,这又不会清除任何物品?
实际上,这个操作及其有用,因为我们可以通过填0来探测一个玩家背包里是否有指定物品!比如:
/clear @p minecraft:diamond_sword -1 0 {display:{Name:"天空之脊"}}
就可以在 Java1.13 以下版本中检测该玩家是否持有一把叫做“天空之脊”的钻石剑。若要在Java1.13及以上版本使用,则需要改为:
/clear @p minecraft:diamond_sword{display:{Name:"\"天空之脊\""}} 0
(没错,后面那串就是 NBT,这串自定义名字的具体操作会在第一百零四章:物品的显示属性讲到)
如果该玩家并没有持有天空之脊,那么将会返回:
无法清除 XXX 的物品栏,没有可清除的物品
如果该玩家持有一把,那么将会返回:
XXX 有1个符合条件的物品
可惜的是,到底有多少物品只会显示,却不会通过红石比较器转换为红石信号。