阅读前提示
前言
你完全不会命令是吗?你因为不会命令而被嘲笑吗?又或者是看到命令生成器给出的命令完全不理解吗?
(除非是特别高深的,那这篇教程是不能帮到你的!这篇教程仅给入门的“小萌新”提供的。)
这个教程或许可以帮到你!
Minecraft版本:BE 1.21.10(网易手游版 3.5)
注意事项
该教程针对于基岩版(Bedrock Edition)1.21.10的Minecraft制造,如果你的游戏版本较低或为Java版(Java Edition),请酌情阅读该教程。
该教程并没有所有指令及所有语法的解析,但对于入门已经足够使用。
除表明无需开启作弊或无需拥有管理员权限也能使用,其它的所有指令都将需要打开作弊或需要管理员权限才能使用的指令!
最好是从上往下看而不是直接使用目录来直接定位一个指令,该教程不会重复上述所解析的语法。
该教程会继续完善表明了未完成和未知的内容,以及更多的指令。(若停更,这行将会删除。)
该教程已直接独立为基岩版指令教程,其原因:①当前环境下Java指令极其少见且基础逻辑与语法与基岩版相同;②目前百科站内已有针对于Java版的指令教程(虽暂停更);③本教程几乎完全遗弃了Java版更新条目,为防止影响阅读移除。
格式提醒 - 在用法中的命令
尖括号 - 应填尖括号内所对应的内容
你应该填入什么内容。例如:<目标>。
| - 选填
在众多的选项里自己选一个。例如:a|b|c。
中括号 - 可填可不填,应填中括号内所对应的内容
这个选项可以填也可以不填,不填则默认。例如:[true|false]
命令的术语
一定要熟悉这些术语,因为后面的介绍经常会用到这些。
命令执行者
执行命令的那个实体。如果你输入了一条指令,命令执行者就是你。
命令执行点
执行命令时的位置。如果你输入了一条指令,命令执行点就在你这里。
目标
执行命令后,要对其进行改变、选择等操作时的实体。
坐标表述
坐标表述一般用在需要表述位置的地方,格式为(x,y,z)。
【学前必看】如何学习指令
前提要求
需要一定逻辑思维能力、自主思考能力和观察能力,以及需要一定的英语基础来记忆指令语法。
指令的部分格式也需要记忆,如果实在不想死记硬背,可以先从反复查阅资料、借助指令助手开始逐渐熟悉语法直到你完全可以依靠肌肉记忆完成。
开始学习
首先,你需要有基础的Minecraft常识。这会在你进行一些思路思考时提供很大的帮助。
在学习的过程中,最好是不要“不会走就想跑”,这只会导致你越学越费劲。可以先从基础资料语法入手,自己试着造一些基础但有趣的东西。
如果你愿意学,一定能学会的。因为指令语法本身就少,学会基础后哪怕是突然出现一个新的指令语法你也可以快速适应。
注意:命令需要搭配成一条命令链(即为由一个主要激活命令方块和多个链命令方块)才算一个完整的命令功能。
你要学习什么?
看到目录的指令不知道怎么学?以下是写指令必须学会的重点内容:
学习内容原因目标选择器及参数大部分指令都需要用到目标选择器,搭配基础指令就可以实现很多功能execute 指令和子命令execute的功能十分强大,且复杂、高级的命令必须用到executescoreboard 的搭配和使用数据储存需要用到scoreboard,还可以搭配exeucte或目标选择器参数用来各种检测,例如数据化*和计时器都需要用到它tag 的灵活应用使用tag可以极大化缩小指令体积,提供更大的便利,又或者是给予一个标识来进行单一确认绑定等JSON文本你需要使用JSON文本搭配tellraw、titleraw(title)来输出数据消息命令方块的摆法和用法以及原理最基础的内容,指令集的根基坐标、相对坐标、局部坐标的概念简单易懂且十分重要,判定位置时必须*数据化:指游戏机制数据用大量计分项进行储存、计算和判定。
你不仅要学习这些基础的内、熟练所有的语法,还得学会一些算法才能真正成为一名合格的大佬。
为什么要制作这个?
在我玩中国版我的世界时,我发现一个很严重的问题:几乎大部分玩家都不会指令,就算会,做出来的效果也令人作呕。
举个很简单的例子:像“欢迎”,它直接使用title而且还是对所有玩家发送的。你们可以想象到底有多恶心!就像下图那样,直接对所有玩家的脸上输出文字。不仅没有什么特别之处,还遮挡了视野。以及屏幕左方的扫地机器人效果并不是很好,这些会在后面的指令模板里介绍。(当然现在还没有制作)
如图所示,已经对一些敏感的信息进行遮挡。因为字体错乱,左上角的“屏置”应为“位置”
我还在公屏上发现还有很多求指令师的玩家。
我不希望玩我的世界的玩家连一个游戏自带的玩法都玩不明白,随便进一个图,都是把玩家关在笼子里发育,没有一点趣味,没有一点新鲜的玩法,然而只有指令才能制作新鲜的玩法(当然红石也可以)。
但是有一些人连指令都不知道是什么,还有些人知道但不会用,纯靠自己瞎摸也摸不明白的那种。
虽然有自带的“魔法指令”,但经过我的测试,除了生成实体轻便,其余毫无用处,甚至会出错。例如你想让它在脚下生成10*10*1的草方块,它压根就是瞎整!
所以,这个板块,就是为了拯救这些玩基岩版,玩网易版,还不会指令的人。
【进入正题!】简单且实用的指令
/tp
可以将指定实体传送至一个指定的地点,或传送到某个实体。
将命令执行者传送至某个实体:
/tp <一个目标>将命令执行者传送至某个位置:
/tp
/tp <目标> <一个目标>将某些实体传送至某个位置:
/tp <目标>
例如后面,可以再加两个数值,来确定传送后面朝的方向,它们代表:
/tp …… [水平旋转值] [垂直旋转值]第一个数是填你左右看的视角方向(Y轴旋转角度)。0就是朝着南看,180就是朝着北看,90就是朝着西看,-90就是朝着东看。
第二个数是填你上下看的视角方向(X轴旋转角度)。-90是抬头,0是平视,90是低头。
也可以加一个facing,意思就是被传送的目标传送到指定位置的同时面朝一个目标:
/tp …… facing <一个目标>还可以加一个布尔值(false和true),如果你填的是true,如果传送者和传送目的地的之间有一个或多个方块(不完整方块也是),那么本次传送无效,也不算执行成功。
注意:facing和指定方向必须先完成第四种方法后才可以使用的!但是false和true无需。
警告:请习惯在名称上使用双引号。否则一旦玩家的名称让系统混淆,那么将会报错,例如玩家的名字是“1你好”,如果使用这个指令:
/tp 1你好那么基岩版会把“1”看作x坐标,此时“你好”就会出现报错。打上双引号即可避免该问题,这样就可以把整个名称作为一个整体。
/tp "1你好"坐标&相对坐标概念
坐标是什么?打开游戏规则“显示坐标”,第一个值为X坐标,第二个值为Y坐标,第三个值为Z坐标。
相对坐标,用“~”表示,“~”后面的数值代表偏移坐标值。
如果是 ~ ~ ~ ,那么就是命令执行点;如果是 ~3 ~ ~ ,那么就是从命令执行点的X轴延伸3格后的位置,例如命令执行点在(0,0,0),使用上述的相对坐标,那么它所表述的位置就是(3,0,0)。以及后面的Y轴、Z轴都是一样的。
小提示:基岩版只要你不把关键词、字符串等拆开或合并,无论加多少空格,无论你省略多少空格,仍然可以执行。例如相对坐标就可以填"~~3~",就代表从命令执行点的Y轴延伸3格后的位置。你甚至在写指令时还可以这么做,例如使用/fill,这个后面会讲:
/fill ~-1~-1~-1~1~-1~1 grass如果你在基岩版输入这条指令,你的脚下会以你为中心点,生成一个3*3*1的草方块平台,并替换掉脚下3*3*1的方块。
但是为了命令的可读性,建议你使用空格。
目标选择器
当你在填命令的时候,上面的提示可能会出现“@a”等,并且它们给予了你提示,这里再讲一下:
目标选择器解释@a所有玩家@e所有实体@r随机玩家@s命令执行者@p距离命令执行点最近玩家除@a外,其余的玩家若死亡则无法被选择到。目标选择器可以搭配目标选择器参数实现实体筛选。目标选择器参数会在后面进行讲解!
/gamemode
改变玩家的游戏模式。游戏模式如下:
游戏模式解释adventure冒险模式creative创造模式spectator旁观模式survival生存模式default默认的游戏模式基岩版即使到现在的仍可以用Java版以前的语法。例如a(2)就是冒险模式,c(1)就是创造模式,s(0)就是生存模式。
/gamemode <游戏模式> [目标]后面的目标可填可不填。注意目标必须是玩家。如果不填目标,那么目标为命令执行者。
/weather
更改游戏的天气。
用法①:
/weather <天气> [持续时间(s)]天气解释如下:
天气解释clear晴天rain下雨天thunder雷雨天在后面直接填入相应的天气即可。
后面的持续时间单位为秒,可填可不填,不填则为随机。
用法②:
输入这串指令即可查询当前天气。
/weather query/give
可以给予某些目标某些物品。
/give <目标> <物品ID> [数量] [特殊值] {NBT}物品ID,例如钻石就是diamond,在基岩版,原版物品可以直接省略命名空间。
特殊值是什么?如果该物品为有耐久的工具,特殊值是多少,那么这个工具就减少多少耐久,甚至可以让耐久变为负数;如果该物品有多种颜色,例如stained_glass(染色玻璃),它默认是白色的,如果填入“1”或其它数,也会变成其它的颜色;如果该物品有多种种类,例如log(橡木原木),你便可以填入“1”让它变成白桦木。千万不要在没有多种形态的物品上填入特殊值,否则很有可能出现意想不到的结果。
注意目标需要为玩家,否则无效。
基岩版的“NBT”
基岩版的NBT与Java版是完全不一样的,而且基岩版的NBT非常少,所以在这里就提前说明。
can_place_on
指定该物品在冒险模式,可以放在什么方块上面。
格式如下:
/give …… {"minecraft:can_place_on":{"blocks":["<方块ID>","……"]}}can_destroy
指定该物品在冒险模式,可以破坏什么方块。
格式如下:
/give …… {"minecraft:can_destroy":{"blocks":["<方块ID>","……"]}}keep_on_death
设置该物品即使在关闭死亡不掉落的情况下,死亡后仍然不会掉落。
格式如下:
/give …… {"minecraft:keep_on_death":{}}item_lock
设置该物品是否上锁。
拥有两个上锁模式:
lock_in_inventory —— 锁定在背包内,将无法移出背包、无法丢弃、用于合成
lock_in_slot —— 锁定在一个槽位,将无法移动、无法丢弃、用于合成
格式如下:
/give …… {"minecraft:item_lock":{"mode":"<上锁模式>"}}警告:一旦上锁,即使是创造模式甚至是管理员也无法通过正常的方式将该物品移动或销毁(当然有的模组它可能没有做上锁的检测,在UI内也可以对物品进行移动)。如果你不慎将这种物品放入了你的背包,请使用/clear指令或/replaceitem指令,这些会在后面进行讲解。
/effect
给予目标状态效果。
状态效果是什么?例如力量、速度、缓慢、中毒……这些就是状态效果。
/effect <目标> <状态ID> [状态持续时间] [状态等级] [是否隐藏粒子效果
注意:指定等级比实际等级少1级,也就是如果等级为1,实际等级则为 II 级(2级);持续时间的单位是秒;持续时间大于100万秒(1000000秒)时,则会直接变为100万秒;等级不能超过255级,否则就会报错。
如果将持续秒数设置为0,那么就会清除这个效果。注意,无论目标是否拥有该效果,指令都将正常执行。
如果不填“是否隐藏粒子效果”,那么默认为不隐藏。
如果不填“状态等级”,则默认为0级(实际等级为1级)。
如果不填“持续时间”,则默认为30秒。
状态效果ID请点击这个网址进行查看!
/kill
直接杀死某些实体。
/kill <目标>创造模式和旁观模式的玩家无法被杀死。
目标选择器参数
目标选择器参数是什么?简单来说,就是给目标选择器加一个“过滤器”,通过中括号内的内容筛选符合要求的实体并选择它们。
需要在目标选择器后面加一个成对的中括号,内部将填入目标选择器参数。
只有符合所有要求后才会被选择到。
加粗的部分将详细介绍。
目标选择器参数解释x,y,z分别代表命令执行点的X坐标,Y坐标,Z坐标dx,dy,dz分别代表X轴长度,Y轴长度,Z轴长度type实体类型name实体名称r,rm半径内,半径外m游戏模式l,lm最大等级(当等级小于它会被选中),最小等级(等级大于或等于它会被选中)rx,rxm,ry,rym最大垂直旋转角度,最小垂直旋转角度,最大水平旋转角度,最小水平旋转角度tag实体的标签scores实体的分数c实体的个数
如果是“@a”等目标选择器,那么它的排序方式则是以最近的实体开始选择实体
family族hasitem拥有的物品x,y,z,dx,dy,dz
这六个数值在确定一个长方体区域时缺一不可。
x,y,z可以改变命令执行点,可以使用相对坐标,如果使用的话只需要打一个"~"即对应这个轴。可以单独与r、rm等搭配。
dx,dy,dz则是从命令执行点,延长对应的轴,随后区域内的目标将会被选择到。如果有两个轴则会形成一个长方形区域,如果有三个轴则会形成一个立方体区域。
下面这个参数就是示范,在写的时候请像这样写(当然你可以先写x再写z最后写y,但是要看你能不能接受了,顺序无所谓):
@e[x=0,y=0,z=0,dx=7,dy=7,dz=7]从坐标(0,0,0)到(7,7,7)形成立方体,然后选择区域内的所有实体。
上述的dx、dy、dz是延伸,而不是直接确定位置。如果是这么写:
@e[x=55,y=55,z=55,dx=5,dy=3,dz=5]那么就是从坐标(55,55,55)到(60,58,60)形成一个立方体,然后在区域内选择所有的实体。
注意:它就像结构方块一样选定范围。你可以在确定一个点位后,使用结构方块去确定该延长多少格,然后再去完善,否则很容易出现意外。
结构方块的ID是structure_block。
type
从目标选择器中选择与指定实体相符的实体。
<目标选择器>[type=<实体ID>]实体ID,例如pig就是猪,item就是物品。杀死物品的意思就是直接清理掉落物。
示例:
@e[type=item]选定所有的物品。
你可以使用“!”来排除实体。大部分情况下,你都可以在等号后面加一个英文感叹号来进行反选!
小提示:@e[type=player]不会选择死亡的玩家。
name
从目标选择器中选择与指定名称相符的实体。
<目标选择器>[name=<"名字">]注意名称建议打双引号,否则可能会出现一些意外。如果你很懒,可以省略它。但是如果名称中间有空格,则必须打双引号。
以后将省略示例!请注意。
r,rm
从目标选择器中,选择在以命令执行点为中心的位置,在多少格以内或以外的实体。
和Java版的distance差不多。
r是指半径内的实体,rm是指半径外的实体,你可以用它做一个圆环,例如r=7,rm=5就是一个内径5、外径7的圆环了!
r、rm:
<目标选择器>[r(rm)=<半径(单位:格)>]防止有些人钻牛角尖,在前面的r(rm),括号里的意思是如果你想用rm,那么就把r替换为rm即可,在它们之间选一个。下面的也一样。
m
从目标选择器中选择与指定游戏模式相符的实体。一般为玩家。
和Java版的gamemode差不多。
后面填游戏模式。这里建议填字母,c即创造模式,a即冒险模式,s即生存模式。除非检测旁观模式,建议不要使用完整的单词,命令体积小、稳定、可读才是最重要的。
<目标选择器>[m=<游戏模式>]lm,l
从目标选择器中选择与指定等级相符的实体。一般为玩家。
和Java版的level差不多。
lm是指大于或等于指定等级的会被选中,l则是小于指定等级的会被选中。
后面填整数。
l、lm:
<目标选择器>[l(lm)=<等级>]rx,rxm,ry,rym
从目标选择器中选择与指定旋转角度相符的实体。
rx,rxm均为垂直旋转角度,ry,rym均为水平旋转角度。
rx一般用在抬头,rxm一般用在低头。ry,rym不太常用,因此不做过多的介绍。
例如rx=-89就是完全抬头,rxm=89则是完全低头。
rx、rxm、ry、rym:
<目标选择器>[rx(rxm,ry,rym)=<旋转角度>]tag
从目标选择器中选择与指定标签相符的实体。
<目标选择器>[tag=<"标签名称">]关于标签的知识将会在后面进行讲解。
scores
从目标选择器中选择符合分数要求的实体。
<目标选择器>[scores={<计分板名称>=<范围>,…}]可以有多个分数,若有多个分数,那么必须全部符合要求才可通过。
范围
有些人可能不知道在MC中范围是什么意思。
如果需要表示范围,那么就要用到“..”,如果它在数字之后,那么就是大于等于这个数;如果在数字之前,那么就是小于等于这个数;如果在两个数之间,那么就是在这两个数之间的所有数(包括那两个数)。
例如5..就是大于等于5,..3就是小于等于3,1..7就是1~7(包括1和7)。
如果实体的分数在要求范围内,则被选择进目标选择器。
如果还会涉及到“范围”,那么将直接以<范围>的形式出现。
分数的知识会在后面进行讲解。
c
从目标选择器中最多选择多少实体。
它是如何选择的呢?默认是距离命令执行点最近的几个实体。如果你写的是@a[c=4],那么就是距离命令执行点最近的4个玩家;如果你写的是@e[c=4],那么就是距离命令执行点最近的4个实体。
<目标选择器>[c=<实体数量>]hasitem
hasitem是一个非常重要的目标选择器参数,它大大优化、改进了检测物品的方式。
从目标选择器中选择与物品要求相符的实体。
在hasitem=后面需要花括号。在花括号内,如果有多个参数,需要使用英文逗号隔开,花括号内有任何相同的参数类型都只会选择最后一个参数类型的参数。
如果你需要检测多个hasitem参数,则需要在花括号外围再加一个中括号,并且每个hasitem参数都用逗号隔开,例如:hasitem=[{参数1},{参数2}, ... ] 。
item - 必填
选择指定的物品。这一项是必填的,若不填则会报错。格式如下:
<目标选择器>[hasitem={item=<物品ID>,...}]location
该物品在什么槽位。关于槽位,详见/replaceitem指令。
<目标选择器>[hasitem={location=<槽位ID>,...}]注意只需要填入槽位ID。
slot - 需要填location才可用
指定槽位的编号范围。一定要先填入location,否则无效。
这里可以指定一个范围,这也就意味着你可以使用“a..b”来选择一个区间内的槽位。
<目标选择器>[hasitem={location=<槽位ID>,slot=<槽位编号>,...}]quantity
指定该物品的数量是否在指定的范围内。
如果你需要检测没有某个物品,请使用quantity=0。
<目标选择器>[hasitem={quantity=<范围>,...}]data
指定该物品的特殊值。
<目标选择器>[hasitem={data=<特殊值>,...}]易错点 - 不可使用多个相同的目标选择器参数
有的人可能会问:为什么我的目标选择器参数不能选择多个实体?下列就是一个错误示范:
/kill @e[type=pig,type=sheep,type=cow]这是错误的!如果从逻辑来看,选定了猪就排除了猪以外的实体,此时又要在猪里面选择羊,这肯定会出大问题。所以,我们只能分条写或排除多个实体。在目标选择器里,排除是可以重复使用的。
/kill @e[type=pig]/kill @e[type=sheep]/kill @e[type=cow]特性提醒 - 目标选择器会先筛选符合要求后判断关系
有时候你写命令的时候,可能别人会莫名其妙获得一些东西,下面的指令是一条示范:
/tag @p[scores={pp=91..},tag=!pp] add pp可能你会认为是给最近的“pp”分数大于等于91的人一个“pp”标签,但其实这样写是危险的!
目标选择器有一个特性:先选择符合条件的实体,后再根据目标选择器类型进行选择。其可能存在的隐患:
所有玩家符合分数要求:第一次输入时,你会获得pp标签,但是第二次输入时,离你最近的一名玩家就会获得pp标签——因为你已经有了pp标签,此时以你为目标不符合选择条件,将不在选择中,然而除你之外的一个最近的玩家符合要求,故此获得了pp标签。
仅输入者不符合分数要求:输入后,你确实没有获得pp标签,但实际上离你最近的那名玩家获得了pp标签——因为你不符合分数条件,但那位玩家符合分数条件,你不在选项中,但他在且离你最近,故此那名玩家获得了pp标签。
加入其他目标选择器参数后,其顺序也是一致:先判断是否符合条件,再根据类型选择。上述条件你可以理解为:最近的,分数“pp”大于等于91且没有标签“pp”的玩家。
/clear
清除命令执行者背包的所有物品:
/clear清除指定目标的所有物品:
/clear <目标>清除所有指定目标的某物品:
/clear <目标> <物品ID> [特殊值]不填特殊值,则无论什么特殊值,都会被清理。
清除指定目标的某些物品:
/clear <目标> <物品ID> <特殊值> <最大数量>注意:特殊值是必须要填的,且千万不要填反;如果物品数量不足最大数量仍然算执行成功,如果物品数量大于最大数量则只清理指定个数的指定物品。[第四种用法]
/fill & /setblock
用途
这两个指令都用于替换方块,但/fill用于建造一个立方体,/setblock仅放置一个方块。
如果你需要建造一个立方体,那么就需要用到/fill,由于/fill需要填入两个坐标,如果想要放置一个方块,就只需要使用/setblock即可,因为/setblock只需填入一个坐标。
/fill - 用法
/fill
replace - 只替换指定的方块
keep - 只替换空气部分
destroy - 先破坏原有方块,再替换指定方块
outline - 为空心立方体,中间的部分不被空气替换
hollow - 为空心立方体,中间的部分被空气替换,与outline需区分
第一个xyz为一点,第二个xyz为一点,两点形成立方体。
特殊值不填,仍可填放置模式(但在之前的版本需要填)。若不填放置模式则直接替换立方体。
/setblock - 用法
/setblock
放置模式与fill几乎相同,但仍有这些不一致:
replace为直接替换指定方块,无需在后方填入方块ID
没有outline、hollow
其余同fill。
/fill & 相对坐标小技巧
如果你想快速生成一个立方体或平台,不记坐标,应该怎么做呢?
那么,就需要用到相对坐标。相关知识已在前面进行介绍。
请看下面这条指令:
/fill ~-32 ~-1 ~-32 ~32 ~-1 ~32 deny输入这条指令,你的脚下将会生成一个65*65*1的拒绝平台。
有的新手可能不理解,让我们来分析分析:
第一个坐标为(~-32,~-1,~-32),意思就是说,从你的点开始,X轴减去32格,Y轴减去1格,Z轴减去32格后的地方。例如你的点处于(0,0,0),那么这个坐标就等于(-32,-1,-32),它会随着你的位置的变化而变化,从而能够快速的确定一个坐标,
第二个坐标为(~32,~-1,~32),X轴加上32格,Y轴减去1格,Z轴加上32格后的地方。例如你的点处于(0,0,0),那么这个坐标就等于(32,-1,32)。
然后,两点形成立方体,就建造出了一个65*65*1的平台。简单吧!
/time
直接修改时间:
/time set
/time add <增加的游戏刻>时间查询:
/time query
/summon
召唤一个实体。
以下两种方法皆可:
/summon <实体ID> [xyz(可以再加facing或者yx旋转角度,非必填)] [实体事件] [实体名称]/summon <实体ID> [实体名称] [xyz]如果直接使用summon,则直接召唤实体至命令执行点处。
加上xyz,则确定位置。
加上旋转角度或facing,则确定朝向。
实体事件这里不详细介绍,但如果第一种用法不填此项目将无法填入实体名称,如果不想填实体事件又想填名称+位置,请使用第二种方法。
冷知识:如果给僵尸随便加一个事件,例如aaa,僵尸的移速会变得超快,不信的可以试试。
如果加了实体名称,那么生成的实体会带一个名字。这点比Java版轻松多了!但是可调性就有点低了。
/enchant
将目标手上的物品进行附魔。
/enchant <目标> <附魔ID> [等级]不填等级默认为1。
想要正常的附魔一个物品,首先需要满足以下条件:
手上有物品
该物品可以附上所指定的附魔
附魔等级不超过最大等级
没有与其他相冲突的附魔
如果该物品已经拥有了一个与指定附魔相同且等级也相同的附魔,那么该附魔的等级会往上提高一级。如果该附魔已经拥有了更高的等级,那么指令虽正常执行,但没有任何效果;如果该附魔的等级比指定等级低,那么将直接达到你所指定的等级。
该指令考验你对附魔ID的掌握程度,而不是你的思维能力!这纯纯就是死记硬背。千万不要把它当作一个技术性指令!唯一有用处的时间段是在hasitem目标选择器参数未诞生之前的时段,该指令可以达到检测物品的效果。
/gamerule
在基岩版,这个指令除了一些小功能没有什么太出色的用处,除非你需要后台修改。
直接修改游戏规则,至于游戏规则的ID,可以去网上查查。
/gamerule <游戏规则> [值(true|false|数值)]防止太水,这里列举一些常用和一些小功能的ID:
commandblockoutput - 命令执行时是否在聊天栏进行提示
作用:如果你开启了该选项,拥有管理员权限的玩家将会看到命令方块运行时生成的一个个消息。一定要关闭它!无论是小工程还是大工程,这个游戏规则一定要关闭。
doinsomnia - 幻翼是否生成
作用:如果你关闭它,幻翼就再也不会生成了。适用于一些生存服或者资源服。
drowingdamage - 窒息伤害是否启用
作用:如果你关闭它,所有玩家不会受到任何溺水、窒息伤害。适用于海洋探索服、PVP等。
falldamage / firedamage / freezedamage - 摔落/火焰/冰冻伤害是否启用
作用:例如你想关闭falldamage,那么所有玩家不会受到任何摔落伤害,其余两个也是一样的。适用于PVP服。
sendcommandfeedback - 是否将一些命令返回值返回给玩家
作用:如果你关闭它,例如房客被给予物品、传送等,都不会收到任何消息。例如管理员执行指令时,不会返回任何消息。需要注意的是,一旦该规则关闭,管理员执行的指令,其他管理员看不到的。正常情况下,管理员执行的指令管理员是能看到的。该规则关闭可能会带来一些隐患,或者你将看不到返回值,例如你想查询村庄的位置,使用/locate你将一无所获。
showbordereffect - 是否显示边界的粒子效果
作用:如果你关闭它,边界(border block)将不会产生粒子效果。
showdeathmessages - 是否显示死亡信息
作用:如果你关闭它,将不会显示任何死亡消息,包括但不限于玩家死亡、宠物死亡。适用于类塔科夫服。
有的规则填的是数值(少数),有的则是布尔值(true开启和false关闭)。
/xp
基岩版的/xp非常简单,但是可调性较低,例如不能扣经验值等。
第一种用法 - 直接加经验值:
/xp <经验值> [目标]第二种用法 - 直接加等级(或者扣等级):
/xp <等级>l [目标]第二种用法是可以填负数的,不过数后面需要加l。
有的人习惯加大写L,不过这都不影响最终的结果。
/clone
将两点立方体克隆到一个点上,在第三个点从x+,y+,z+方向开始进行克隆。
/clone <点1xyz> <点2xyz> <克隆点xyz> [遮罩模式] [复制模式]遮罩模式:
masked - 不复制空气,且复制到指定地点时不会用空气替换原有的方块
replace - 默认:全部复制
filtered - 只复制指定方块ID(后方需要写方块ID)
复制模式:
force - 如果指定区域与目标区域重叠,仍可复制
move - 剪切,复制后删除原来的复制区域
normal - 默认,没有任何改变
/tag
给予、删除或查询某些目标的标签。
虽然结构上及其简单,但是用途十分广泛,且搭配目标选择器参数时,效果也十分出色。这个指令在一些大工程里经常可以遇见,而且十分重要。
给予标签:
/tag <目标> add <标签名>删除标签:
/tag <目标> remove <标签名>查询目标拥有的标签:
/tag <目标> list如果第三种用法有多个目标,那么返回的值会比较模糊。建议只选一个实体!
只有世界上有一个实体拥有标签,那么这个标签才是存在的。移除不存在的标签,或者该实体没有标签,那么不会成功执行。
/setworldspawn
设置世界出生点。注意,世界出生点是一个全局的出生点,所有玩家第一次进入游戏或没有设置其他出生点时重生的位置就是世界出生点。
一定不要与/spawnpoint弄混了!/spawnpoint会在后面介绍。
/setworldspawn [xyz]设置世界出生点在指定的位置。不填xyz则默认为命令执行点。
/defaultgamemode
设置默认游戏模式,所有玩家第一次进入游戏都将会是这个模式。
这个指令在基岩版不太常用,因为管理员可以直接在设置界面对默认游戏模式进行修改。
注意:将此项修改会将所有个人游戏模式为默认的玩家的游戏模式同步于默认游戏模式。也就是说,当你用这个指令切换创造,不出意外的话,全服的人都会变成创造模式。
不过,如果你的个人游戏模式不是默认,那么无论怎么改默认游戏模式都不会影响到你。
游戏模式的ID已在前面所介绍。
/defaultgamemode <游戏模式>/spawnpoint
设置某些玩家的重生点。
可以设置在任何维度。需要注意的是,一旦设置,将会覆盖上一次设置的重生点(包括用床设置的重生点),在重生点失效之前(一般不会失效)你不会再回到世界出生点。
/spawnpoint [目标] [xyz]设置指定的目标的重生点位于一个指定的位置。
如果不填“xyz”,则默认命令执行点。
如果不填“目标”,则默认为命令执行者。
/replaceitem
将容器或者实体的某个槽位替换为某一个物品。
不要觉得这个指令语法很复杂,其实很容易掌握。
block
替换容器内某个槽位的物品。
这里只有一种槽位使用:slot.container。
/replaceitem block <方块位置xyz> slot.container <槽位位置(0即为第1格,以此类推)> <物品ID> [数量(默认1)] [数据值(默认无)] {NBT}将某一个位置的方块的某一个槽位替换为某物品。
entity
替换实体的某个槽位的物品。最多用的是entity而不是block。
这里有多种槽位,解析如下:
slot.armor - 只能用于马、羊驼等坐骑:马凯/地毯
slot.armor.chest - 胸甲
slot.armor.feet - 靴子
slot.armor.head - 头盔
slot.armor.legs - 护腿
slot.chest - 箱子
slot.enderchest - 末影箱
slot.hotbar - 物品栏
slot.saddle - 只能用于马等坐骑:鞍
slot.weapon.mainhand - 主手(直接替换于主手)
slot.weapon.offhand - 副手
/replaceitem entity <目标> <槽位类型> <槽位位置(0即为第1格,以此类推)> <物品ID> [数量(默认1)] [数据值(默认无)] {NBT}将某些目标的某个槽位替换为某物品。
keep
你可以在物品ID前面加上一个keep来代表只有该槽为空才可替换该槽。如果替换的槽不为空,那么指令将执行失败。
例如这条指令,循环无条件保持开启:
/replaceitem entity @a slot.hotbar 8 keep wooden_sword 1 1000如果不加keep的话,有可能会造成严重的性能问题,不过这里加了keep,只有剑消失了才会替换上新的木剑,可以大大节省性能的消耗。
/difficulty
设置游戏的难度。这个指令没有什么技术性,且可以直接使用设置进行修改。
/difficulty <难度>难度解释如下:
easy(e) - 简单
hard(h) - 困难
normal(n) - 普通
peaceful(p) - 和平
/locate
基岩版的结构ID还是如此简洁。
查询结构:
/locate structure <结构ID>查询群系:
/locate biome <群系ID>/tickingarea
管理常加载区块(添加/查询/清除)。正常情况下,你只能用该指令创建10个常加载区块,每个常加载范围不得超过100个区块。
add
添加常加载区块。
用法①:仅两点坐标内
/tickingarea add
/tickingarea add circle <中心x y z> <半径> [自定义名称] [是否预加载]预加载:开启该选项后,游戏开始时将优先加载预加载常加载区块。
list
输入该指令后,将会显示所有常加载区块及其名称、坐标点和数据。
不填all-dimensions,则只会显示该维度的常加载区域。
/tickingarea list [all-dimensions(全部维度)]remove
确定某一坐标点,若其处于任意设置的常加载区域内,则删除那个常加载区域。也可以移除某个名称的常加载区块。
/tickingarea remove
输入该指令后,删除所有的常加载区域。
/tickingarea remove_all/spreadplayers
官方语言是扩散,实际上是以一个点根据范围进行随机传送,且默认y坐标于从上往下最高处。
分散范围、最大范围的单位是:格。
注意:扩散区间是一个长方体,其底面为正方形。
/spreadplayers <中心x> <中心z> <分散范围> <最大范围> <目标> [最大高度]分散范围不可大于最大范围。
/kick
踢出一名玩家。目标不可使用目标选择器参数。
/kick <玩家名> [踢出后附带消息]/ride
强制使目标骑乘于另外的目标。
用法①:开始骑乘
/ride <目标> start_riding <坐骑目标> [传送规则] [骑乘方式]传送规则:
teleport_ride - 将坐骑传送至目标并骑乘
teleport_rider - 目标相反(默认)
骑乘方式:
if_group_fits - 满足条件才骑乘
until_full - 强制骑乘(默认)
用法②:结束骑乘
/ride <目标> stop_riding用法③:坐骑逐出骑手并停止骑乘
/ride <坐骑目标> evict_riders用法④:召唤骑手使其骑乘
/ride <坐骑目标> summon rider <实体ID> [实体事件] [自定义名称]用法⑤:召唤坐骑使其骑乘
/ride <目标> summon ride <实体ID> [骑乘规则] [实体事件] [自定义名称]/loot
召唤或让目标获得战利品表的物品。
loot分为两部分:目标与来源。其效果基本为目标获取来源的战利品。
/loot <目标子命令> <来源子命令>目标子命令
目标有5种:方块槽位,实体槽位,直接给予玩家,掉落物形式,直接导入至容器。
分别为:
replace entity <目标> <槽位ID> <槽位编号> [数量]replace block
来源有2种:战利品表,击杀实体获得的战利品。
分别为:
loot <战利品表> [操作工具]kill <目标>操作工具:
<物品ID> - 指定物品获取的战利品(意义不明
mainhand - 主手
offhand - 副手
完整的指令需要结合两个子命令。
/hud
管理玩家的UI的显示。
用法①:重置,即为显示
/hud <目标> reset [UIid]用法②:隐藏
/hud <目标> hide [UIid]不填UIid,即为所有。
UI id如下:
all - 默认
air_bubbles - 氧气值
armor - 护甲值
crosshair - 十字准星
health - 生命值
horse_health - 坐骑生命值
hotbar - 快捷栏
hunger - 饥饿值
paperdoll - 纸娃娃
tooltips - 提示栏
progress_bar - BOSS条/经验条/触屏圆圈
touch_controls - 触控按键
/structrue
管理结构项。
用法①:保存
/structure save <结构名称> <坐标1xyz> <坐标2xyz> [结构保存模式]/structure save <结构名称> <坐标1xyz> <坐标2xyz> [是否包含实体] [结构保存模式] [是否包含方块]结构保存模式:
memory - 内存
disk - 磁盘
用法②:加载
/structure load <结构名称> <生成坐标> [旋转角度] [是否镜像] [动画模式] [动画秒数] [是否包含实体] [是否包含方块] [是否含水] [结构完整性] [种子]/structure load <结构名称> <生成坐标> [旋转角度] [是否镜像] [是否包含实体] [是否包含方块] [是否含水] [结构完整性] [种子]旋转角度:
是否镜像:有x、z、xz和none(不进行镜像)镜像。
其余与“是否”有关均填true/false。
用法③:删除
/structure delete <结构名称>学会使用命令方块
命令方块获取方式
直接使用give指令获取命令方块。不会有人还用魔法指令获取吧?
/give @s command_block命令方块的三种形态
脉冲:红石控制时收到红石信号,或保持开启时,只会执行一次
链:当指向自身的命令方块执行后立即执行(无条件情况下无论失败还是成功都会执行,且没有任何延迟)
一般情况下建议使用保持开启,如果为红石控制则还要输入红石信号
循环:红石控制时收到红石信号或保持开启时,会不断执行,频率为0.05s(1tick)/次
命令方块的“条件”
有条件的命令方块,箭头下面会缺一个小三角,想看可以自己试试。
有条件时,只有后面的命令方块成功执行,才能执行本体。如果后面的命令方块执行失败了,那么本体也算执行失败,但不算不执行。
命令方块的激活方式
红石控制:输入红石信号后,根据形态来执行命令。
保持开启:本体不断运行,频率是1tick一次。
注意:命令方块所在的区域需要加载才能正常运行。你可以使用/tickingarea指令设置常加载区域。
连锁命令方块的摆法
一般情况下建议直线摆放,也就是说在命令方块的前方来放置若干个呈直线的链命令方块。也可以折线摆放,但如果折点是条件命令方块,那么该命令方块后方也有命令方块要执行。
命令方块的工作
单个命令方块至少1tick执行一次,若连接了链命令方块,则1tick内会连着链命令方块一起执行。
需要注意的是,如果连接了链命令方块,那么它们将按顺序进行执行,且都是1tick内执行完毕。一般情况下是不会出现错序的情况的。
你可以用1tick的延迟做些什么。
已选项中的延迟
一些细心的玩家可能会发现命令方块有一个已选项中的延迟的设置。在脉冲和循环命令方块中,这个设置的数值可以限制它们的执行速度。也就是说,当你设置为5,那么脉冲命令方块就最快只能5tick执行一次,循环命令方块最快也只能5tick执行一次。但是在链命令方块就不一样了,链命令方块是在即将运行的时候空闲一段时间后再执行。也就是说,当指向链命令方块的命令方块执行后,如果此时设置的是5,则5tick后,这个链命令方块才会执行。
这个也是基岩版独有的,它大大的减少了命令方块需要延时运行时所需要的命令方块和优化了性能。
注意:这个设置是极其不稳定的。如果你将它应用于某些个人的数据当中,就很容易会出现问题。并且,如果你在命令方块处于延迟时修改它的延迟,那么它只会在延迟结束后才会真正的修改延迟。如果你直接将带有延迟且处于延迟之中的命令方块进行替换(特别是循环命令方块),则很有可能会出现莫名其妙在延迟中执行的问题。不过,在逻辑简单的情况下,还是使用这个会更轻松、更简洁。
回归主题 - 稍复杂的指令
/execute
你还在用原来的/testfor检测目标吗?你还在用古老的只能检测不能运行命令的检测吗?你还在用牺牲性能嵌套/execute来实现某些复杂的功能吗?
全新/execute,全部整合在一块,不仅继承了老版本的/execute,而且加上了很多功能,使指令工程变得更轻量,更流畅,更可读,兼容更高。
全新的/execute导致很多玩家都不知道如何使用,那么想学/execute的玩家一定要认认真真的阅读这一项。
子命令定义
/execute的所有子命令都分为三类:
修饰子命令 - 对后续的子命令执行的命令进行“修饰”
条件子命令 - 使用一些条件限制/execute的执行
run子命令 - 包含前面所有条件执行命令
一个完整的/execute命令至少需要一个条件子命令或run子命令。
所有的子命令从左至右按序执行。run子命令后不可接任何子命令。
as - 修饰子命令
设置选定的目标为命令执行者,相当于定义后续子命令的@s。若有多个命令执行者,那么命令将会执行多次。
很多人到这一步就开始不理解了。相当于强制让这些目标打run后面的指令,但是请注意,单单只用as是不能确定位置的,这将要使用下面的at。
/execute as <目标> ......目标可为多个实体。可重复使用。
at - 修饰子命令
将命令执行点设置为目标所处的位置、面朝的方向和所处的维度。若有多个命令执行点,那么命令将会执行多次。
/execute at <目标> ……目标可为多个实体,可重复使用。
这里如果想要搭配as,那么这里建议填@s。如果想和as搭配最好用@s(特殊除外),这样分配的命令执行点就只有1个,不会出现重叠的情况。如果后续子命令涉及到了位置等因素,最好使用at @s来给执行者分配位置。
run子命令 - 填后不能再填子命令
包含前面所确定的所有参数开始执行run后面的指令。
/execute ... run <命令>提示:在这里,基岩版是可以加斜杠的。
align - 修饰子命令
将前面所设置的所有执行点坐标化整,采用去尾法。
在后面填入你需要化整的坐标轴。例如x就是x轴化整,xy就是x、y轴化整,xyz就是全部化整。
一定要贴紧,不贴紧就是错误的写法。
/execute ... align <化整的坐标>anchored - 修饰子命令
确定前面所有目标的执行点是在脚部还是头部(眼部)。
你可能觉得,不就是稍微改了一下吗,有什么用呢。
局部坐标 - “^”
你说得对,但是局部坐标在这里就可以体现用处了,因为局部坐标就是以玩家的视角为中心创建的XYZ坐标系。如果你不理解的话,就相当于是从你的视角发射三道激光,一道是往左边射的,它就是X轴,一道是往上面射的,它就是Y轴,一道是往前面射的,它就是Z轴。
然后和相对坐标的计算是一样的了。例如^3 ^ ^就是在确定的X轴延伸3格后的位置。很好理解吧!实在不行的话,你可以在游戏里自己试试。
此时,这个就可以修改“激光”是从哪个部位射出来的。
eyes - 头部(眼部)
feet - 脚部(默认)
/execute ... anchored <部位> ......facing - 修饰子命令
将前面所有执行点面向某个坐标或实体。
面向坐标:
/execute ... facing
/execute ... facing entity <目标>
if & unless + 条件子命令
当if里面的条件子命令的条件符合时,那么就正常执行后续子命令,反之则直接取消后续所有子命令的执行。如果是unless,相反,如果不符合其条件,就正常执行后续子命令,如果符合则直接取消后续所有子命令的执行。
block
检测指定的坐标的方块是否与指定的方块相符。
/execute ... if(unless) block
检测区域内的所有方块是否与另一个区域内的所有方块一致。但凡有一个不一致,都算失败。
/execute ... if(unless) blocks <第一点xyz> <第二点xyz> <比较地点xyz>
后面的all和masked用途:
all - 全部比较
masked - 不比较空气
有什么区别?
entity
检测是否有这个实体,有一个都算执行成功。没有的话就执行失败。目标可为多个实体。
/execute ... if(unless) entity <目标> ......score
检测实体的分数是否符合分数要求。
可以比较两个实体间的计分板的分数,计分板可为不同的计分板。也可以确定实体的分数是否处于一个范围内。
比较实体之间的分数:
/execute ... if(unless) score <目标> <计分板名称> <关系运算符> <目标2> <计分板名称> ......实体的分数是否处于范围内:
/execute ... if(unless) score <目标> <计分板名称> matches <范围> ......范围可以在前面加一个英文感叹号进行反选。
关系运算符:
> - 大于
< - 小于
>= - 大于等于
<= - 小于等于
= - 等于
不等于可以用unless。
in - 修饰子命令
run后面的指令执行于哪个维度。
维度ID解析:
overworld - 主世界
nether - 下界
the_end - 末地
/execute ... in <维度> ...你可以用这个指令让目标直接传送至地狱、末地。
positioned - 修饰子命令
改变命令执行点的位置。
直接改变坐标:
/execute ... positioned
/execute ... postioned as <目标> ...这里的目标可为多个实体,和at的用途一致。
rotated - 修饰子命令
将命令执行点的旋转角度进行修改。
直接改变方向:
/execute ... rotated
/execute ... rotated as <目标> ...目标可为多个实体,若有更多的目标,则会新建命令执行点;若只有一个目标,就只会修改朝向。
我的/execute怎么没有我想要的结果 - execute的常见错误
很多萌新在第一次接触/execute的时候经常遇到一些离谱的错误,或许你可能中了以下的招:
将"xxx"执行与None失败
遇到这种问题大多数是你没有as子命令来定义后续的@s,导致命令无法选择到命令执行者(因为命令正在尝试选择命令方块)。以下是一个错误示范:
/execute at @a if block ~ ~-1 ~ emerald_block run tag @s add 回收这里就犯了本条目的错误:无as来定义后续@s。修改方法很简单,at改为as,然后在后面加一个at @s即可:
/execute as @a at @s if block ~ ~-1 ~ emerald_block run tag @s add 回收指令执行了,但为什么没有效果
以下是一个错误示范:
/execute as @a if entity @a[r=15,rm=0.1] at @s run title @s actionbar 有人在你的附近...这里犯了一个错误:涉及到了位置(目标选择器参数选择一个r=15,rm=0.1的圆形范围,于命令执行点检测),却没有在此之前定义at ,这会导致只有靠近命令方块才会显示。
你问我:这不是有at @s吗?实际上,execute子命令是从左至右执行的,但涉及到执行点的相关子命令却在at @s的前面,故此失效,因此无法选择。
/scoreboard
这个指令用来控制游戏内的计分板系统。
计分板是什么?它就像一个变量,你可以很轻松的使用指令修改它,也可以很轻松的调用它。
例如,当玩家的分数加到了一定程度执行什么,当玩家的分数足以干什么就执行什么,当玩家的分数不足多少就执行什么,又或是寻找符合范围要求的实体……
这个板块将介绍该指令的用途。
objectives
关于计分板的设置和调用。
一定要注意objectives后面有一个s!
/scoreboard objectives <接下来讲的...>add
添加一个计分板。在基岩版中,只有dummy类型的计分板可添加。
/scoreboard objectives <计分板ID> dummy [计分板显示名称]计分板显示名称可填入的字符数要比计分板ID多,且调用的时候计分板的名称调用的是ID而不是显示名称。当你需要在右侧或名称上显示分数的时候装饰计分板名称,才需要写显示名称,如果不写,则默认显示ID名称。
list
只需输入这串指令,便能返回所有的计分板,以及它的显示名称和ID。
/scoreboard objectives listremove
直接删除某一个计分板,它的数据也全部抹除。
/scoreboard objectives remove <计分板ID>setdisplay
顾名思义就是将分数显示于哪个地方。
list - 显示于暂停界面
所有计分项都会被显示于暂停界面。
/scoreboard objectives setdisplay list <计分板ID>sidebar - 显示于屏幕右侧
显示前15个按顺序的计分项。
排序方式:
ascending - 升序
descending - 降序
/scoreboard objectives setdisplay sidebar <计分板ID> [排序方式]belowname - 在玩家的名字下方显示分数
显示玩家所拥有的分数,以及对应的计分板显示名称。
显示格式为:<分数> <计分板显示名称>
/scoreboard objectives setdisplay belowname <计分板ID>如果你不填计分板ID,意思就是将那个地方清空。例如:
/scoreboard objectives setdisplay sidebar就是将屏幕右侧的计分板显示给关闭。
注意:这个修改将是全局修改,无法做到个人修改,而且显示效果稍有欠缺。但是,list和sidebar显示的数值是排好序的,所以你可以用这个特性制作排行榜,但尽量不要制作在sidebar里。
players
这个模块主要是对一个对象的分数进行修改或查询。
因为计分项里,即使是一个不存在的东西,只要计分了就是一个对象,就不局限于实体了。
/scoreboard players <下面讲的...>add & remove
将某些对象在某个计分板里进行加分。
/scoreboard players add <对象> <计分板ID> <加的值>小提示:在基岩版里,这个加的值可以为负数。我的习惯是在这里用负数来实现扣除的效果。
注意:如果你想尝试创建一个自定义对象,那么它的名字一定是要有意义的,否则你很难找到它的名字。自定义对象是作为全局使用的,假设世界上没有名为"abc"的玩家,那么abc就是一个自定义对象,它就像一个变量,可以用于赋值、比较等。
remove就是与之相对的了。格式与add一样。
/scoreboard players remove <对象> <计分板ID> <减的值>小提示:对象可为“*”。它的意思是所有对象。也就是说,当你在对象中填入星号,那么所有的对象都会进行修改。
set
将某些对象在某个计分板里的分数直接调整至某个分数。也就是说,直接把某个对象的分数调整于你所指定的分数,没有加减。
/scoreboard players set <对象> <计分板ID> <设置的值>reset
删除某个计分板中的对象,它的分数记录也直接删除。与清零不同的是,从根本上直接删除了这个对象,它没有一个值。
/scoreboard players add <对象> [计分板ID]如果不填“计分板ID”,那么所有计分板都会删除你所指定的对象。
operation
对两个对象所在的计分板分数进行一个操作。它就像赋值,但是没编程那么轻便。适用于值在变化时的四则运算,可以只需要一个命令方块就能完成一次乘法计算。
/scoreboard players operation <对象A> <对象A计分板ID> <赋值方式> <对象B> <对象B计分板>通常情况下,都是将B通过赋值方式赋值给A的。赋值方式如下:
+= : A+B => A
-= : A-B => A
*= : A*B => A
/= : A/B => A(整除去尾)
%= : A%B => A(两数求余)
< : A A (取两者中最小的那个赋值给A)
> : A>B? A:B => A (取两者中最大的那个赋值给A)
>< : 两者交换
不懂的可以自己去游戏实际测试一下。
如果你需要常量进行乘除运算,那么就创建一个自定义对象即可,这样你就可以直接用你想要的分数进行乘除了。又或者是加减运算时有一个值是变量,就需要用到这个模块。
random
虽然基岩版没有单独的/random指令,但是计分板有random的模块。
将某些对象在某个计分板里的分数直接调整至指定范围内的一个随机数。
最大值需要大于最小值。
/scoreboard players random <对象> <计分板ID> <最小值> <最大值>test(无介绍)
由于新的/execute语法已经有了更佳方案,所以就不花费额外的时间再去介绍老版本的检测。
若想实现检测分数效果,请查看/execute if score板块。
分数需要注意的一个点
分数的限制是2147483647,如果超出这个数则会出现很严重的问题。超出这个限制,你的分数就会变成负数。
无需作弊就可以使用的指令
在基岩版中,这种指令是很少的。但是实际用途是很多的,很快你就知道了。
/me & /tell & /w & /msg
/me是一个发送消息的指令。你说话时,名字将不再被尖括号括中,而是换成前面一个星号,然后空一格,再是你的名字,最后是你发送的消息。
/tell、/w、/msg都属于私聊。
/tell、/w、/msg用途全都一样。
注意:基岩版基本上除JSON文本的输出外,其余的输出都可以带目标选择器和目标选择器参数来输出和发送实体的名称。也就是说,只要你会用,每个人的手上都带着一个检测器。你可以用这个方法来查看服务器的tag标签、分数,甚至是玩家的距离!但是,如果管理员未关闭“sendcommandfeedback”选项,那么你发送的私聊还是会被管理员看到。
用法:
/w & /tell & /msg
/w(/tell /msg) <目标> <消息>/me
/me <消息>/list
只需要输入这条指令,便可以直接显示服务器所在的所有玩家!
输出消息、声音和粒子
这个大板块是专门讲输出文字、声音和粒子的。
/say
这是效果最差的一个输出。虽然十分简单,但是有时候就会非常难以控制。
输出的消息格式:
[<命令执行者>] <消息>
因为前面的中括号,所以效果就很让人难绷。除非是调试或特别简单的,基本上用不到/say。而且这个指令是全局发送。你可以使用目标选择器来快速显示某个实体的名称。
由于太简单,不做过多介绍。
/say <发送消息>/title & /titleraw
/title是与标题命令相关的,titleraw也是,但输出使用的JSON文本。一般情况下,普通的title已经足以使用。
先介绍/title的输出:
/title <目标> <输出位置> <内容>输出位置如下:
title - 显示于屏幕中间
subtitle - 显示于title的下面(需要先显示title)
actionbar - 显示于物品栏上方
和say一样可以使用目标选择器快速输出实体名称。
然后再是输出的设置:
times - 设置标题显示时间
单位为tick
/title <目标> <淡入时间> <停留时间> <淡出时间>clear - 直接删除标题
/title <目标> clearreset - 将标题的设置重置
/title <目标> resettitleraw的区别是什么呢?区别只有在显示的时候,将显示内容换成了JSON文本。
这里讲也不好讲,这是WIKI的基岩版原始JSON文本格式,不懂的可以去看看。(讲白了就是懒)
/tellraw
将JSON文本发送给一个指定的目标。
JSON文本的介绍,上面已经提供了网址。
这种输出天衣无缝,基本上没有任何漏洞。所以在一般情况下建议使用这种输出。
/tellraw <目标>
基岩版的JSON文本(下面简称为T显)有一个非常灵活的模块:translate。它可以“带着条件”输出。例如,灵活运用这个模块,你可以只用一个命令方块来实现检测世界上是否有猪并显示。
想必你在“借鉴”某些指令大佬的指令时就会遇到它。它一般会带着with。一个基础的translate+with的格式是这样的:
{"rawtext":[{"translate":"%%s, %%s, %%s","with":["1","2","3"]}]}这个显示将会输出“1, 2, 3”。当然,这会显得很多此一举。然而,如果只有这个,那为什么还要单独说这个技巧呢?
仔细阅读wiki解释,你会发现with是可以将rawtext作为文本的。而rawtext能干的事,就像平时的T显一样。
讲了这些好像没什么用,重点来了。
当"with"里的一个文本组件为空时,后面的所有文本组件都会往前填补位置。打个比方,此时世界上没有任何实体猪,输入这个指令:
/tellraw @a {"rawtext":[{"translate":"%%s","with":{"rawtext":[{"selector":"@e[type=pig]"},{"text":"Nothing"}]}}]}你可能会认为它将什么都不会输出,但实际上它会输出“Nothing”。如果世界上有一个猪,则会输出“猪”,如果有2个则输出“猪, 猪”(前提这些猪没有被命名)。这就是这个特点。
有人问了,这又有什么用呢?仔细阅读wiki解释,你会发现“%%s”还有“%%2”“%%3”等写法,它们分别代表第二个文本组件和第三个文本组件。因此,利用上述特性,我们便可以做出一个“条件T显”:
/tellraw @a {"rawtext":[{"translate":"%%2","with":{"rawtext":[{"selector":"@e[type=pig]"},{"text":"这个世界上有猪!"},{"text":"Nothing"}]}}]}当世界上有任何一个及以上的猪,输入此指令将会输出“这个世界上有猪!”,反之,输出“Nothing”。
看不懂?当世界上有猪时,此时第一个文本组件("selector":"@e[type=pig]")将会有“猪,……”文本等待分配,但此时%%2选择的是第二个文本组件("text":"这个世界上有猪!"),故此输出“ 这个世界上有猪!”。当世界上没有猪时,此时第一个文本组件的目标选择器找不到目标也无法提供任何文字,第一个文本组件为空。根据上述,所有文本组件会往前填补位置,此时第二个文本组件变为第一个文本组件,第三个文本组件("text":"Nothing")变为第二个文本组件。此时%%2选择的是现在的第二个文本组件("text":"Nothing"),故此输出“Nothing”。
怎么样?听懂了吗?你可以根据上述显示自己写一个属于自己的条件T显。
/particle
显示粒子效果。基岩版没Java版那么多设置,所以可调性特别低。
/particle <粒子效果ID> [xyz]不填“xyz”,则默认为命令执行点。
这是B站的粒子效果ID大全,你可以在这里面找到一些粒子效果的ID。
这是WIKI的粒子效果介绍,这里面也有粒子效果的ID。
/playsound
/playsound <声音ID> <目标> [位置] [音量] [音调]这是B站的声音ID大全,你可以在这里面找到一些声音的ID。
在某个位置播放声音给目标,音量音调可自定义。
如果不填“音调”,则默认为1。基岩版除了音调不能为负数,没有什么限制。
如果不填“音量”,则默认无论在哪都可听到。
如果不填“位置”,则默认命令执行点。
如果想填某一个值,那么前一个值必须设置好。/camera
更改玩家的视角。
这是一个基岩版独有的命令。打开WIKI界面,你会发现一大坨语法解析糊在了你的脸上,查视频又不方便针对学习。这个板块可以来帮助你。
fade
直接在目标玩家的“相机”(即为玩家的视角)上全部糊上一片你所指定的颜色,其淡入时间、持续时间、淡出时间可自定义。
如果只需要颜色(color),就只能填颜色;如果需要设置时间(time)和颜色,必须要先填时间,再填颜色。
淡入、持续、淡出的时间必须为0~10.0的浮点数(小数),R、G、B的数值必须为0~255的整数。
不填color,则默认为(0, 0, 0)[R, G, B](即为黑色);
不填time,则默认为(1, 1, 1)[淡入,持续,淡出]。
/camera <目标> fade color
set
直接移动/设置你的“相机”。
首先,你要设置你的相机类型,相机类型ID如下:
minecraft:free —— 自由相机
minecraft:first_person —— 第一人称视角
minecraft:third_person —— 第三人称视角
minecraft:third_person_front —— 第三人称视角(正面)
minecraft:free
重点讲解free相机。当玩家处于free视角时,玩家移动视角时,视角不会随其变化,仅为玩家的朝向发生变化。ease
/camera ... set minecraft:free ease <动画持续秒数> <类型> ...设置过渡到本次设置的相机的时间和动画类型。
时间为秒,可为小数。
类型必须为:
linear —— 线性
spring —— 弹簧
in_quad —— 四次方淡入(极其夸张、快速的过渡)
out_quad —— 四次方淡出
in_out_quad —— 四次方淡入淡出
in_cubic —— 三次方淡入 (相比于四次方,略微缓慢)
out_cubic —— 三次方淡出
in_out_cubic —— 三次方淡入淡出
in_quart —— 二次方淡入(更缓慢)
out_quart —— 二次方淡出
in_out_quart —— 二次方淡入淡出
in_quint —— 五次淡入(还有高手!?)
out_quint —— 五次淡出
in_out_quint —— 五次淡入淡出
in_sine —— 正弦淡入
out_sine —— 正弦淡出
in_out_sine —— 正弦淡入淡出
in_expo —— *未知,很正常的淡入(淡出),略快*
out_expo
in_out_expo
in_circ —— *未知具体含义,淡入(淡出)时速度极快*
out_circ
in_out_circ
in_bounce —— 会像一个弹跳球一样,如果淡入的话是Duang↑↓回来~duang↑↓回来~duang↑↓回来~Piu→→→!到指定相机位置,out则为到指定位置时像弹跳球摔在了地上一样。
out_bounce
in_out_bounce
in_back —— 淡入时,会像蓄力一样到指定位置;淡出时,会像缓冲一样向前一段距离后折返。
out_back
in_out_back
in_elastic —— 淡入时,会←→←→←→然后Piu!→→→→!淡出时,会在到达位置后←→←→←→。
out_elastic
in_out_elastic
好抽象的解释,但没办法,为了让大伙都看得懂。
pos
设置相机需要到达的位置。
/camera ... set minecraft:free ... pos
设置相机的朝向。
/camera ... set minecraft:free ... rot <水平旋转角度> <垂直旋转角度> ...default
设置为默认相机,即将位置设置为(0, 0, 0),朝向设置为(0, 0)。
What are you doing?
facing
设置相机将会朝向哪一个实体。
/camera ... set minecraft:free ... facing <一个目标> ...其他的呢?
其他的就设置为指定的视角相机。注意设置后直接覆盖你在set里设置的其它视角。设置后,无法通过任何方法切换第一人称、第三人称背面和第三人称正面。
clear
清除目标玩家的所有相机效果。
/camera <目标> clear【现学现用】指令模板 - 实际运用和指令的结合(基岩版)
“真心话大冒险”机器
需要达成的效果:显示一个“问”的玩家,显示一个“答”的玩家。
需要用到的指令:/tag、/tellraw。
括号为选项。
知识点包含:基岩版原始JSON文本的运用,TAG标签的灵活运用、命令方块。
最基础版本
仅显示一个“问”和一个“答”的玩家。
因此,我们只需要5个命令方块,分别执行三个模块:
分配问答玩家(2)
输出结果(1)
清空标签(2)
那么,在你的“真心话大冒险”活动场所中央放置一个朝下的脉冲命令方块(脉冲无条件红石控制↓)并输入:
/tag @r add ans接着上一个脉冲命令方块的下面放置一个朝下的链命令方块(链无条件保持开启↓)并输入:
/tag @r[tag=!ans] add ask为了确保游戏的绝对稳定性,禁止答的玩家问,避免被嘲笑技术问题。
接着上一个链命令方块的下面放置一个朝下的链命令方块(链无条件保持开启↓)并输入:
/tellraw @a {"rawtext":[{"selector":"@a[tag=ans]"},{"text":" 真心话还是大冒险\n"},{"selector":"@a[tag=ask]"},{"text":" 问"}]}用于输出结果。这仅仅只是一个初始模板,如果需要自行修改可按照实际输出结果进行修改。
如果Steve被赋予ans标签,Alex被赋予ask标签,按道理来说将会输出:
Steve 真心话还是大冒险Alex 问接着上一个链命令方块的下面放置2个朝下的链命令方块(链无条件保持开启↓)并分别输入:
/tag @a remove ans/tag @a remove ask收尾防止下一次出现多个名称。
不要设置任何“可选项中的延迟”。
或许有点些许酷炫
不仅显示问答玩家,在显示之前还需要有一个渐渐“选择”的动画。
还需要用到更多的指令:/scoreboard、/playsound、/titleraw、/execute。
还需要用到更多的知识点:命令方块的执行频率、可选项中的延迟、关于分数的知识点、title的运用、声音音效的运用。
在此之前,我们需要一个计分板。所以需要输入:
/scoreboard objectives add time dummy你可能觉得这很复杂,不过我们可以先想想怎么排版。
首先,变量dmx(*我们尽量选择易理解的“变量”作为分数载体。)≥1时,开始播放“选择动画”;
dmx = 0 时,显示最终结果,清除标签并将分数调为 -1;
dmx ≤ -1 时,空闲不执行任何操作;
每 2 tick 且 dmx ≥ 0 时 dmx - 1。
其次,提前将“选择对话”的JSON文本显示、音效准备好。
JSON文本显示:
/titleraw @a actionbar {"rawtext":[{"selector":"@a[tag=ans]"},{"text":" 真心话还是大冒险\n"},{"selector":"@a[tag=ask]"},{"text":" 问"}]}音效(默认为在选择时播放拾取物品音效,完成后播放铁砧落地加速音效):
/playsound random.pop @s ~ ~ ~ 100 0.76/playsound random.anvil_land @s ~ ~ ~ 100 1.5最后,我们可以进入正题了。准备好这种装饰类的,在我们执行理论性的东西,就会相对简单得多。
因为这种为后台型指令,因此你只需要在活动地点摆一个命令方块来激活“dmx”分数。
放置一个命令方块设置为“循环无条件保持开启”并在可选项的延迟中设置为2,因为为1时速度太快不太适合该活动。
/execute if score dmx time matches 1.. run tag @r add ans当dmx≥1时,随机分配“答”。
接着该命令方块放置一个链命令方块设置为“链无条件保持开启”:
/execute if score dmx time matches 1.. run tag @r[tag=!ans] add ask当dmx≥1时,随机分配“问”。和基础版一样,我们杜绝“设问”。
这是我个人的指令习惯,如果你觉得这很屎山勿喷
接着该命令方块放置一个链命令方块设置为“链无条件保持开启”:
/execute if score dmx time matches 1.. run /titleraw @a actionbar {"rawtext":[{"selector":"@a[tag=ans]"},{"text":" 真心话还是大冒险\n"},{"selector":"@a[tag=ask]"},{"text":" 问"}]}用于在物品栏上方不断显示随机的姓名,来增强氛围感。即使这可能多此一举,但这个本就是为娱乐设定,不加点色彩也太无聊了吧?
当然,这还是一个十分基础的模板,你可以在原指令上增添一些色彩。
接着该命令方块放置一个链命令方块设置为“链无条件保持开启”:
/execute if score dmx time matches 1.. as @a at @s run /playsound random.pop @s ~ ~ ~ 100 0.76用于播放循环时的音效,这里的as @a at @s 就是用于分配至所有玩家的。
接着该命令方块放置一个链命令方块设置为“链无条件保持开启”:
/execute if score dmx time matches 0 run /tellraw @a {"rawtext":[{"selector":"@a[tag=ans]"},{"text":" 真心话还是大冒险\n"},{"selector":"@a[tag=ask]"},{"text":" 问"}]}当dmx=0时,在聊天框输出结果,避免部分人逃避本次的大冒险活动。
接着该命令方块放置一个链命令方块设置为“链无条件保持开启”:
/execute if score dmx time matches 0 as @a at @s run /playsound random.anvil_land @s ~ ~ ~ 100 1.5当dmx=0时,再播放一次音效,以提醒各位玩家该问了。
接着该命令方块放置一个链命令方块设置为“链无条件保持开启”:
/execute if score dmx time matches 0 run scoreboard players set dmx time -1当dmx=0时直接设置为-1,彻底避免可能潜在的BUG。
接着该命令方块放置2个链命令方块设置为“链无条件保持开启”,分别填入:
/tag @a remove ans/tag @a remove ask和基础版一样收尾。
接着该命令方块放置一个链命令方块设置为“链无条件保持开启”:
/execute if score dmx time matches 0.. run scoreboard players add dmx time -1dmx ≥ 0 时 dmx - 1。以确保时间的渐进。
核心部分完毕,在活动触发点放置一个脉冲命令方块,输入:
/execute if score dmx time matches ..-1 run scoreboard players set dmx time 10整个真心话大冒险机器就完工了!邀请你的朋友一起来体验,按下按钮:啵啵啵啵,叮!你问我答!
还会持续更新……
尚未完善,不过仍然会不断更新。