当前位置:网站首页 > Java基础 > 正文

java版指令基础



这是原载于MCbbs论坛上的命令教程。随着论坛的消失,这系列教程经修缮(可能需要几天时间)后被迁移至此。

作者不保证对本教程的维护和更新(全随兴致),请您自行判断内容是否过时。不过,若有更多问题欢迎在评论区提出

教程声明:

  1. 系列教程默认读者是按照顺序阅读的
  2. 教程默认读者有对Minecraft的基础了解
  3. 教程主要注重基础原理,实践内容极少
  4. 本篇教程适用于Java 1.20.4,但大部分内容也适用于1.13+

前言

好吧好吧,我知道百分之99的人应该都知道什么是指令。但作为一篇完整的教程,这就是我们要开始的地方。

什么是命令?

命令(Command)是通过输入特定文本字符串而激活的高级功能。

----Minecraft Wiki

什么是高级功能?它能用来做什么?

指令,用于调整,设置,修改世界。

很多游戏都有指令,但没有一种游戏可以像Minecraft命令一样富有创造性。

我想尝试给命令下一个定义……但好像没有这方面的天赋。

但没关系,了解一样东西,最简单的方法就是看看它本身。

刚刚说了,任何命令都由一串“特定的”字符串组成。这串字符当然不是随机的。它需要遵循某种规律——格式

1.1 命令格式

任何语言,无论是人的语言又或是机器的语言,都遵循某种语法或格式。

现在,按T键(或聊天键)打开你的输入窗口。你可以在这里输入指令。

首先,你需要的是指令前缀 /”。这个前缀用于告诉电脑,这是一条指令,而非正常聊天。

