专栏/MC命令教程“真”从零开始 (九) /gamerule与游戏规则全解

MC命令教程“真”从零开始 (九) /gamerule与游戏规则全解

2024年06月03日 14:51--浏览 · --点赞 · --评论
粉丝:557文章:16

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

本文某种程度上是一个白话版的Wiki

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

教程声明:

  1. 系列教程默认读者是按照顺序阅读的

  2. 教程默认读者有对Minecraft的基础了解

  3. 教程主要注重基础原理,实践内容极少

  4. 本篇教程适用于Java 1.20.6,但大部分内容也适用于1.13+

好。
这将是本教程最最最——像流水账的一期。
我们的内容是游戏规则指令/gamerule。
本命令十分的简单没啥好说的。
好啦好啦,我会尽可能地榨取自己脑中的知识,告诉你一些关于本指令在Wiki上未提出的细节吧。
所以,你绝对会不虚此行。


前言

死亡不掉落。
苦力怕防爆。
永昼永夜。

看,多么熟悉的开作弊方式!(熊孩子必备!)
而以上这些不同的功能,我们只用一个指令——
游戏规则指令/gamerule
就可以实现。

指令/gamerule是一条用于控制游戏规则的世界类指令——这意味着该指令更改的是整个地图,而非特定的玩家,维度,或方块。执行者与执行位置也不重要。
今天,就让我们来看看这个简单,又重要的指令。


1. 格式


命令/gamerule的指令格式很简单,只是简单地填入游戏规则名,再加上要设定的值即可:

/gamerule <规则名> [<>]

其中,“<规则名>”需填写一条特定的规则(比如上面说的“死亡不掉落”),而“[<值>]”则是你要更改的值。


不同的规则接受不同的值。有些游戏规则接受的是数字,而大部分则接受布尔值(Boolean)。布尔值这个名字好像吓人,但实际上就是“true”或"false"——“”或“

就以死亡不掉落这条规则举例:

/gamerule keepInventory [true|false]

“[值|值]”的含义为,你可以从两个值中选择一个来填写,且本元素是可选的。这里[true|false]的意思就是要么写true,有么写false,也可以留空。

游戏规则 "keepInventory" 直接翻译过来就是“保留物品栏”的意思,而后面接入的两个值,若填入“true”,即“”,就是打开死亡不掉落,而若填入“false”,即“”,为关掉死亡不掉落,也就是默认值:

/gamerule keepInventory true

打开死亡不掉落

/gamerule keepInventory false

关闭死亡不掉落

你可以注意到上面的元素”true或false“是可选的。如果你不填入,将会查询该命令目前的值:

/gamerule keepInventory

查询游戏规则“死亡不掉落”的当前设置

——以上就是本指令的格式了。
接下来我们要讲的,就是可用的所有游戏规则啦。

2. 游戏规则

注意:

游戏规则指令的格式从未改变,但每到新的版本都会增加新的规则。

在这里仅介绍Java版当前1.20.6拥有的游戏规则。

有关基岩版,Java较旧版本或即将到来的版本的信息,请前往Wiki此处察看。


↓↓↓注意!以下所有的游戏规则区分大小写!↓↓↓


公告进度完成信息

游戏规则”announceAdvancements“决定了玩家完成进度时是否在聊天框中公告。
接受值:布尔值(true|false)
默认值:"true"(公布进度完成信息)

例:

/gamerule announceAdvancements false

关闭在玩家完成进度时的公告


打开命令方块输出

游戏规则”commandBlockOutput“决定了命令方块在执行命令之后是否在聊天信息中显示指令运行结果。
接受值:布尔值(true|false)
默认值:true(是,显示指令输出)

这是游戏规则指令中较为常用的一条规则了。

这一条规则我们早在第一帖提到循环型命令方块的时候就已经说到过了。若该游戏规则是默认的“true”,那么你地图上的一切命令方块的“小动作”都会暴露在玩家面前(现在用数据包不会了)……更不用说如果你使用了循环型的命令方块,聊天区就直接被刷屏了……所以推荐关上:

/gamerule commandBlockOutput false

停止检测鞘翅玩家速度

