Java:由字符串组成的 GameRules 复合标签
在 Java 版中,Data → GameRules 为每条规则保存一个 TAG_String,键名与 /gamerule 使用的准确名称相同,值以文本写入:"true"、"false" 或数字。世界从未设置过的规则不会出现,而是采用默认值;以正确名称添加字符串标签,效果与执行命令完全相同。
| 规则 | 值 | 效果 |
keepInventory | "true" | 死亡后保留物品 |
doDaylightCycle | "false" | 冻结昼夜时间 |
doWeatherCycle | "false" | 冻结天气 |
mobGriefing | "false" | 阻止苦力怕和末影人改变方块 |
doMobSpawning | "false" | 停止生物自然生成 |
doFireTick | "false" | 火焰停止蔓延 |
commandBlockOutput | "false" | 关闭命令方块聊天输出 |
randomTickSpeed | "3" | 作物生长和火焰蔓延速度 |
playersSleepingPercentage | "50" | 跳过夜晚所需的玩家比例 |
spawnRadius | "10" | 出生区域的分布范围 |
大小写会影响结果。Java 文件中的 keepinventory 与 keepInventory 不是同一标签,前者会被忽略。
基岩版不会将规则分组。每条规则都是一个 TAG_Byte,位于 level.dat 根标签中,名称使用小写,值为 1 或 0:keepinventory、domobspawning、domobloot、dodaylightcycle、doweathercycle、mobgriefing、firedamage、falldamage、drowningdamage、pvp、showcoordinates、commandblockoutput、sendcommandfeedback、naturalregeneration、tntexplodes、respawnblocksexplode、showdeathmessages、doimmediaterespawn。randomtickspeed 和 functioncommandlimit 等数值规则则使用 TAG_Int。
设置尚不存在的规则时,需要添加正确类型的标签:开关使用 Byte,数值使用 Int。使用错误类型保存的规则会被忽略,或导致世界拒绝加载。
何时编辑文件比执行命令更合适
- 作弊已关闭,而你不希望为了执行一条命令反复开启和关闭作弊。
- 世界无法加载,可以在首次加入前设置
doImmediateRespawn 等规则。
- 正在准备模板世界,该世界将复制到多台服务器,需要把规则直接写入副本。
- 插件修改过规则,你希望查看文件中实际保存的值,而不是命令报告的值。
- 批量修改。对多个世界设置十几条规则时,编辑文件比在聊天中逐条输入更快。
与任何 level.dat 编辑一样,请先停止服务器;运行中的世界会在保存时重写文件并丢弃修改。