本帖最后由 Dahesor 于 2023-1-1 12:06 编辑

[命令] 命令教程“真”从零开始 (九) 调整苦力怕防爆,防喷/gamerule

声明:
1. 本教程默认所有读者看过本系列之前的内容。作者不对可能冒出来的术语或方言负责。以前帖的链接在最后。
2. 本系列教程默认读者拥有关于Minecraft游戏的基础了解。
3. 本系列全部教程绝对适用于当前Java最新版(1.19)。
4. 本系列教程致力于基础原理而非使用方法,因为某些原因,这是本声明里最重要的一条。

<<<<<< 返回系列目录 ←←

好。

看到今天的标题,熟悉指令的老手就会知道——这将是本教程最 ——像流水账的一期。
我们的内容是游戏规则指令/gamerule。
本命令十分的简单,以及没啥好说的。但考虑到本系列教程面向“零基础学习者”而且还扬言要讲“完整”的教程——
你说我要是忘记说/tell,姑且还能说是“完整的”,但是你要是缺了/gamerule……这个……

……抱歉我骗不了我自己。

好啦好啦,我会尽可能地榨取自己脑中的知识,告诉你一些关于本指令在Wiki上未提出的细节吧。
所以,你绝对会不虚此行。
——写完了我才发现,这好像比以前的内容都长一些啊。




前言

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

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

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


1. 格式


命令 /gamerule 的指令格式很简单,只是简单地填入游戏规则名,再加上要设定的值即可:
  1. /gamerule <规则名> [值]
复制代码

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

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

就以死亡不掉落这条规则举例:
  1. /gamerule keepInventory [true|false]
复制代码

[值|值] ”的含义为,你可以从两个值中选择一个来填写,且本元素是可选的。

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

  1. /gamerule keepInventory true
复制代码
打开死亡不掉落

  1. /gamerule keepInventory false
复制代码
关闭死亡不掉落

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

  1. /gamerule keepInventory
复制代码
查询游戏规则“死亡不掉落”的当前设置。


——以上就是本指令的格式了。

接下来我们要讲的,就是可用的所有游戏规则啦。


2. 游戏规则


注意:

1. 游戏规则指令的格式从未改变,但每到新的版本都会增加新的规则。
在这里仅介绍Java版当前1.19.3拥有的游戏规则。
有关基岩版,Java较旧版本或即将到来的版本的信息,请前往 Wiki此处 察看。



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


• 公告进度完成信息


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

例:

  1. /gamerule announceAdvancements false
复制代码
关闭在玩家完成进度时的公告


• 打开命令方块输出

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

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

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



• 停止检测鞘翅玩家速度

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

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


• 关闭袭击事件

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

例:

  1. /gamerule disableRaids true
复制代码
禁用突袭事件


需要注意:

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


• 日夜循环

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

例:

  1. /gamerule doDaylightCycle false
复制代码
关闭日夜与月相循环

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


• 生物/实体死亡时掉落物品

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

  1. 例:/gamerule doEntityDrops false
复制代码
关闭非生物实体掉落

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

注意,当本规则为false(关)时,取下物品展示框内的物品时,将不会返还该物品。
(好像在一些案例中,物品将根本无法取下,但作者在测试时并未发生此情况。各位帮个忙,请都测试一下然后在下方留个言告诉我结果,感谢。)
你将同样无法回收画。


• 瞬间复活


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

例:
  1. /gamerule doImmediateRespawn true
复制代码
瞬间复活


• 限制合成

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

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


• 生物死亡战利品

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

例:

  1. /gamerule doMobLoot false
复制代码
生物死亡时将不会掉落物品。

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

• 生物自然生成

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

例:

  1. /gamerule doMobSpawning false
复制代码
关闭生物的自然生成。

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


• 灾厄巡逻队生成

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

例:

  1. /gamerule doPatrolSpawning false
复制代码
关闭灾厄巡逻队生成。

等待验证/更新:当上面的"doMobSpawning"为false时,即使"doPatrolSpawning"调整为"true",在此情况下灾厄巡逻队是否生成。(我会在空闲时验证,或谁帮我一下)