游戏规则”disableElytraMovementCheck“决定了游戏是否在多人游戏时检测玩家有没有在使用鞘翅以过快的速度飞行,并将这类玩家踢出。
接受值:布尔值(true|false)
默认值:false(持续检测速度)

还记得我们上一帖说的区块么?
现在,生存模式的玩家在使用鞘翅+烟花或三叉戟时,会达到一个惊人的速度——最大可以到540方块/秒。如此快的速度导致在一秒内大量的区块被加载
——在单人游戏中只要你电脑配置够好不成问题,但这玩意对于服务器来说负担还是太大了,因此才有了本游戏规则——将速度过快的玩家直接踢出去!


关闭袭击事件

游戏规则"disableRaids"决定了游戏会不会触发袭击事件。
接受值:布尔值(true|false)
默认值:false(突袭正常进行)

/gamerule disableRaids true

禁用突袭事件

需要注意:
当该规则被调整为"true"时,玩家进入村庄将不会消除他身上的灾厄之兆效果。
若在一场袭击进行中禁用突袭,突袭将会停止——但已经生成的怪物不会消失。


日夜循环

游戏规则"doDaylightCycle"决定了游戏是否拥有正常的时间循环与月相循环。
接受值:布尔值(true|false)
默认值:true(正常循环)

/gamerule doDaylightCycle false

关闭日夜与月相循环

当本规则调整至“true”时,时间与月相将永远保持在该时间上。
另见系列第3篇,指令/time


非生物实体死亡时掉落物品

游戏规则"doEntityDrops"决定了非生物实体在死亡时是否会掉落物品。
接受值:布尔值(true|false)
默认值:true(是的,掉落)

例:

/gamerule doEntityDrops false

关闭非生物实体掉落

注意,这是指“非生物实体”(比如画,船等)。生物的掉落有下面讲的另一条规则控制。

注意,当本规则为false(关)时,取下物品展示框内的物品时,将不会返还该物品。
(好像在一些案例中,物品将根本无法取下,但作者在测试时并未发生此情况)
你将同样无法回收画。


瞬间复活

游戏规则"doImmediateRespawn"决定了游戏是否跳过死亡界面而直接复活。
接受值:布尔值(true|false)
默认值:false(不跳过,正常显示死亡界面)

例:

/gamerule doImmediateRespawn true

瞬间复活
这条规则在制作地图时非常常用。因为卡在复活界面的玩家十分难以使用命令操作或检测


限制合成

游戏规则"doLimitedCrafting"决定了玩家是否需要获得了配方才能合成/炼制/锻造特定物品。
接受值:布尔值(true|false)
默认值:false(不需要获得配方)

配方?
嗯。这是个以后要讲的东西。
不过在制作RPG或小游戏地图时,如果你不想要玩家随意合成物品,可以简单地将本规则调整为true再使用指令/recipe剥夺所有配方。


生物死亡战利品

游戏规则"doMobLoot"决定了生物在死亡时是否掉落战利品。
接受值:布尔值(true|false)
默认值:true(是,掉落)

例:

/gamerule doMobLoot false

生物死亡时将不会掉落物品

注意,请将本规则与上面的"doEntityDrops"区分。
注意,本规则不影响玩家死亡的掉落(尽管玩家也是生物)


生物自然生成

游戏规则"doMobSpawning"决定了生物是否自然生成。
接受值:布尔值(true|false)
默认值:true(是的,自然生成)

例:

/gamerule doMobSpawning false

关闭生物的自然生成

注意,这只影响自然生成,由刷怪笼,生怪蛋,事件(如袭击)与结构(比如林地府邸)生成的怪物将仍旧出现。


灾厄巡逻队生成

游戏规则"doPatrolSpawning"决定了灾厄巡逻队是否生成。
接受值:布尔值(true|false)
默认值:true(是,生成)

例:

/gamerule doPatrolSpawning false

关闭灾厄巡逻队生成


流浪商人生成

游戏规则"doTraderSpawning"决定了流浪商人是否自然生成。
接受值:布尔值(true|false)
默认值:true(是,生成)

例:

/gamerule doTraderSpawning false

