声明:
1. 本系列教程默认读者拥有关于Minecraft游戏本身的基础了解。
2. 本系列全部教程适用于当前Java最新版 (1.17) 。但 本帖的内容 适用于1.16之前。
3. 本系列教程致力于基础原理而非使用方法,因为某些原因,这是本声明里最重要的一条。
4. 本教程 需要读者有特定的命令知识。这些这些内容在 下方表格中列出 :
需要前置知识:
请确保你理解下列的内容。下表的所有内容一定在本系列教程的某一帖讨论过,所以若您是从本系列第一帖起阅读至今,可以不用看。
对于跳跃式阅读的读者,还请检查一番:
前言
我要一背包的钻石快!
满足你!
只要简单地执行下面的命令:
- /give @p diamond_block 2304
那今天,我们就来看看这个神奇的命令,给予命令 /give 。
当然不止。除了该命令,今天我们的内容还包括了清除物品命令/clear,与可以替换容器物品的命令/replaceitem。
让我们开始吧
1. 命令/give
这是一个十分简单又常用的命令,可以给予玩家一定数量的特定物品。
格式:
- /give <目标> <物品ID> [<数量>]
目标处应指定一 玩家 ID或选择器 或UUID ,为“要给谁物品”。<物品ID>则是那个要给予的物品的ID。[<数量>]作为一个可选元素,可以指定给予的数量。若不指定数量会默认为1个。
比如:
- /give @a diamond_block 64
注意“diamond_block”是钻石块的ID。
或:
- /give @a stone
由于没有指定数量,所以数量默认为一。
有一点,请不要被“1组=64个”的这个概念限制了。/give是可以接受大于64的数字的,比如:
- /give @a diamond_block 128
这是个相当简单的命令,不必多说。
对于不知道物品ID的读者,可以前往 Wiki本页面查看 ,或在游戏中按下F3+H(若键盘有fnLock,则按下fn+F3+H),显示更详细的的标签提示,即可直接看到ID:
如图,圈起来的就是ID。前面的minecraft:是命名空间,一般可以省略……对于这部分内容在 系列第十帖 有着较详细的描述。
上面就是/give的全部内容了……但是较有意思的一点是,/give命令的实质并不是修改玩家的物品栏,而是在玩家的精准位置生成一个可以被瞬间捡起的掉落物……所以当目标的背包满的时候使用/give,物品会掉出来。
(所以说,/give的功能完全可以用/summon加NBT实现(啊,要用execute来确定玩家位置))
/give命令可以使用NBT来获取特殊的物品,比如锋利lv.9999的钻石剑之类的……这部分内容在系列第十一帖讲述,若感兴趣请移步 【命令】命令教程“真”从零开始 ( X ) 我就不信不能用大白话讲清楚NBT [1.16] 。
这里简单举个NBT例子:
- /give @a crossbow{Charged:1b} 2
给予所有玩家两把上弦( Charged : 1 b ) 【注1】 的弩。
2. 命令/clear
有了给予命令,我们当然也少不了可以清除物品的清除命令。
命令/clear可以清除玩家背包内特定物品。
格式:
- /clear [<目标>] [<物品>] [<最大数量>]
如:
- /clear @s tnt 16
注意最后面的元素“[<最大数量>]”是可选的。若不指定一个最大数量,命令将会清除所有物品:
- /clear @s dirt
有一个很有趣的事实是,这个最大数量可以为0:
- /clear @s dirt 0
这……好像没用啊。清除0个和没执行命令有什么区别么?
有。
虽然没有对玩家的实际影响,但该命令却可以找出这名玩家身上 有没有 泥土。
当你尝试清除的玩家身上并没有目标物品时,命令会 执行失败 ,但是如果有,虽然清除了0个,但命令会 执行成功 。
你可以将本命令输入进条件制约的连锁型命令方块上,来侦测玩家是否拥有特定物品。
(当然……这玩意在/execute store中还可以找出物品的数量,但这里就不多说了)
接下来,你可能注意到了,不只是数量时可选元素,就连[<物品ID>]也是。
当你不指定物品ID时,命令会清除玩家身上的所有物品:
- /clear @r
然后,目标本身也是可选元素。若不指定要清除的目标,命令会清除执行者身上的物品:
- /clear
2.1 标签
然而,/clear命令并不是只能清除全部或单个物品。
我们还可以清除一整个标签的物品——这么说:
游戏内置(或通过数据包添加)中,对于特定的一些物品,用一种叫做 标签(tags) 的东西将它们“归类”了起来。
(注意这里的标签和NBT或/tag没有关系,不要混淆)
比如,你想清楚玩家身上的所有铁砧。但是你应该知道铁砧有很多种类,比如轻微损坏的铁砧,严重损坏的铁砧等。
如果你想要把全部的三种铁砧清除,你将需要三条命令。
不过我们有一种更便捷的方法,那就是用标签:
- /clear @a #anvil
“ # anvil ”就是“铁砧标签”的意思。
本命令会清除所有损坏程度的铁砧。
同样:
- /clear @a #bed
- /clear @a #logs
- /clear @a #beacon_payment_items
正常来讲,这包括了铁锭,金锭,钻石,绿宝石,和下界合金锭。
那么,你该在哪里查找可用的标签呢?
简单,在 Wiki的标签页面 。
注意:
1. 标签不是用来给你便捷地使用的……标签在游戏中的用处还有很多……我们以后会说。
2. 若你的世界按装了数据包(原版模组),或者模组,那么标签的内容 可能被更改 。
以下内容涉及NBT,可跳过
3. 替换物品命令/replaceitem
命令/replaceitem,可以 替换 方块(箱子、熔炉等)或实体(玩家或生物)物品栏内 特定位置 的物品。
格式:
- /replaceitem (block <x> <y> <z> | entity <选择器>) <栏位> <物品> [<数量>]
紧接其后的是“<栏位>”,即要替换容器或物品栏的哪一格。
最后面的即是要替换的<物品>与其数量(若不指定默认为1)。
比如:
- /replaceitem @p weapon.mainhand carrot 1
蛮简单吧。现在的唯一问题就是,栏位要填啥?如何指定物品栏或容器内的特定物品?
栏位的ID由两部分组成。大概长这样: 类别.位置
类别 规定了这是哪里的东西,而 位置 则是具体位置。
比如上面的例子“ weapon.mainhand ”中, weapon 是武器的意思。哪里的武器呢? mainhand (主手)的。
我们也可以有 weapon.offhand ,即副手物品。 offhand 就是副手。
下面是所有可供选择的“类别”:
我们有 weapon ,即武器(主副手)。
我们有 armor ,即盔甲栏。
有 inventory ,背包内的。
有 hotbar ,快捷栏上的。
有 enderchest ,末影箱里的。
有 horse ,马匹的东西,包括鞍与马铠,与其箱子内的东西。
还有 villager ,村民拥有的。
最后是容器的,无论是箱子漏斗发射器: container 。
嘛,我在这里可能说不太清,但你只要看向这个表格就好了:
|
栏位
|
栏位编号
|
描述
|
| armor . head |
-
|
盔甲栏。从上到下分别是头盔,胸甲,护腿,和靴子。
仅对盔甲架、生物及玩家有效(并非所有生物会显示或利用这些物品) 除了头部外,无法替换非护甲类物品。如你可以在玩家的头部装备栏放一块玻璃,但不能在胸甲放。 |
|
armor
.
chest
|
-
|
|
|
armor
.
legs
|
-
|
|
| armor . feet |
-
|
|
|
weapon
.
mainhand
或 weapon |
-
|
手持物。
mainhand
是主手,
offhand
是副手。对于玩家,
mainhand
为其选中的格子。
仅对盔甲架和生物有效(虽然并非所有生物会显示或利用这些物品)。 weapon 与 weapon . mainhand 效果一致 |
| weapon . offhand |
-
|
|
| hotbar . 栏位编号 |
0到8
|
仅玩家:玩家 快捷栏 。需将 栏位编号 替换为0~8的数字以代表快捷栏的特定位置。这个栏位编号是从左往右从0开始算的。如, hotbar.0 代表快捷栏第一位(最左), hotbar.4 是中间那格, hotbar.8 是最右侧的那格。 |
|
enderchest
.
栏位编号
|
0到26
|
仅玩家:玩家 末影箱 。需将 栏位编号 替换为0~26的数字以代表末影箱的特定位置。这个 栏位编号 是从左往右,从上到下排列的。 栏位编号 从零开始算起。如, enderchest.0 代表末影箱第一格(左上角), enderchest.17 是第二行最后一个, enderchest.26 是最后一格(右下角)。 |
| inventory . 栏位编号 |
0到26
|
仅玩家、漏斗矿车和运输矿车:物品栏。需将
栏位编号
替换为0~26的数字。编号从左到右从上到下算起。如
inventory
.
0
为背包最左上角。
inventory.26
为背包右下角。注意
不计算快捷栏
。替换快捷栏物品应使用hotbar。
由于漏斗矿车只有五格,所以无法对其使用 5或以上 的栏位编号。 |
|
horse
.
saddle
|
-
|
仅马、驴和骡的鞍。
必须
替换为鞍或空气(清空)
,不然无法成功替换。
|
|
horse
.
chest
|
-
|
仅马、驴和骡的箱子(箱子本身,不是其内容)。
必须
替换为
箱子
或空气(清空)
,不然无法成功替换。
|
| horse . armor |
-
|
仅马和羊驼; 必须替换为马铠(马)或地毯(羊驼) 或空气(清空) ,不然无法成功替换。 |
| horse . 栏位编号 |
0到14
|
驮箱子的驴和骡: 其箱子内的东西。需将需将 栏位编号 替换为0~14的数字以代表特定位置。计数顺序与上面的一样。 |
| villager . 栏位编号 |
0到7
|
仅村民: 这是村民所拥有的东西。需将需将 栏位编号 替换为0 ~ 7的数字 |
| container . 栏位编号 |
0到7
|
对于
任意容器
或
物品展示框
:这是其中包含的物品。对于箱子、发射器、投掷器、漏斗或陷阱箱,其
栏位编号
从左上角“0”开始,之后从左到右,从上到下递增。根据容器的不同,最大到26。
|
上面的就是所有你可以填写的栏位了。我本来想参考Wiki偷偷懒的,结果Wiki竟然很多是错的!(当然,被我改正了)。下面举几个例子:
- /replaceitem entity @r enderchest.8 stone 6
注意原物品会消失。
- /replaceitem entity @a hotbar.0 sand
- /replaceitem entity @e[type=donkey] horse.chest chest
- /replaceitem entity @e[type=donkey] horse.chest air
当你想要将特定位置物品清空,将物品ID指定为air(空气)即可。
- /replaceitem block ~ ~ ~ container.4 diamond 64
- /replaceitem entity @a armor.head glass
好,这样应该够了。
最后的几件事是,本命令可以使用NBT,和在give与clear中一样。
/replaceitem是无法突破堆叠上限的……比如你无法替换64个药水。嗯。
而且/replaceitem命令运行时是没有动画或提示的。而/give至少会有捡起物品的“破"的一声。
后记
以上就是本期所有内容了。
前面的两帖,NBT与/data的教程自我感觉其实不咋好……但是也不知道怎么改。判断为还太菜理解不够……但是这不是想明白就能解决的。
那就先放哪,等我把这个系列写完,也许就知道怎么改了。
那,这一帖,与接下来几帖都很简单……最难的就是/attribute了。
直到JSON文本之前都很简单。对。
那,如果你有学到什么的话,请支持一下作者吧……反正给人气又不会扣你自己的。
再见。
注释
【1】但是无法射击,因为没说填了啥
#更新日志
Java 1.16.5/a 页面发布
Java 1.16.5/b 删除了一个多余的空格,改正了钻石的英文。
Java 1.16.5/c 添加了关于/item的提示。
Java 1.16.5/d 添加了关于物品展示框的说明。
Java 1.17/a 1.17更新完成,添加了/give数量限制
上一篇: 【命令】命令教程"真"从零开始(十二)数据运算三方法之一修改NBT/data
系列《命令教程“真”从零开始》
前往来自 麻瓜草稿簿 的 系列教程索引
下一篇: 【命令】命令教程“真”从零开始(十四)修改属性/attribute【一拳打爆末影龙】