• 流浪商人生成

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

例:

  1. /gamerule doTraderSpawning false
复制代码
关闭流浪商人的自然生成。

等待验证/更新:和上面一样的问题:当上面的"doMobSpawning"为false时,即使"doTraderSpawning"调整为"true",在此情况下流浪商人是否生成。(我会在空闲时验证,或谁帮我一下)


• 生成幻翼

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

例:

  1. /gamerule doInsomnia false
复制代码
关闭幻翼的自然生成

等待验证/更新:还是和上面一样的问题:当上面的"doMobSpawning"为false时,即使"doInsomnia"调整为"true",在此情况下幻翼是否生成。(我会在空闲时验证,或谁帮我一下)


• 天气循环

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

例:

  1. /gamerule doWeatherCycle false
复制代码
将天气永久固定为当前的天气。


• 原谅死亡玩家

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

例:

  1. /gamerule forgiveDeadPlayers false
复制代码
让被激怒的中立生物永远追杀玩家。

• 死亡不掉落

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

例:

  1. /gamerule keepInventory true
复制代码
死亡不掉落

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


• 记录管理员命令执行输出

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


• 最大实体推挤

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

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

例:
  1. /gamerule maxEntityCramming 10
复制代码
将最大实体推挤减少到10个。

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

将这个规则的值设置为0可以禁用这条规则:
  1. /gamerule maxEntityCramming 0
复制代码
禁用本规则(就是说堆多少都没事啦!)

• 窒息伤害

游戏规则" drowningDamage "决定了玩家在窒息时是否受到伤害。
接受值:布尔值(true|false)
默认值:true(是,受到伤害)
例:
  1. /gamerule drowningDamage false
复制代码
关闭窒息伤害。


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

• 坠落伤害

游戏规则" fallDamage "决定了玩家是否承受衰落伤害。
接受值:布尔值(true|false)
默认值:true(是的,受到伤害)
例:
  1. /gamerule fallDamage false
复制代码
关闭坠落伤害

注意本规则仅影响玩家。

• 火焰伤害

游戏规则" fallDamage "决定了玩家是否会受到火焰伤害。
接受值:布尔值(true|false)
默认值:true(是的,受到伤害)
例:
  1. /gamerule fallDamage false
复制代码
关闭火焰伤害。

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

• 最大指令连锁

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

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

之所以这么做,是因为,怕太长的连锁占游戏内存——
好吧,实际上是因为怕函数间的无限制互相调用——
函数是啥?
这个以后再说啊,以后再说。
  1. /gamerule maxCommandChainLength 0
复制代码
禁止连锁型指令方块运行,且任何函数只能运行其中的第一条指令

• 生物破坏型行为

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

例:
  1. /gamerule mobGriefing false
复制代码
禁止生物做出破坏型行为。

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

一旦该规则被调整为false,将阻止:
  • 任何生物(非玩家)践踏农作物/捡起物品或装备/踩坏海龟蛋。
  • 烈焰人/恶魂的火球将无法点燃方块或篝火。
  • 苦力怕/末影水晶/凋零/凋零之首/恶魂火焰弹爆炸时破坏方块(注意仍旧有爆炸伤害)
  • 被凋零之首击杀的生物将无法放置凋零玫瑰。这些玫瑰会直接以物品形式掉落。
  • 末影龙无法破坏方块
  • 末影人将无法捡起或放下方块
  • 唤魔者将无法把蓝色的羊变成红的。
  • 劫掠兽将无法破坏方块
  • 蠹虫将无法躲进石头里。
  • 僵尸将无法破坏门
  • 狐狸将无法从甜浆果丛中捡起甜浆果。
  • 兔子将无法啃食胡萝卜。
  • 羊将无法吃草。注意羊毛仍会正常生长。
  • 村民将无法种植农作物。但他们仍可以开关门或扔出物品(捡不回来就是了)。

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

• 生命值自然恢复

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

例:
  1. /gamerule naturalRegeneration false
复制代码
关闭自然恢复

将这个规则设置为false就是UHC的基础规则!(话说我正在做一个UHC的数据包(有啥建议告诉我哈))