关闭流浪商人的自然生成


生成幻翼

游戏规则"doInsomnia"决定了游戏是否自然生成幻翼。
接受值:布尔值(true|false)
默认值:true(是,生成)

例:

/gamerule doInsomnia false

关闭幻翼的自然生成


天气循环

游戏规则"doWeatherCycle"决定了天气是否正常循环
接受值:布尔值(true|false)
默认值:true(正常循环)

例:

/gamerule doWeatherCycle false

将天气永久固定为当前的天气


藤曼是否蔓延

游戏规则"doVinesSpread"决定了藤曼是否会蔓延至周围的方块
接受值:布尔值(true|false)
默认值:true(是的,蔓延)

例:

/gamerule doVinesSpread false

关闭藤曼蔓延


末影珍珠在玩家死亡时消失


游戏规则"enderPearlsVanishOnDeath"决定了末影珍珠是否在扔出它的玩家死亡时消失。

接受值:布尔值(true|false)
默认值:true(是的,消失)

例:

/gamerule enderPearlsVanishOnDeath false

末影珍珠一直保留


原谅死亡玩家

游戏规则"forgiveDeadPlayers"决定了被激怒的中立生物是否会在玩家死亡后恢复中立状态。
接受值:布尔值(true|false)
默认值:true(是的,恢复中立)

例:

/gamerule forgiveDeadPlayers false

让被激怒的中立生物在玩家死过后仍然敌对


死亡不掉落

游戏规则"keepInventory"决定了玩家在死亡时是否保留他的物品栏
接受值:布尔值(true|false)
默认值:false(不保留)

例:

/gamerule keepInventory true

死亡不掉落

注意,除了物品栏外,经验值也会保留。
但是饥饿值与状态效果会被清除/回满。

在日志记录管理员命令执行输出

游戏规则"logAdminCommands"决定了游戏是否把管理员执行的命令记录到服务器日志中。
接受值:布尔值(true|false)
默认值:true(是的,记录)
例:

/gamerule logAdminCommands false

使游戏不再记录管理员执行命令时的输出


最大实体堆挤

游戏规则"maxEntityCramming"决定了在同一空间中,实体可以堆叠的最大数量。超过这个数字时,所有实体都会受到每秒6点伤害。
接受值:整型(一个整数)
默认值:24

嗯。本规则是什么意思呢?
简单来讲,就是说,假设有一格的狭窄空间,如果这个空间里堆挤了太多生物,那么所有生物都会受到每秒6点的窒息伤害。
而本规则就决定了这个最大的数字。

/gamerule maxEntityCramming 10

将最大实体推挤减少到10个

这条规则影响非旁观者模式的玩家蝙蝠外的任何其他生物,以及矿车。创造模式的玩家一样被计入,但他们不会受到伤害。
记得dream有一期用了24个矿车挤死了一名猎人,用的就是这个规则。

将这个规则的值设置为0可以禁用这条规则:

/gamerule maxEntityCramming 0

禁用本规则(就是说堆多少都没事啦!)


窒息伤害

游戏规则"drowningDamage"决定了玩家在窒息时是否受到伤害。
接受值:布尔值(true|false)
默认值:true(是,受到伤害)
例:

/gamerule drowningDamage false

关闭窒息伤害

需要注意的是,这里的“窒息伤害”指的是在水中氧气条消耗殆尽时的伤害。卡在墙里,被沙子埋住的伤害,与上面最大堆叠规则造成的伤害无法被此指令避免。


坠落伤害

游戏规则"fallDamage"决定了玩家是否承受衰落伤害。
接受值:布尔值(true|false)
默认值:true(是的,受到伤害)
例:

/gamerule fallDamage false

关闭坠落伤害
注意本规则仅影响玩家


火焰伤害

游戏规则"fallDamage"决定了玩家是否会受到火焰伤害。
接受值:布尔值(true|false)
默认值:true(是的,受到伤害)
例:

/gamerule fallDamage false

关闭火焰伤害

这里的火焰伤害包含了火焰,岩浆,岩浆块,火球等。就是那些抗火药水可以防御的。


冰冻伤害