紧接着前缀的,是指令头(#)。这决定了你要执行哪种命令。

指令头:你要干什么?要吃?要喝?要行走还是要睡觉?

我要喝

好。但是,仅凭这一点信息还是不够的。我们需要在指令头之后加入更多的条件与描述:

子命令:具体点,你要喝啥?牛奶

目标:谁要喝?Dahesor(我的ID)

坐标:在哪里?世界的中心点

指令模式:怎么喝?用吸管?小口抿?仰脖端

值:喝多少?400毫升

NBT:再具体,什么牌子的?除没除菌?离过期还有多久? ......

以上的每一条信息,或许你可以叫它元素(Elements)。或者输入项 (Entry)

元素与元素之间以空格相隔。这就是指令的格式。(实际上,这就是你的游戏ID中为什么不能出现空格的原因之一!不然的话,我们将无法在指令中选中你的ID,你名字空格后面的内容将被视为下一个元素)

一条指令看起来像这样:

 

(并不是每一条指令都必须包含所有元素,也同样有没在上方写出的元素。)

举个例子:

 

gamerule: 指令头  gamerule:更改游戏规则

doDaylightCycle: 目标   doDayLightCycle: 是否进行日夜交替

false: 值   false:假

连起来:更改游戏规则,关闭日夜循环!

简单吧。

#临时编的词,方便理解

权限

唉唉,等等,在执行指令之前,我们有一件最重要的事情——你有权限吗?

在多人游戏中,你需要拥有从管理员处给予的特定等级的OP权限来执行需要特定权限的命令。

所以如果你想使用命令的话,可以打开单人游戏,并确保在你创建它时勾选了“允许作弊”的选项。

没勾选?这时你就需要进入暂停选单,选择“对局域网开放”,打开允许作弊了。

使用局域网打开允许作弊

不过,你的游戏会对局域网开放,所以......可能正在玩MC的你的邻居突然闯入你的世界

(若不使用这种方法,也可以通过外部NBT编辑器编辑存档文件夹的level.dat以允许作弊,这里就不细讲了)

1.2 命令/Kill

让我们看向一个简单的指令:

/kill 即杀死命令。(或者清除命令

来,这将是以后介绍所有命令是的方式,先给出格式:

 

"<>" 用于表示必要的元素。

这不难理解——假如你要杀死我,你就需要把“<目标>”替换成我的ID——Dahesor:

 

这条指令将会杀死我。

/kill Dahesor

同理,如果你想杀死MysticNebula70你就需要输入:

 

这不难吧。

不过这时,我们有了一个问题:如何选择一个拥有不确定ID的玩家?

举个例子。你做了个迷宫,并准备坑玩家一把。一旦玩家找到出口,就在终点线前用/kill把Ta杀死。

现在问题来了。你将地图发布,并不知晓谁会来玩你的地图,也不知道Ta的ID会是什么。

现在,你如何杀死Ta?

你需要一种根据某种规则选择特定玩家的方法:

选择器

1.3 选择器

选择器(Selectors)为你提供了一种选择不明ID玩家的方法。

MInecraft命令共有6种*选择器:

  • @a  选择所有玩家
  • @p  选择最近玩家
  • @r  选择随机玩家
  • @s  选择执行者
  • @e  选择所有实体
  • @n  选择最近的实体 (1.21即将加入)

这时,你只需要将“<目标>”替换为以上的一个选择器即可:

 

 会杀死所有玩家——包括你自己

 

会杀死最近的玩家——也就是你自己——你执行的指令,离你自己最近的当然是你自己。

 

会随机挑一位玩家杀死——单人模式下还会杀死你自己。

 

会杀死执行者——你自己

 

会杀死所有实体,这包括了玩家,生物,掉落的物品与经验球,飞行中的箭矢或雪球,矿车,船,等等——这当然包括你自己。

 

会杀死最近的实体——同样是你自己

你的问题,用选择器就得以解决。

你只需要当玩家走到迷宫终点时,运行/kill @p 就好了

等等,不对,还没完——

别人游玩你的地图时你不在场,无法执行指令。总不能放块告示牌让玩家自己执行吧。

你需要某种可以代替你执行命令的机关:

命令方块

1.4 命令方块

那么这些方块将可以通过红石信号控制来执行命令。只要使用恰当的命令,很多东西都能被编程。

——Jeb关于命令方块的宣告

如你所见,命令方块(Command Block)是一个方块,只要有红石信号激活就可以运行储存其中的指令。我默认所有阅读者理解基础红石原理——如果你不懂,请自行查找。

实际上,在数据包于宏函数如此普及的1.20,命令方块已经几乎不会再用到了。然而遵照传统,我们不得不把剩下的大半篇幅花在命令方块上——仅此一次。

1.4.1获取

命令方块不存在于你的默认创造模式物品栏中——所以别翻你的背包了。

你可以在设置中允许其出现(管理员用品标签页:开),不过作为一篇命令教程,我会让你你用give指令来获取它。

你不需要知道它的原理,照打就好:

 

只要输入正确,你将获得命令方块(再次强调,游戏版本很重要!)

把它放在地上,它应该长这样:

脉冲型命令方块

右键点击就可以打开它的UI:

Java版UI  来自Minecraft Wiki

好,先无视下面那三个复杂的按钮,只看上面的的输入框。这就是你要输入指令的地方。

简单地输入/kill @p,然后点击完成或敲一下”Enter“就可以了。(警告!"取消"或”Esc“不会保存,不要好不容易打好长一串指令然后条件反射按Esc

找个拉杆按上去,一拉——指令执行——你死了。

很简单。

所以,现在是时候看看下面复杂的部分了。

(由于不再需要将命令与普通聊天区分,在命令方块中,你可以不输入指令前缀"/")

1.4.2 模式

首先,让我们看向左侧的按钮,对,就是那个写着”脉冲“的。

这是命令方块的运行模式。点击按钮就可以在全部三种模式中循环:

总共有三种模式:脉冲(Impulse),连锁(Chain),和循环(Repeat)

在不同的模式下,命令方块呈现不同的颜色,以便区分。脉冲为橙色,连锁为青色,循环为紫色。

脉冲模式,即默认的。激活一次命令方块,运行一次命令。若想再次运行,要先退出激活状态,然后再次激活。在前面的例子中,拉杆将会持续输出红石信号,但命令方块只会运行一次

循环型命令方块

循环模式下,只要保持激活,便会以一游戏刻一次(每秒20次)的速度执行指令。只要你拉起拉杆,你会在每秒被杀死20次!

但不止这么简单!

游戏刻(Game Tick)是MC逻辑上的最小时间单位。每一游戏刻长50毫秒。没有任何新事情会在两个游戏刻中间发生

所以若你在一个循环命令方块上输入了一个清除玩家身上所有TNT的指令,没有人会有机会使用TNT,因为它会在出现在背包里的同一刻被清除!

你可能会发现,你的聊天框被指令输出(Command Block Output)填满,请用这条指令关闭它。

 

(以后会讲啦)

连锁型命令方块

连锁  在这种模式下,命令方块不受红石控制,而是会随指向它的命令方块一起运行。你可能注意到了一个新词:指向

看向你命令方块的材质吧,你会发现,它的一面是个正方形,对面是个圆形(或菱形),而四周全是箭头。圆形(或菱形)的那一面是“正面”,方形则是“背面”。四个箭头指向的,即是命令方块的指向(direction)。

若一个命令方块指向一个紧邻的连锁型命令方块,这个连锁型命令方块将会在它之前的命令方块执行后同紧跟着执行命令,在同一游戏刻。一个连锁型命令方块也可以带动另一个连锁型命令方块,所以你可以得到一长串的连锁型命令方块,只要第一个脉冲java版指令基础或循环型命令方块被激活,所有命令方块也会在同一游戏刻依次执行。

一长串连锁型命令方块。然而你需要在最前面接入一个脉冲或循环才能激活它们

注意重点“依次”!即使所有命令方块在同一游戏刻执行,它们也是依次的!

举个例子,知道如何用命令方块雪球制作手榴弹吗?(不是火焰弹,是投掷的手榴弹)

其中一种(相当过时的)方法是这样的:

1. 使用kill清除所有雪球碰到的隐形盔甲架

2. 在所有隐形盔甲架的位置召唤爆炸

3. 在所有飞行中的雪球的位置召唤一个隐形的盔甲架

这三条命令会在每一游戏刻都依次执行一遍。首先,第一条命令会把上一游戏刻第三条命令留下来的盔甲架清除,导致第二条命令无法运行——找不到盔甲架。而第三条命令又会生成新的盔甲架。循环往复,直到雪球因撞到某物消失。此时,第一条指令将无法执行——因为雪球消失了——于是轮到了第二条指令——轰!

你可以看到次序在上例中的重要性。如果连锁命令方块不是依次执行的,这将无法实现。

注意:上面的方法并不完善(而且过时,低效),直接使用有严重BUG(会无限爆炸),只是教程为了简洁没写。

    注意盲点:

连锁型命令方块只是“不受红石控制”,意思是在它上面放按钮然后按下不会执行其中的命令,但是连锁型命令方块仍然需要被红石充能才可以被激活!

换句话说,如果你连了一串连锁型命令方块但只对第一个脉冲型命令方块上拉动拉杆,那么也只有第一个方块会执行命令。

当然,我们也可以用下面会说的“保持开启”功能。

1.4.3 条件制约

现在,让我们看向第二个按钮:条件制约/不受制约。什么意思呢?这个选项只对连锁型命令方块有效,那就是:当选择条件制约时,只有前一个命令方块执行成功时,它才会紧跟着执行。

比如,你输入了一条错误的指令:/kiiiill @a

嗯,打错了。

或者: /kill Dahhhhesssor

嗯,没有一个叫”Dahhhesssor“的玩家

以上两种情况,指令都无法执行。

这时,被这个命令方块指向的连锁型命令方块,如果调成条件制约,也不会执行!

这是你遇到的第一个可以进行条件判断的方法。

(条件制约时,你的命令方块箭头材质的后方会出现一个豁口)

下方为条件制约开启  来自Minecraft Wiki

注意!条件制约只是“不会执行”而不会“阻止连锁”!

比如:

你使用了5个命令方块(1脉冲+4连锁),并连锁到一起。你只在第三号与第五号命令方块中填入了正确的指令,其他三个都是瞎写的。

1脉冲+4连锁

即使最下方的一号脉冲型命令方块中输入的不是指令,也仍会触发连锁——只要被激活,无论是否执行,都会触发连锁

第三号命令方块除了拥有正常命令以外,还设定了条件制约,这导致它无法执行,因为第二号中填入的不是指令QAQ。

但连锁并不因此而断,五号命令方块仍可以执行它的指令,因为它不受制约:第四号命令方块无法执行也没关系。就像我说的:条件制约只是“不会执行”而不会“阻止连锁”!

连锁会一直进行下去!(直到默认的65535次连锁上限)

接下来,让我们看向最右侧的按钮:

1.4.4 保持开启


这个很简单:命令方块是受红石控制还是保持开启。

一般来说,我们只在循环型命令方块上打开此选项——这会让它“真”一刻不停的执行其中的指令。此外,它也可以让连锁型命令方块保持住“准备被连锁”的状态,就像上面说过的那样。

脉冲型命令方块用不上它——在你保存的那一刻,命令就会被执行,然后就没动静了(若想再次运行,要先退出激活状态,然后再次激活)。

1.4.5 输出结果

最后,看一下那个“叉”形按钮。

这是你的指令输出,比如使用/kill时,它会提示

 

类似的内容

打开时,命令方块的UI如下:

输出结果

这是除错用的。当你不需要时请将它关闭,这可以节省内存。

哦哦,等等,在结束今天的内容前还有一件事

帮助指令/ help

在游戏中,你总是可以使用指令:

 

使用本指令可以查看所有可用的命令及其格式——

很正常。(必竟上面的信息根本都没给全……能理解就有鬼了。)

你在里面看到的所有,那一大滩的的命令——

我们都会在接下来的内容中讲到。

版权声明


相关文章:

  • java基础注意问题2025-04-03 21:02:04
  • java基础篇异常详解2025-04-03 21:02:04
  • java基础实例代码2025-04-03 21:02:04
  • hadoop基础是java2025-04-03 21:02:04
  • java基础教学2362025-04-03 21:02:04
  • java基础培训学校2025-04-03 21:02:04
  • java的基础知识2025-04-03 21:02:04
  • java基础语法1102025-04-03 21:02:04
  • java基础语法框架2025-04-03 21:02:04
  • java基础视频谁的好2025-04-03 21:02:04