• 简洁的F3调试界面

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

例:
  1. /gamerule reducedDebugInfo true
复制代码
启用简单的调试界面。

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

• 随机刻生成速率

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

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

在上一帖中我们讲了区块有关”区段“的内容。
如果你没看,请去看一下——
第8帖

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

例:
  1. /gamerule randomTickSpeed 6
复制代码
将该随机刻生成速率调整为6

注意,将本规则调整为0会禁用随机刻。
  1. /gamerule randomTickSpeed 0
复制代码
禁用随机刻

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


• 火焰蔓延

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

  1. /gamerule doFireTick false
复制代码
关闭火焰的蔓延与熄灭


• 返回指令执行输出

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

例:
  1. /gamerule sendCommandFeedback false
复制代码
关闭输出

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

• 显示死亡信息

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

例:
  1. /gamerule showDeathMessages false
复制代码
不再公布玩家的死亡信息。

注意,若本规则为false。那么队伍指令 /team 中的显示死亡信息选项将不再管用。
见系列 第4帖

还有一件有趣的事情,如果本规则为false,且打开了瞬间复活与死亡不掉落,那么直接用/kill玩家可能都不知道自己死了。

• 出生范围

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

例:
  1. /gamerule spawnRadius 0
复制代码
将该范围缩减至一个点

注意,这是面对世界出生点的规则,与个人重生点无关
另见: Wiki页面
系列 第7帖:命令/setworldspawn

• 旁观者加载区块

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

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

例:
  1. /gamerule spectatorsGenerateChunks false
复制代码
禁止旁观模式玩家加载区块

• 全局愤怒

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

例:
  1. /gamerule universalAnger true
复制代码
现在,被激怒的中立生物将到处乱杀!

学着Wiki,我也要来一句:
该规则在关闭了原谅死亡玩家时有更好的效果。

——MCWiki
• 冰冻伤害

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

例:

  1. /gamerule freezedamage false
复制代码

关闭冰冻伤害


• 设置跳过夜晚所需的入睡玩家所占百分比

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

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

例:

  1. /gamerule playersSleepingPercentage 101
复制代码

玩家将无法跳过夜晚

• 监守者生成

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

例:

  1. /gamerule doWardenSpawning false
复制代码

不让它生成
• 爆炸时凋落物销毁

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

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

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

例:

  1. /gamerule mobExplosionDropDecay false
复制代码

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

• 下雪堆积层数

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

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

例:
  1. /gamerule snowAccumulationHeight 0
复制代码
关闭积雪

• 生成 流体方块

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

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

例:

  1. /gamerule lavaSourceConversion true
复制代码
让无限演讲成为可能


• 全局音效

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

有些音效所有玩家都听得见,比如召唤凋零的声音,大概。

例:
  1. /gamerule globalSoundEvents false
复制代码
禁用全局音效




这就是Java1.19.3的所有游戏规则。


以上就是今天的全部内容。
写这一帖的时候遇到了一件有趣的事情。
有一个游戏规则” functionCommandLimit “出现在了中文Wiki,但是在英文wiki上却从未出现!
最后证实该规则的确存在于基岩版。
中文Wiki的一位管理员跟我说,他发现英文Wiki的质量正在逐年下滑——各位,你觉得有么?反正我除非必要是很少去逛英文Wiki的啦。

好啦,就这些啦!
以上。

#更新日志
Java 1.16.5/a 页面发布
Java 1.16.5/b 修正了错误的版本信息。
Java 1.16.5/c 撤销了名称问题。
Java 1.16.5/d 更改了名字
Java 1.17/a 1.17版本升级完成,增加了两条游戏规则
Java 1.18/a 1.18版本升级完成

Java 1.19.3/a 1.19版本升级完成,增加了6条游戏规则

上一篇: [命令] 命令教程“真”从零开始 (八) 区块与强制加载命令/forceload [1.16]

索引:系列《命令教程“真”从零开始》

下一篇: [命令] 命令教程“真”从零开始 (十) 简单,又新手(雾)的方块指令/setblock [1.16]