游戏规则"freezedamage"决定了玩家是否承受细雪的冰冻伤害。
接受值:布尔值(true|false)
默认值:true(承受)

例:

/gamerule freezedamage false

关闭冰冻伤害



最大指令连锁

游戏规则"maxCommandChainLength"决定了连锁型命令方块函数最大可以连锁的指令数目。
接受值:整型(一个整数)
默认值:65536(最多连锁65536次)

还记得第一帖讲的连锁型指令方块么?
这种方块的连锁并不是无上限的,而是最多可以连锁由本规则规定的次数。

之所以这么做,是因为,怕太长的连锁占游戏内存——
好吧,实际上是因为怕函数间的无限制互相调用——
函数是啥?
这个以后再说啊,以后再说。

/gamerule maxCommandChainLength 0

禁止连锁型指令方块运行,且任何函数只能运行其中的第一条指令

/gamerule maxCommandChainLength 999999

将这个上限设置为999999


最大命令分支

游戏规则"maxCommandForkCount"还是比较复杂的,这涉及到了/execute相关内容,这里就不详细说了。

例如:如有5个实体,执行/execute as @e命令会创建5个命令执行上下文,而/execute as @e at @e则会创建25个(5×5)。

接受值:整型(一个整数)
默认值:65536(65536个上下文)


生物破坏类行为

游戏规则"mobGriefing"决定了怪物可否做出“破坏型行为”。
接受值:布尔值(true|false)
默认值:true(可以)

例:

/gamerule mobGriefing false

禁止生物做出破坏型行为

这实际上就是我们熟知的苦力怕防爆。
但除了可以防爆外,本规则还有很多其他的内容:

一旦该规则被调整为false:

  • 任何生物(非玩家)将无法践踏农作物/捡起物品或装备/踩坏海龟蛋

  • 悦灵将无法捡拾物品

  • 烈焰人/恶魂的火球将无法点燃方块或篝火

  • 苦力怕/末影水晶/凋零/凋零之首/恶魂火焰弹爆炸时无法破坏方块(注意仍旧有爆炸伤害)

  • 被凋零之首击杀的生物将无法放置凋零玫瑰。这些玫瑰会直接以物品形式掉落

  • 末影龙无法破坏方块

  • 末影人将无法捡起或放下方块

  • 唤魔者将无法把蓝色的羊变成红的

  • 劫掠兽将无法破坏方块

  • 蠹虫将无法躲进石头里

  • 僵尸将无法破坏门

  • 狐狸将无法从甜浆果丛中捡起甜浆果

  • 兔子将无法啃食胡萝卜

  • 羊将无法吃草。注意羊毛仍会正常生长

  • 雪傀儡无法在脚下生成雪

  • 村民将无法种植农作物。但他们仍可以开关门或扔出物品(捡不回来就是了)

  • 猪灵将无法捡拾物品,然而你仍可以直接使用金锭对它们右键

虽然旋风人的风弹可以影响一些方块,但是本规则对其没有影响

注意,本规则对玩家没有任何影响

生命值自然恢复

游戏规则"naturalRegeneration"决定了生命值是否会在玩家拥有足够的饥饿值时恢复生命值。
接受值:布尔值(true|false)
默认值:true(正常恢复)

例:

/gamerule naturalRegeneration false

关闭自然恢复
将这个规则设置为false就是UHC的基础规则!



下界传送门延迟


游戏规则"playersNetherPortalCreativeDelay"决定了创造模式的玩家站在下界传送门中多长时间会被传送走。

游戏规则"playersNetherPortalDefaultDelay"决定了其他模式的玩家站在下界传送门中多长时间会被传送走。

接受值:整型(一个整数)

默认值:

playersNetherPortalCreativeDelay:0(创造模式瞬间传送)

playersNetherPortalDefaultDelay:80(其他模式80游戏刻,4秒)

注意该规则的单位是游戏刻,每20刻是1秒

例:

/gamerule playersNetherPortalCreativeDelay 100

创造模式的玩家站在下界传送门中100刻(5秒)才会被传送走


弹射物破坏方块

