本帖最后由 Dahesor 于 2022-4-21 12:05 编辑
以下是我关于为什么要这么做的念念叨叨......你可以直接进入主题
从我注册到现在1年半,我翻过了大量的帖子,找到了各种大佬新手教程,模组制作教程,使用命令完成的惊人项目......却没关于指令本身,与时俱进的帖子。网络上的“指令大全“ 要么讲的不够清楚,要么干脆放上的都是”//“开头的WorldEdit指令。MCWiki上的描述又太”官话“,完全看不懂。
既然如此,闲着也是闲着,我会在这里从零开始,讲述每一条指令,随版本更新。从选择器到execute到nbt到json到datapack。
嘛,不一定能坚持下去。刚才犹豫了半天要不要开始,后来判断为缺乏自信,于是我用下面这句话来鼓励自己:
请多指教。
|
命令教程(一)有关指令,选择器,/kill,与命令方块
声明:
1. 本教程默认所有读者看过本系列之前的内容。作者不对可能冒出来的术语或方言负责。以前帖的链接在最后。
2. 本系列教程默认读者拥有关于Minecraft游戏的基础了解。
3. 本系列全部教程均适用于当前Java最新版(1.18)但本帖中的内容仍适用于1.13~1.18。
4. 本系列教程致力于基础原理而非使用方法,因为某些原因,这是本声明里最重要的一条。
5. 本期教程所有涉及到的命令均会在最下方列出,以便查阅。
前言
好吧好吧,我知道百分之99的人应该都知道什么是指令。但作为一篇完整的教程,这就是我们要开始的地方。
什么是命令?
命令(Command)是通过输入特定文本字符串而激活的高级功能。
----Minecraft Wiki 废话
当然,我不说wiki写的不好。作为wiki,它就得这么写。
我说它是废话,是因为你无法从中获取什么信息。
什么是高级功能?它能用来做什么?
指令,用于调整,设置,修改世界。
很多游戏都有指令,但没有一种游戏可以像Minecraft命令一样富有创造性。 我想尝试给命令下一个定义...但好像没有这方面的天赋。
但没关系,了解一样东西,最简单的方法就是看看它本身。
刚刚说了,任何命令都由一串“特定的”字符串组成。这串字符当然不是随机的。它需要遵循某种规律——格式。
1.1 命令格式
任何语言,无论是人的语言又或是机器的语言,都遵循某种语法或格式。
现在,按T键(或聊天键)打开你的输入窗口。你可以在这里输入指令。
首先,你需要的是指令前缀 “/”。这个前缀用于告诉电脑,这是一条指令,而非正常聊天。
紧接着前缀的,是指令头#。这决定了你要执行哪种命令。
指令头:你要干什么?要吃?要喝?要行走还是要睡觉?
我要喝
好。但是,仅凭这一点信息还是不够的。我们需要在指令头之后加入更多的条件与描述:
子命令:具体点,你要喝啥?牛奶
目标:谁要喝?Dahesor(我的ID)
坐标:在哪里?世界的中心点
指令模式:怎么喝?用吸管?小口抿?仰脖端
值:喝多少?400毫升
NBT:再具体,什么牌子的?除没除菌?离过期还有多久? ......
以上的每一条信息,被称为元素(Elements)。
元素与元素之间以空格相隔。这就是指令的格式。(实际上,这就是你的游戏ID中为什么不能出现空格的原因之一!不然的话,我们将无法在指令中选中你的ID!你名字空格后面的内容将被视为下一个元素)
一条指令看起来像这样:
/指令头 子指令 目标 坐标 格式 值 模式 ......
(并不是每一条指令都必须包含所有元素,也同样有没在上方写出的元素。)
举个例子:
- /gamerule doDaylightCycle false
复制代码 gamerule: 指令头 gamerule:更改游戏规则
doDaylightCycle: 目标 doDayLightCycle: 是否进行日夜交替
false: 值 false:假
连起来:更改游戏规则,关闭日夜循环!
简单吧。
#临时编的词,方便理解
权限
唉唉,等等,在执行指令之前,我们有一件最重要的事情——你有权限吗?
在多人游戏中,你需要拥有从管理员处给予的特定等级的OP权限来执行需要特定权限的命令。
所以如果你想使用命令的话,可以打开单人游戏,并确保在你创建它时勾选了“允许作弊”的选项。
没勾选?这时你就需要进入暂停选单,选择“对局域网开放”,打开允许作弊了。
不过,你的游戏会对局域网开放,所以......可能正在玩MC的你的邻居突然闯入你的世界~
(若不使用这种方法,也可以通过外部NBT编辑器编辑存档文件夹的level.dat以允许作弊,这里就不细讲了)
1.2 命令/Kill
让我们看向一个简单的指令:
/kill 即杀死命令。(或者专业点,清除命令)
来,这将是以后介绍所有命令是的方式,先给出格式:
"<>" 用于表示必要的元素
这不难——假如你要杀死我,你就需要把“<目标>”替换成我的ID——Dahesor:
这条指令将会杀死我。
同理,如果你想杀死MysticNebula70(MInecraft Wiki 名人)你就需要输入:
(咳,抱歉黑猫(这位的绰号))
这不难吧。
不过这时,我们有了一个问题:如何选择一个拥有不确定ID的玩家?
举个例子。你做了个迷宫,并准备坑玩家一把。一旦玩家找到出口,就在终点线前用/kill把Ta杀死。
现在问题来了。你将地图发布,并不知晓谁会来玩你的地图,也不知道Ta的ID会是什么。
现在,你如何杀死Ta?
你需要一种根据某种规则选择特定玩家的方法:
选择器
你知道么,在1.7.10以前使用/kill自这杀是会出现一个彩蛋:"哎呦,这看起来很疼"(原句记不清了,但大致如此)
1.3 选择器
选择器(Selectors)为你提供了一种选择不明ID玩家的方法。
MInecraft命令共有5种*选择器:
@a 选择所有玩家
@p 选择最近玩家
@r 选择随机玩家
@s 选择执行者
@e 选择所有实体
这是,你只需要将“<目标>”替换为以上的一个选择器即可:
/kill @a 会杀死所有玩家——包括你自己
/kill @p 会杀死最近的玩家——也就是你自己——你执行的指令,离你自己最近的当然是你自己。
/kill @r 会随机挑一位玩家杀死——单人模式下还会杀死你自己。
/kill @s 会杀死执行者——你自己
/kill @e 会杀死所有实体,这包括了玩家,生物,掉落的物品与经验球,飞行中的箭矢或雪球,矿车,船,等等——这当然包括你自己。
你的问题,用选择器就得以解决。
你只需要当玩家走到迷宫终点时,运行/kill @p 就好了
等等,不对,还没完——
别人游玩你的地图时你不在场,无法执行指令。总不能放块告示牌让玩家自己执行吧。
你需要某种可以代替你执行命令的机关:
命令方块
*在教育版中,还有两种用于选择吉祥物的指令,在这里不予讨论。
1.4 命令方块
那么这些方块将可以通过红石信号控制来执行命令。只要使用恰当的命令,很多东西都能被编程。
如你所见,命令方块(Command Block)是一个方块,只要有红石信号激活就可以运行储存其中的指令。我默认所有阅读者理解红石及其原理——如果你不懂,请在论坛自行查找。
1.4.1获取
命令方块不存在于你的创造模式物品栏中——所以别翻你的背包了。你需要give指令来获取它。
你不需要知道它的原理,照打就好:
只要输入正确,你将获得命令方块(再次强调,游戏版本很重要!)
把它放在地上,它应该长这样:
(背景是随意用结构方块生成的“村庄入侵图”QAQ)
右键点击就可以打开它的UI:
好,先无视下面那三个复杂的按钮,只看上面的的输入框。这就是你要输入指令的地方。
简单地输入/kill @p,然后点击完成或敲一下”Enter“就可以了。(警告!取消或”Esc“不会保存,不要好不容易打好长一串指令然后条件反射按”Esc“!)
找个拉杆按上去,一拉——指令执行——你死了。
很简单。
所以,现在是时候看看下面复杂的部分了。
(注意!由于不再需要将命令与普通聊天区分,在命令方块中,你可以不输入指令前缀"/"!)
1.4.2 模式
首先,让我们看向左侧的按钮,对,就是那个写着”脉冲“的。
这是命令方块的运行模式。点击按钮就可以在全部三种模式中循环:
总共有三种模式:脉冲(Impulse),连锁(Chain),和循环(Repeat)。
在不同的模式下,命令方块呈现不同的颜色,以便区分。脉冲为橙色,连锁为青色,循环为紫色。
脉冲模式,即默认的。激活一次命令方块,运行一次命令。若想再次运行,要先退出激活状态,然后再次激活。在前面的例子中,拉杆将会持续输出红石信号,但命令方块只会运行一次
而循环模式下,只要保持激活,便会以一游戏刻一次(每秒20次)的速度执行指令。只要你拉起拉杆,你会在每秒被杀死20次! 但不止这么简单! 游戏刻(Game Tick)是我的世界的最小时间单位。每一游戏刻长50毫秒。没有任何新事情会在两个游戏可中间发生! 所以若你在一个循环命令方块上输入了一个清除玩家身上所有TNT的指令,没有人会有机会使用TNT,因为它会在出现在背包里的同一刻被清除! 你可能会发现,你的聊天框被指令输出(Command Block Output)填满,请用这条指令关闭它。 - /gamerule commandBlockOutput false
复制代码(以后会讲啦)
连锁 在这种模式下,命令方块不受红石控制,而是会随指向它的命令方块一起运行。你可能注意到了一个新词:指向。 看向你命令方块的材质吧,你会发现,它的一面是个正方形,对面是个圆形(或菱形),而四周全是箭头。圆形(或菱形)的那一面是“正面”,方形则是“背面”。四个箭头指向的,即是命令方块的指向(direction)。 若一个命令方块指向一个紧邻的连锁型命令方块,这个连锁型命令方块将会在它之前的命令方块执行后同紧跟着执行命令,在同一游戏刻。一个连锁型命令方块也可以带动另一个连锁型命令方块,所以你可以得到一长串的连锁型命令方块,只要第一个脉冲或循环型命令方块被激活,所有命令方块也会在同一游戏刻依次执行。
一排连锁型命令方块
(一长串命令方块)
注意重点“依次”!即使所有命令方块在同一游戏刻执行,它们也是依次的! 举个例子,知道如何用雪球制作手榴弹吗?(不是火焰弹,是投掷的手榴弹) 你需要不断,依次执行以下几条命令: 1. 使用kill清除所有雪球碰到的隐形盔甲架 2. 在所有隐形盔甲架的位置召唤爆炸 3. 在所有飞行中的雪球的位置召唤一个隐形的盔甲架 这三条命令会在每一游戏刻都依次执行一遍。首先,第一条命令会把上一游戏刻第三条命令留下来的盔甲架清除,导致第二条命令无法运行——找不到盔甲架。而第三条命令又会生成新的盔甲架。循环往复,直到雪球因撞到某物消失。此时,第一条指令将无法执行——因为雪球消失了——于是轮到了第二条指令——轰!
你可以看到次序在上例中的重要性。如果连锁性命令方块不是依次执行的,这将无法实现。
注意:上面的方法并不完善,直接使用有严重BUG(会无限爆炸),只是教程为了简洁没写。
注意盲点: 连锁型命令方块只是“不受红石控制”,意思是在它上面放按钮然后按下不会执行其中的命令,但是连锁型命令方块仍然需要被红石充能才可以被激活!
换句话说,如果你连了一串连锁型命令方块但只对第一个脉冲型命令方块上拉动拉杆,那么也只有第一个方块会执行命令。
当然,我们也可以用下面会说的“保持开启”功能。
1.4.3 条件制约
现在,让我们看向第二个按钮:条件制约/不受制约。什么意思呢?这个选项只对连锁型命令方块有效,那就是:当选择条件制约时,只有前一个命令方块执行成功时,它才会紧跟着执行。
比如,你输入了一条错误的指令:/kiiiill @a
嗯,打错了。
或者: /kill Dahhhhesssor
嗯,没有一个叫”Dahhhesssor“的玩家
以上两种情况,指令都无法执行。
这时,被这个命令方块指向的连锁型命令方块,如果调成条件制约,也不会执行!
这是你遇到的第一个可以进行条件判断的方法。
(条件制约时,你的命令方块箭头材质的后方会出现一个豁口)
注意!条件制约只是“不会执行”而不会“阻止连锁”!
比如,下面这种情况:
假设,你只在第三号与第五号命令方块中填入了正确的指令,其他三个都是瞎写的关于邻居大嗓门大妈如何如何的抱怨。
即使最下方的一号脉冲型命令方块中输入的不是指令,也仍会触发连锁——只要被激活,无论是否执行,都会触发连锁。
第三号命令方块除了拥有正常命令以外,还设定了条件制约,这导致它无法执行,因为第二号中填入的不是指令QAQ。
但连锁并不因此而断,五号命令方块仍可以执行它的指令,因为它不受制约:第四号命令方块无法执行也没关系。就像我说的:条件制约只是“不会执行”而不会“阻止连锁”!
连锁会一直进行下去!(直到默认的65535次连锁上限(我居然把这串数背下来了))
接下来,让我们看向最右侧的按钮:
1.4.4 保持开启
这个很简单:命令方块是受红石控制还是保持开启。
一般来说,我们只在循环型命令方块上打开此选项——这会让它“真”一刻不停的执行其中的指令。此外,它也可以让连锁型命令方块保持住“准备被连锁”的状态,就像上面说过的那样。
脉冲型命令方块用不上它——在你保存的那一刻,命令就会被执行,然后就没动静了(若想再次运行,要先退出激活状态,然后再次激活)。
1.4.5 输出结果
最后,看一下那个“叉”形按钮。
这是你的指令输出,比如使用/kill时,它会提示
打开时,命令方块的UI如下:
这是除错用的。当你不需要时请将它关闭,这可以节省内存。
哦哦,等等,在结束今天的内容前还有一件事
帮助指令/ help
在游戏中,你总是可以使用指令:
使用本指令可以查看所有可用的命令及其格式-
大概是这样
你可能看不懂。
很正常。(必竟上面的信息根本都没给全……能理解就有鬼了。)
你在上面看到的所有,那一大滩的的命令-
我们都会在接下来的内容中讲到。
那,为各位,也为我自己——
加油啦
以上就是第一部分的全部内容啦
呼~这么多,终于结束了。嘛,这也是第一课有很多要说的缘故。
再见各位......有那里写错了,或者有要补充的,欢迎指正。
啊......忘了说Tab补全的事了......算了以后再说吧
下一次,就讲tp与三种坐标吧。
困了......这也是为什么后半段质量下降的缘故......过两天会改的,感觉对你有帮助的话就随便在下面回点什么吧......毕竟,读者的回复是对作者最大的鼓励之一啊。期待以后的话......点个收藏吧......新帖发了会提醒的。
我要去补觉了......修仙到现在QAQ
附录
本期命令列表:
主题相关: 效果:杀死ID为Dahesor的玩家
效果:杀死ID为MysticNebula70的玩家
效果:杀死所有玩家
效果:杀死最近的玩家
效果:杀死随机一名玩家
效果:杀死命令的执行者
效果:杀死所有实体 实体为游戏中除方块外的所有动态的物体,包含玩家,生物,矿车,飞行中的弹射物,等等。
无关主题的其他命令:
- /gamerule doDaylightCycle false
复制代码效果:关闭日月,时间,与月相的更改。 |
#更新日志
Java 1.16.5/a 页面发布 Java 1.16.5/b 重新排版,修改错字 Java 1.16.5/c 添加了有关命令权限的内容 Java 1.16.5/d 感谢△@← 的纠正,改正了有关毫秒的错误。 Java 1.16.5/e 添加了关于/help指令的说明。
Java 1.17/a 1.17版本升级完成 Java 1.17.1/b 为避免误导,增加了一个注释。 Java 1.17.1/c 添加了涉及命令列表
Java 1.18.2/a 1.18升级完成,添加了关于红石对连锁型命令方块关系的描述。 暂无更新计划
上一篇:这是第一篇(^_^)
系列《命令教程“真”从零开始》
前往来自 麻瓜草稿簿 的 系列教程索引
下一篇:
[教程] [命令] 命令教程“真”从零开始 (二) 命令tp与相对,局部坐标与朝向锚
|