/clear 清除物品
清除玩家物品栏中的物品,支持按物品 ID 与数据值过滤,可用于检测物品存在
清除玩家物品栏中指定物品,支持按物品 ID 与数据值过滤清除数量与物品变体。基岩版自 1.0.5 起加入此命令;与 Java 版相比,基岩版额外保留 data(数据值)参数,并且会清除玩家正被光标拿起的物品。
原理
/clear 操作的底层对象是玩家的物品栏容器。在基岩版中,玩家的物品栏被组织为若干固定槽位,包括 9 个快捷栏槽、27 个主物品栏槽、4 个盔甲槽与 1 个副手槽,此外还有一个「光标槽」用于临时承载玩家在打开容器或物品栏时被指针拖起的物品堆。每个槽位保存一个物品堆,物品堆由物品 ID、堆叠数量以及用于区分变体的数据值组成。因此 /clear 本质上是一个「遍历槽位—匹配过滤器—扣减数量」的过程,它只修改玩家物品栏的内存状态,不触碰方块实体或世界中的掉落物。
命令执行时,先把 [玩家] 解析为一个或多个在线玩家,再根据参数构造过滤器:[物品] 限定物品 ID,[数据值] 限定物品变体,[最大数量] 限定本次最多清除的总个数。解析器遍历目标玩家物品栏的每个槽位,对每个物品堆比对物品 ID 与数据值,命中后从该物品堆中扣减数量,累计扣减达到 [最大数量] 即停止,数量被扣到 0 的槽位被清空。当 [最大数量] 小于玩家实际持有数量时,只会清除其中一部分,其余物品保留在原槽位。
[数据值] 对应基岩版旧版的物品变体系统:同一物品 ID 下用数值区分不同变体,例如 wool 1 表示橙色羊毛,stone 1 表示花岗岩。传入 -1 或缺省表示不关心数据值,匹配该物品 ID 的所有变体;传入的数值会先按 65535(0xFFFF)做按位与运算,若对指定物品无效则回退为 0。当 [最大数量] 为 0 时,命令进入「查询模式」:不删除任何物品,只检测目标是否持有匹配物品,成功计数等于持有该物品的玩家数,因此常被用作条件判断的手段。
/clear 的作用范围仅限于玩家物品栏与光标槽,不会删除以掉落物实体形式存在于世界中的物品,也不直接改动箱子、工作台等方块容器——只有当玩家从容器中把物品拖到光标上时,该物品才进入命令的清除范围。查询模式使 /clear 能与条件命令方块、/execute 的 if 子命令以及红石比较器配合,构成「检测玩家是否持有物品」的通用检测器。若目标玩家没有任何匹配物品、目标选择器无法解析到在线玩家,或执行者不是玩家且未指定目标,命令会失败并返回成功计数 0。
语法
基岩版:
/clear [玩家] [物品] [数据值] [最大数量]
Java 版(对照):
/clear [目标] [物品] [最大数量]
参数
[玩家]— 玩家类型的目标选择器或玩家名。指定要清除物品的玩家,只能指向玩家(如@p、@a、@s),不能解析到非玩家实体。缺省时默认为命令执行者本人;若执行者是命令方块或服务器控制台且未指定该参数,命令会失败。[物品]— 物品 ID 或存在物品形式的方块 ID。指定要清除的物品,缺省时清除目标物品栏中的所有物品。基岩版中minecraft:命名空间前缀可省略(如diamond、stone、wool)。[数据值]— 整数。指定要匹配的物品数据值,用于区分同一物品 ID 的不同变体;缺省或为-1时匹配该物品 ID 的所有变体。取值范围 -1 到 2147483647,传入值会先按 65535(0xFFFF)做按位与运算,对指定物品无效的值回退为 0。[最大数量]— 整数。指定最多清除的物品总个数;缺省或为-1时清除所有匹配物品。为0时进入查询模式,不清除任何物品,只检测目标是否持有匹配物品。取值范围 -1 到 2147483647。
示例
清空自己的整个物品栏:
/clear
清除命令执行者快捷栏、主物品栏、盔甲栏与副手栏中的所有物品。
清除所有玩家的钻石:
/clear @a diamond
删除服务器中每个在线玩家物品栏里的全部钻石,其它物品不受影响。
清除所有玩家的橙色羊毛:
/clear @a wool 1
只清除数据值为 1(橙色)的羊毛,其它颜色的羊毛保留在原位。
仅清除最近玩家的 5 个泥土:
/clear @p dirt -1 5
最多从最近玩家物品栏中移除 5 个泥土;若不足 5 个,则清除其持有的全部泥土。
检测随机玩家是否持有石头(不清除):
/clear @r stone 0 0
不删除任何物品,只检测随机一名在线玩家是否持有石头;若持有则命令成功,可配合条件命令方块或 /execute 使用。
基岩版注意
- 需要开启作弊并具备 OP 等级 1。
- 与 Java 版不同,基岩版语法多一个
[数据值]参数;Java 版自 1.13 起已移除数据值参数,改用独立物品 ID(如orange_wool对应橙色羊毛)。 - 基岩版会清除玩家正被光标拿起的物品,包括从自己物品栏或容器中拖起的物品;Java 版只有在非创造模式下才会清除这类光标物品。
- Java 版自 1.16 起会清除 2×2 合成栏中的物品;基岩版是否清除合成栏中的物品需以实际游戏测试为准(待验证)。
- 数据值系统正被独立物品 ID 逐步取代,新版推荐直接使用
orange_wool等独立 ID 而非wool 1,但/clear的[数据值]参数在当前版本仍然可用。
常见问题
为什么 `/clear @a diamond` 没有清除钻石?
先确认目标玩家是否真的持有钻石,以及执行者是否具备 OP 等级 1 且世界已开启作弊。若玩家物品栏中没有钻石,命令会失败并返回成功计数 0,不产生任何效果。同时注意不要误加数据值:写成 /clear @a diamond 1 只会清除数据值为 1 的钻石(通常不存在),应省略数据值或写 -1。
如何只检测物品而不清除?
把 [最大数量] 设为 0,例如 /clear @p stone 0 0。命令不会删除任何物品,只返回「持有该物品的玩家数」,可配合条件命令方块或 /execute 的 if 子命令做条件判断。
`/clear` 能清除掉落物或箱子里的物品吗?
不能。掉落物是世界中的实体,箱子是方块实体,/clear 只作用于玩家的物品栏(含快捷栏、主物品栏、盔甲栏与副手栏)和光标槽。清理掉落物可用 /kill 配合 @e[type=item] 选择器。
`[数据值]` 参数是什么意思?
基岩版旧版用数据值区分同一物品 ID 的不同变体,例如 wool 0 到 wool 15 对应 16 种颜色的羊毛。传 -1 表示匹配所有变体。新版本推荐直接使用独立物品 ID,例如橙色羊毛写作 orange_wool 而非 wool 1。