游戏规则"projectilesCanBreakBlocks"决定了弹射物(比如箭和雪球)是否可以破坏方块(比如陶罐)
接受值:布尔值(true|false)
默认值:true(可以)

/gamerule projectilesCanBreakBlocks false

阻止弹射物破坏任何方块



简洁的F3调试界面

游戏规则"reducedDebugInfo"决定了是否使用简洁的调试界面(F3)
接受值:布尔值(true|false)
默认值:false(正常显示调试界面)

例:

/gamerule reducedDebugInfo true

启用简单的调试界面

注意,当本规则被设置为true时,将不会显示坐标。所以如果你不想让你的玩家得知自己的坐标——就调整为false吧。
其次,当本规则被设置为true时,F3+B(显示实体碰撞箱)与上一帖提过的F3+G,显示区块边界也不会有用。


随机刻生成速率

游戏规则"randomTickSpeed"决定了随机刻(Random Ticks)的生成速度。
接受值:整型(一个整数)
默认值:3(每4096格方块每区块刻3次)

诶,我们有个新东西了:随机刻
这是什么动西呢?
这是MC的一个机制,它决定了包括“农作物生长”,"火焰蔓延"等方块的随机事件。
本规则决定的是这个随机的”机率“,

在上一篇中我们讲了区块有关”区段“的内容。
如果你没看,请去看一下——
第8篇:区块与/forceload
那么,随机刻就是,每一刻,在每一个区段4096个方块中,随机抽选由本规则数字的方块数,给予随机抽中的方块一次“随机刻更新更新”。
如果这个被抽到的方块是普通方块,比如说石头,那么什么都不会发生。
但如果是类似农作物——那么该方块就会更改。
在农作物的例子中,它会长高一格。(如果还没成熟的话)
你可以在Wiki这里寻找更多信息,以及受随机刻影响的方块列表。

例:

/gamerule randomTickSpeed 6

将该随机刻生成速率调整为6

将本规则调整为0会禁用随机刻:

/gamerule randomTickSpeed 0

禁用随机刻

由于一个区段最多有4069个方块,所以将该规则调整为更高的数字并不知道会发生什么。
一个足够大的数字会使游戏崩溃


出生点区块大小

游戏规则"spawnChunkRadius"决定了出生点区块的大小。

