本帖最后由 Mirence 于 2024-6-14 20:23 编辑
指令基础教程 第二讲 改变世界状态 本讲教程涉及指令:/time, /alwaysday, /daylock, /whether, /toggledownfall
从现在起麦仁丝将开始单个指令的教程,首先学习的是如何用指令来改变世界状态,包括时间与天气。我们的游戏依赖于玩家所在的世界,所以我们本讲首先学习有关控制世界的指令。
一、世界时间与日期 昼夜更替使得游戏有了时间概念,0.10版本也为创造模式加入了昼夜更替。游戏中的白天和黑夜各持续10分钟。时间不断地流逝,而我们可以通过指令来控制时间。但在这之前,麦仁丝先为大家详细介绍一下游戏中的时间概念。
月相变化 1.主观时间与客观时间 时间在游戏中有两种含义:一种是主观上的时间,即体现在日月东升西落、昼夜更替、月相变化等上的时间;另一种是客观上的时间,即体现在庄稼生长、天气更替、熔炉冶炼、药水酿造等上的时间,与现实世界时间相关联。我们用指令控制的都是主观上的时间,而没有办法控制客观上的时间。 2.游戏刻 ★ 一般的游戏中大程序循环的一个周期称为“游戏刻(tick)”,简称“刻(t)”, “刻”是时间单位,且其数值只能为整型,“刻”也是我的世界中的时间单位。游戏刻与现实世界时间单位的换算关系为: 1秒=20刻。 游戏中命令方块执行延迟时间的单位也是“刻”。 3.我的世界中的时间概念 ★ ①世界日时间:即一天当中的时间,单位为“刻”,当“昼夜更替”开启时,世界日时间以20刻每秒的速度流逝(增加),以日出前为0刻,一天一共有24000刻,其意义相当于现实世界一天当中的几点几分。 一般世界日时间为正整数,不过当世界日期为负整数时,世界日时间也为负整数,所以世界时间的数值范围在区间[0, 23999]之间或[-23999, 0]之间。 ②世界日期:世界是有日期的,单位为“天”,刚创建世界时,世界日时间为0刻,日期为0天。当世界日时间超出上限时,便会调整到下限,且世界日期加1;低于下限同理。 一般世界日期为正整数,但可以通过指令让时间倒退使得日期为负整数。 世界日期有“两个0天”,就是说,0天0刻以后的一天属于0天,而且0天0刻以前的一天也属于0天,这样一来,0天实际上总共占了2天时间,也就是48000刻的时间。这一特点类似于现实生活中公元纪年的公元元年和公元前一年。除了0天以外,其他天数只占24000刻的时间。 世界日期的数值范围在区间[-89478, 89478]之间。
③世界总时间:游戏中所说的时间一般就为世界总时间,世界日时间与世界日期是由世界总时间换算而来的,单位为“刻”,从0天0刻开始计算,其数值范围在区间[-2^31,2^31-1]内(“a^b”表示a的b次方),所以世界日期的范围也是通过世界总时间的范围计算得到的。 计算公式:世界总时间(t)=世界日时间(t)+世界日期(d)×24000 例如:世界日时间为5000刻,世界日期为3天,则此时的世界总时间为5000刻+3天×24000刻/天=77000刻。
我们可以认为指令所控制的时间都是世界总时间。 ④单位换算:1秒(s)=20刻(t),1天(d)=20分钟(min)=24000刻(t) ⑤游戏总时间:游戏中还会记录游戏总时间,也就是游戏运行的总时间,单位同样为“刻”。可以用指令“/time query gametime”来查询游戏运行总时间。游戏总时间是客观上的时间,反映玩家游玩一个地图的时长,是没法通过指令修改的。至于若游戏总时间超过2^31-1刻会发生什么,麦仁丝自己也不知道,毕竟这相当于3年5个月。
下图简单地展现了世界时间、世界日期与世界总时间的关系:
【麦仁丝课堂】世界时间与日期
二、控制世界时间——/time指令 ★
明白了游戏中的一些时间概念后,便可以畅通无阻地学习指令了。/time指令是常用的控制时间的指令,其作用是控制和查询时间,其语法结构如下图:
【麦仁丝课堂】/time指令语法树状图
我们可以看出,/time指令的核心部分后有三个分支:add(调整)、set(设定)与query(查询),以下为/time指令的详细用法: 1. /time add 时间值 ——快进(倒退)时间
/time add指令后只能跟时间值,表示将世界总时间向前或向后调整一定时间,即快进或倒退。 其中:
时间值用游戏刻表示,即快进(倒退)的时间,正数表示快进,负数表示倒退, 范围在区间[-2^31,2^31-1]内,也就是在-2147483648~2147483647之间(包括两端),且为整型。
如指令“/time add 2024”指将世界的时间快进2024刻,命令执行成功后,对命令实施者的反馈消息为:将时间调快了 2024。 世界总时间的范围限制:
Ⅰ.当利用指令使得世界总时间超出2^31-1刻(相当于89478天11647刻)时,世界总时间会调整为-2^31刻,也就是-89478天-11648刻。
Ⅱ.当利用指令使得世界总时间小于-2^31刻(相当于-89478天-11648刻)时,世界总时间会调整为2^31-1刻,也就是89478天的11647刻。
可以看出用指令使世界总时间超出上下限时,世界总时间会以头尾相接的方式调整。不过,世界日时间的-11648刻的太阳位置与12352刻的相同,而与11647刻的不同,所以用指令使世界总时间穿过上下限时,太阳位置会发生跳动。
Ⅲ.当世界总时间时间自然流逝超出2^31-1时,世界总时间会调整为11647刻,也就是0天11647刻。世界日时间不改变,所以此时太阳位置理论上不会发生跳动。但实际上太阳可能仍然会发生和上述一样的跳动,但几秒钟之内又会跳回正常位置,效果如下:太阳“”鬼畜”
(可以理解为是太阳误以为当前世界日时间变为-11647刻,还没有反应过来。) 2. /time set——设定时间
/time set后可以跟时间值或一些时间点,表示将世界日时间和日期设定为指定时间。 ①“/time set 时间值” 表示将世界总时间精确调整至指定时间。 其中:
时间值用游戏刻表示,范围在区间[-2^31,2^31-1]内,也就是在-2147483648~2147483647之间(包括两端),且为整型。
如指令“/time set 20230127”指将世界总时间设定为20230127刻,相当于84天22127刻,命令执行成功后,对命令实施者的反馈消息为:将时间设为20230127。 ②“/time set 时间点”表示将世界总时间调整到指定时间点。 其中: 这里的时间点有五种,时间点可以用sunrise、day、noon、sunset、night、midnight表示,各时间点中文意思及其世界日时间如下表:
时间点 | 中文意思 | 对应世界日时间 | sunrise | 日出 | 23000 | day | 白日 | 1000 | noon | 中午 | 6000 | sunset | 日落 | 12000 | night | 傍晚 | 13000 | midnight | 午夜 | 18000 | 命令执行后会将世界日时间调整至指定时间点所对应的时间,而且总是将世界总时间快进以达到相应的时间。
如指令“/time set day”指将世界日时间调整为1000刻,命令执行成功后,对命令实施者的反馈消息为:将时间设为xxx(相应世界总时间)。
拥有操作员权限的玩家也可以通过聊天框中的快捷命令来便捷地将世界日时间调整至相应时间点。但是若游戏开启了“终为白日”,则不能够通过快捷命令来调整时间,但仍然可以手动输入/time指令。 3. /time query 时间类型——查询时间
/time query指令的作用是查询时间,包括世界日时间、世界日期和游戏总时间。 其中: 时间类型可以用daytime(世界时间)、day(世界日期)、gametime(游戏总时间)表示,/time query指令的三种用法及其作用如下表:
指令内容 | 中文意思 | 对命令实施者的反馈 | /time query daytime
| 查询世界日时间 | 白天为xxx(当前世界日时间) | /time query day
| 查询世界日期 | 日期为xxx(当前世界日期) | /time query gametime
| 查询游戏总时间 | 游戏时间为xxx(当前游戏总时间) | 对于指令“/time query daytime”的反馈,也许是翻译错误的原因,因为“daytime”直译就为“白天”,这里应该是“日时间”的意思才对。
以上就是/time指令的全部用法,接下来还有一个能够控制时间的指令。
三、终为白日与昼夜更替——/daylock指令、/alwaysday指令 ★ /alwaysday指令是/daylock指令的别名,二者完全等价,可以互相代替。二者的作用是开启或关闭终为白日。其唯一语法结构如下图*:
【麦仁丝课堂】/daylock指令和/alwaysday指令 其中: 指令核心部分后跟布尔结构*来表示开启或关闭,布尔结构可省略。 true表示开启终为白日同时关闭昼夜更替,时间流逝停止,若省略布尔结构则默认为true; flase表示关闭终为白日同时开启昼夜更替,时间流逝继续。 该命令执行后没有命令反馈。 当然,拥有操作员权限的玩家也可以在菜单-设置-游戏中手动开启或关闭“终为白日”和“昼夜更替”的开关。不过二者不能同时开启,一次只能够开启其中一个。
终为白日与昼夜交替 *语法结构图:麦仁丝采用平铺或树状图等方法来展现指令的语法结构,语法结构图中,中括号“[]”框住的内容表示该部分以及以后的部分可以省略不写,竖杠“丨”表示“或者”,未被框住的内容是不可省略的。 *布尔结构:在许多涉及设置的指令中都含有布尔结构,语法内容只有true和false两种,一般用来表示开启和关闭,一般来说:true表示开启,false表示关闭,但实际意义还要以指令本身为准。在语法结构图中,用“true|false”表示布尔结构会更形象。
以上就是游戏中全部关于时间的指令,学完了控制时间的指令,那么接下来就是天气了。
四、世界天气天气 在学习控制天气的指令之前,我们先来简单了解一下天气。
天气(whether)最早在0.12版本加入基岩版,天气也是游戏的重要组成部分。
天气一共有三种,分别是晴天(sunny)、雨天(rain)和雷暴(thunder),且天气是同步到整个主世界的。 ①晴天:晴天是游戏中持续时间最长的天气,除了雨天和雷暴就是晴天,晴天不会影响玩家的正常游戏。 ②雨天:包括降雨和降雪,降雪仅在低温的生物群系和高海拔出现,且在雨天时,高温的生物群系在较低海拔处甚至不会降雨。降雨可以扑灭方块和实体上的火焰(下界岩上除外),可对末影人、雪傀儡、烈焰人、炽足兽造成伤害;降雪可以使地面积雪,但不能扑灭实体上的火焰。雨天产生的概率为1/11。
③雷暴:包括雷暴雨和雷暴雪,雨天有很小的概率转变为雷暴天气,雷暴天气期间会频繁随机生成闪电,并引燃击中处,玩家在雷暴期间无论白天夜晚都可以睡觉以跳过雷暴天气。
理论上雷暴天气的概率为1/121,但玩家经常睡觉会更难遇上雷暴天气。(可以理解为下雨和雷暴的概率都为1/11,但是仅当下雨和雷暴同时发生时才会产生雷暴天气,所以雷暴天气的概率为1/11×1/11=1/121。所以晴天时也有可能处在雷暴的概率期间,不过此时不会有雷暴天气。)
要注意的是,天气现象只在主世界发生,下界和末地没有天气现象。
五、控制世界天气——/weather指令 ★ /weather指令的作用是改变和查询世界的天气,也是一个非常简单实用的指令,其语法结构如下图:
【麦仁丝课堂】/weather指令语法树状图 1. “/weather 天气 [持续时间]”表示将世界天气设定为指定(或随机)天气,且可以设置天气持续的时间。 其中:
天气共有三种,包括clear(晴天)、rain(雨天)、thunder(雷暴),表示即将设定的天气。 时间的单位为“刻”,为整型,若范围在[1,1000000]之内,表示该天气持续的时间。时间可以省略,若时间填0,则相当于省略。 时间到后便会转变天气(雨天、雷暴会转变为晴天,晴天一定会转变为雷暴)。 若不省略时间(或填“0”),则将符合自然的天气更替,即在开启“天气更替”时,晴天再转变为雨天或雷暴需要0.5天~7.5天,雨天或雷暴再转变为晴天需要0.5天~1天;若未开启“天气更替”,则天气将永远不会自然更替。 不同指令执行后效果如下表:
指令内容 | 对命令实施者的反馈 | /weather clear [时间]
| 已切换至晴朗天气 | /weather rain [时间]
| 已切换至雨天 | /weather thunder [时间]
| 已切换至雷阵雨 | 玩家可以在菜单-设置-游戏中开启或关闭“天气更替”设置,以控制天气能否自然更替。
要注意的是:只有主世界中才有天气,/weather指令在下界和末地使用时,所在的世界不会发生任何变化。 2.“/weather query”是/weather指令的第二种用法,表示查询天气。
直接输入指令“/weather query”,命令执行后,便会向命令实施者反馈当前的天气,不同天气时执行命令反馈如下表:
| 对命令实施者的反馈
| | 天气状态是:不下雨
| | 天气状态是:下雨
| | 天气状态是:雷阵雨
| | 天气状态是:雷阵雨
| 若现在处在雷暴状态期间,但是没有下雨却是晴天,那么便不会出现雷暴天气,但这时“/weather query”指令的检测结果仍是“雷阵雨”。
以上便是/weather指令的全部用法,但是同样,控制世界天气的指令也不止一种。
六、切换世界天气——/toggledownfall指令 ★ /toggledownfall指令的作用很简单,那就是将晴天变为雨天,将雨天变为晴天,而且它没有语法部分。
【麦仁丝课堂】/togledownfall指令
直接输入指令“/toggledownfall”,命令执行后: ①若此时为晴天,且不在雷暴状态期间,那么天气将会转变为雨天; ②若此时为晴天,且处于雷暴状态期间,那么天气将会转变为雷暴天气; ③若此时为雨天或雷暴天气,那么天气将会转变为晴天。
命令执行后,对命令实施者的反馈消息为:天气已切换。
以上就是所有能够控制世界天气的指令,其实教程到这就可以结束了,不过最后麦仁丝还是想让大家了解一下天气更替的原理,以便大家能够更加了解以上两条指令的工作原理。
七、天气状态计时器
游戏通过天气状态计时器来决定天气的变化,不过在Minecraft Wiki中关于天气状态计时器的资料少之又少,所以以下有部分内容是纯属由麦仁丝推测的,算是对天气的另一种理解方式吧。 1.天气发生原理
在游戏中,雨天和雷暴都有它们各自的状态计时器,当相应计时器结束时,便会进入各自的天气状态:
①雨天状态计时器未结束,则为晴天;
②雨天状态计时器结束,进入雨天状态,雷暴状态计时器未结束,则为雨天;
③雨天和雷暴状态计时器都结束,进入雨天和雷暴状态,则为雷暴天气。
状态计时器计时结束后相应天气状态的持续时间在0.5天~1天之间,天气状态持续时间结束后状态计时器便会被重置,继续计时;重置后计时器时间在0.5天~7.5天之间。
由于总体上两种天气状态所占的时间都相当于计时时间的十分之一,所以说下雨和雷暴的概率都约为1/11。
玩家入睡后能够直接重置*雷暴状态计时器,所以说经常睡觉的玩家是不容易看到雷暴的,若玩家长期不睡觉则会更容易遇上雷暴天气。 *指将状态计时器重新设定为随机的一个值,重新开始倒计时。 2.天气指令的工作原理:
①“/weathe clear [时间]”指令能够同时将雨天状态计时器和雷暴状态计时器重置为指定的时间,于是便能够将天气转变为晴天,由于两个计时器被重置后是同步的,所以本次晴天结束后的天气必定为雷暴天气; ②“/weather rain [时间]”指令能够立即结束雨天状态计时器,并将雷暴状态计时器重置为指定时间,于是就能将晴天和雷暴天气都转变为雨天,所以这次雨天结束后的天气必定为雷暴状态下的晴天;
③“/weather thunder”指令相当于立即同时结束雨天状态计时器和雷暴状态计时器,于是就能将晴天和雨天都转变为雷暴天气; ④“/weather query”指令会优先检测雷暴状态计时器是否结束,若雷暴状态计时器结束,那么检测结果为“雷阵雨”;若雷暴状态计时器未结束,才会再检测雨天状态计时器是否结束,若雨天状态计时器结束,那么检测结果为“下雨”;若雨天状态计时器也未结束,那么检测结果才为“不下雨”。所以会出现晴天也检测出“雷阵雨”的情况;
⑤“/toggledownfall”指令相当于在晴天时立即结束雨天状态计时器,在雨天或雷暴时立即重置雨天和雷暴状态计时器。 总结:/weather指令的工作原理实际上是立即结束相关的天气状态计时器,并且将其他几个不相关的天气状态计时器重置为指定时间。 例如指令“/weather clear 2000”虽然表示将天气设置为持续100秒的晴天,实际上是将雨天状态计时器和雷暴状态计时器设置为了2000刻,二者都没有结束时,为晴天,2000刻后,两个计时器结束,进入雨天状态和雷暴状态,两个状态叠加,形成雷暴天气。 所以通过这些工作原理,我们能够发现:指令“/weather clear 2000”还指2000刻后迎来雷暴天气,指令“/weather rain 1”可以迎来雷暴状态下的晴天。
以上就是今天教程的全部内容,指令总体上都比较简单,更多的是让大家了解了一下时间和天气的概念。如果麦仁丝课堂中有什么不足,或者有出现错误的地方,希望大家能够指出来,麦仁丝也会积极改进!
第二讲 改变世界状态 思维导图:
【麦仁丝课堂】改变世界状态 思维导图
点击前往 麦仁丝课堂 目录
(本期视频版教程尚未发布);
|