出生点区块是以世界出生点区块为中心的一些区块。这些区块会被一直加载(见系列第8篇

接受值:整型(一个整数,必须为0~32)

默认值:2(大小3*3)


火焰蔓延

游戏规则"doFireTick"决定了火焰是否会蔓延,烧毁特定方块(如木头),与熄灭(其实是,随机刻会不会影响火焰)。
接受值:布尔值(true|false)
默认值:true(火焰正常运行)

/gamerule doFireTick false

关闭火焰的蔓延与熄灭


返回指令执行输出

游戏规则"sendCommandFeedback"决定了玩家在聊天框中执行命令时是否会获得输出。
接受值:布尔值(true|false)
默认值:true(是的,输出)

例:

/gamerule sendCommandFeedback false

关闭输出

这和命令方块的输出规则是差不多的,只不过这一项管理的是聊天框中执行的命令



指令方块更改上限

游戏规则"commandModificationBlockLimit"决定了命令/fill,/clone与/fillbiome一次性可以更改的最大方块数量。

这两个命令在该系列第15与16篇细说

接受值:整型(一个整数)

默认值:32768(等于32的三次方)


显示死亡信息

游戏规则"showDeathMessages"决定了当玩家死亡时是否在在聊天框中公告
接受值:布尔值(true|false)
默认值:true(公布)

例:

/gamerule showDeathMessages false

不再公布玩家的死亡信息

注意,若本规则为false。那么队伍指令/team中的显示死亡信息选项将不再管用。
更多见系列第4篇
还有一件有趣的事情,如果本规则为false,且打开了瞬间复活与死亡不掉落,那么直接用/kill玩家可能都不知道自己死了。


出生点范围

游戏规则"spawnRadius"决定了玩家出生在世界出生点时的最大分散范围的半径。
接受值:整型(一个整数)
默认值:10(半径10格)

例:

/gamerule spawnRadius 0

将该范围缩减至一个点

注意,这是面对世界出生点的规则,与个人重生点无关。

无论设置为多少,冒险模式的玩家都总会精确地在中心复活
另见:Wiki关于世界出生点的页面
系列第7篇:命令/setworldspawn


旁观者加载区块

游戏规则"spectatorsGenerateChunks"决定了旁观模式的玩家能否加载区块。
接受值:布尔值(true|false)
默认值:true(允许加载)

嗯。旁观者模式的玩家是可以飞的很快的,所以如果任其乱飞。不仅会占用游戏资源,还有可能飞飞飞就飞到你地图的指令区了。
所以——关不关闭看你
另见本系列第8篇:区块

例:

/gamerule spectatorsGenerateChunks false

禁止旁观模式玩家加载区块


全局愤怒

游戏规则"universalAnger"决定了当中立生物被激怒时,是只攻击激怒它的玩家,还是攻击所有玩家。
接受值:布尔值(true|false)
默认值:false(只攻击激怒它的玩家)

例:

/gamerule universalAnger true

被激怒的中立生物将敌对所有玩家

该规则在关闭了原谅死亡玩家时有更好的效果

——MCWiki


跳过夜晚所需的入睡玩家百分比

游戏规则"playersSleepingPercentage"决定了有多少百分比的玩家入睡才会跳过夜晚
接受值:数字
默认值:100(所有玩家入睡才会跳过夜晚)

在服务器里你有没有从来无法跳过夜晚的经历?没关系,本命令帮你解决!
本规则可以决定,有多少百分比的玩家入睡才会跳过夜晚。
如果设为0,只要有1名玩家躺到床上就会跳过夜晚。
如果设为100,必须所有玩家都躺在床上才会跳过夜晚。
如果设为大于100,那么夜晚将无法跳过。

例:

/gamerule playersSleepingPercentage 101

玩家将无法跳过夜晚


监守者生成

游戏规则"doWardenSpawning"决定了监守者是否可以自然生成。
接受值:布尔值(true|false)
默认值:true(是)

例:

/gamerule doWardenSpawning false

不让它生成



爆炸时掉落物销毁

游戏中当发生可以破坏方块的爆炸时,这些遭到破坏的方块不是全部都能掉落为物品。一般地说,里爆炸中心越近就越容易被“完全销毁”,即不掉落物品。例外是TNT,它的爆炸总是使全部物品掉落。

游戏规则"blockExplosionDropDecay"决定了由非TNT的方块爆炸炸毁的方块是否会有概率不掉落。
游戏规则"mobExplosionDropDecay"决定了由生物爆炸炸毁的方块是否会有概率不掉落。
游戏规则"tntExplosionDropDecay"决定了由TNT炸毁的方块是否会有概率不掉落。

接受值:布尔值(true|false)
默认值:TNT为false(永远掉落),其他两项为true(可能不掉落)

例:

/gamerule mobExplosionDropDecay false

使生物爆炸时总是掉落全部方块(比如苦力怕)



下雪堆积层数

游戏规则"snowAccumulationHeight"决定了下雪时可在一格方块空间内堆积的雪的最高层数。
接受值:数字
默认值:1

设置为0会关闭积雪
设置为8或以上效果等同,均会使雪堆到一整格高

例:

/gamerule snowAccumulationHeight 0

关闭积雪


生成流体方块

我们都知道可以做无限水,但不可以无限熔岩。下面的两个规则决定了流体在交汇时是否形成新的源流体方块。

游戏规则"waterSourceConversion"决定了水流能否形成新的水源。
游戏规则"lavaSourceConversion"决定了熔岩流能否形成新的熔岩源。
接受值:布尔值(true|false)
默认值:水:true(可以)熔岩:false(不行)

例:

/gamerule lavaSourceConversion true

让无限熔岩成为可能


全局音效

游戏规则"globalSoundEvents"决定了玩家是否能听到可无视距离播放给全部玩家的特定游戏事件音效,比如召唤凋零的声音。
接受值:布尔值(true|false)
默认值:true(是)

例:

/gamerule globalSoundEvents false

禁用全局音效



这就是Java1.20.6的所有游戏规则。
以上

投诉或建议