Minecraft gamerule 新舊名稱對照:keepInventory 等指令新版改名

摘要

Minecraft Java 版在新版本把幾乎所有遊戲規則都改了名稱,因此防噴、防爆這些舊指令在新版會出現「指令的引數不正確」。只要把指令換成新名稱就能正常執行,舊世界原本的設定也會在升級時自動轉換,基岩版則繼續使用舊名稱,不需要修改。

文章目錄

Minecraft 死亡不噴裝的防噴指令 /gamerule keepInventory true,在 Java 版 1.21.11 以後無法使用,送出後會顯示「指令的引數不正確」。這是因為 Java 版在 1.21.11 把幾乎所有遊戲規則都改了名稱,舊教學與筆記裡的指令因此無法執行。只要把規則換成新名稱,例如防噴改成 /gamerule keep_inventory true,指令就能正常執行。

各版本使用的規則名稱

Java 版的版本號顯示在遊戲主畫面的左下角,伺服器則寫在啟動紀錄的 Starting minecraft server version 這一行。確認版本後,我們依照版本選擇規則名稱:

版本 規則名稱 防噴指令
Java 1.21.10 以前 舊名稱 /gamerule keepInventory true
Java 1.21.11 以後,包括 26.x 小寫加底線的新名稱 /gamerule keep_inventory true
基岩版 舊名稱,不分大小寫 /gamerule keepinventory true

基岩版不接受新名稱,送出後會顯示語法錯誤。如果畫面顯示的是「未知或不完整的指令」,問題就不在規則名稱,這時要先確認世界已開啟作弊或帳號有管理員權限,相關條件列在 Minecraft 常用指令表。

常用規則的新名稱

指令的格式沒有改變,一樣是 /gamerule 規則名稱 設定值,我們只要換掉規則名稱,要恢復預設值時再把 true 和 false 對調:

用途 Java 1.21.10 以前與基岩版 Java 1.21.11 以後
死亡保留背包與經驗(防噴) /gamerule keepInventory true /gamerule keep_inventory true
生物不破壞地形(防爆) /gamerule mobGriefing false /gamerule mob_griefing false
停止日夜交替 /gamerule doDaylightCycle false /gamerule advance_time false
停止天氣變化 /gamerule doWeatherCycle false /gamerule advance_weather false
不生成夜魅 /gamerule doInsomnia false /gamerule spawn_phantoms false
關閉摔落傷害 /gamerule fallDamage false /gamerule fall_damage false

睡眠比例、重生範圍這些其他規則的完整指令,以及切換模式、夜視這類沒有改名的指令,都列在 Minecraft 常用指令表。

設定值相反或改用數字的規則

村莊突襲與火焰蔓延不能只換名稱。舊規則 disableRaids 代表「停用」,新規則 raids 則代表「啟用」,因此 true 和 false 要對調。基岩版沒有突襲規則。

doFireTick 已經被移除,火焰蔓延改由 fire_spread_radius_around_player 控制,設定值是玩家周圍火焰可蔓延的格數,基岩版則繼續使用 dofiretick。依照 Minecraft Wiki 的遊戲規則頁面,預設值是 128,0 代表火焰不蔓延,-1 代表沒有距離限制:

用途 Java 1.21.10 以前 Java 1.21.11 以後
停用村莊突襲 /gamerule disableRaids true /gamerule raids false
恢復村莊突襲 /gamerule disableRaids false /gamerule raids true
關閉火焰蔓延 /gamerule doFireTick false /gamerule fire_spread_radius_around_player 0
恢復火焰蔓延 /gamerule doFireTick true /gamerule fire_spread_radius_around_player 128

舊世界與資料包的處理

舊世界升級到新版本時,原本設定好的規則會自動轉換,我們不用重新輸入指令。原本開啟的防噴會維持開啟,doFireTick false 會變成半徑 0,disableRaids true 也會變成 raids false。

但指令方塊與資料包函式裡寫的舊名稱不會自動轉換,繼續使用時會出現下面的結果:

位置 使用舊名稱時的結果
指令方塊 指令執行失敗,規則維持原本的設定值
資料包的函式 只要有一行使用舊名稱,整個函式就無法載入,伺服器啟動時會記錄 Failed to load function,執行時則顯示 Unknown function

我們要打開指令方塊與資料包的 .mcfunction 檔,搜尋 gamerule,再把規則換成新名稱,設定值相反的規則也要一起對調。

完整名稱對照

遇到上面沒有列出的規則時,可以從舊名稱查到新名稱。表格依舊名稱排序,第一欄是繁體中文語言檔裡的遊戲內名稱,pvp 的名稱沒有改變,因此不列在表中:

遊戲內名稱 Java 1.21.10 以前 Java 1.21.11 以後
允許進入地獄 allowEnteringNetherUsingPortals allow_entering_nether_using_portals
進度通知 announceAdvancements show_advancement_messages
在與方塊互動的爆炸中,部分方塊不會掉落成戰利品 blockExplosionDropDecay block_explosion_drop_decay
記錄指令方塊輸出 commandBlockOutput command_block_output
啟用指令方塊 commandBlocksEnabled command_blocks_work
指令修改方塊數量限制 commandModificationBlockLimit max_block_modifications
啟用鞘翅移動檢測(設定值相反) disableElytraMovementCheck elytra_movement_check
啟用玩家移動檢測(設定值相反) disablePlayerMovementCheck player_movement_check
啟用突襲(設定值相反) disableRaids raids
日夜交替 doDaylightCycle advance_time
掉落實體裝備 doEntityDrops entity_drops
火焰蔓延半徑(設定值改成數字) doFireTick fire_spread_radius_around_player
立即重生 doImmediateRespawn immediate_respawn
生成夜魅 doInsomnia spawn_phantoms
需要配方才能合成 doLimitedCrafting limited_crafting
掉落生物戰利品 doMobLoot mob_drops
生成生物 doMobSpawning spawn_mobs
生成掠奪者巡邏隊 doPatrolSpawning spawn_patrols
掉落方塊 doTileDrops block_drops
生成流浪商人 doTraderSpawning spawn_wandering_traders
藤蔓蔓延 doVinesSpread spread_vines
生成伏守者 doWardenSpawning spawn_wardens
更新天氣 doWeatherCycle advance_weather
造成溺水傷害 drowningDamage drowning_damage
拋出的終界珍珠在死亡時消失 enderPearlsVanishOnDeath ender_pearls_vanish_on_death
造成摔落傷害 fallDamage fall_damage
造成火焰傷害 fireDamage fire_damage
原諒死者 forgiveDeadPlayers forgive_dead_players
造成冰凍傷害 freezeDamage freeze_damage
全域聲音事件 globalSoundEvents global_sound_events
死亡後保留物品欄 keepInventory keep_inventory
流動熔岩轉化成熔岩源 lavaSourceConversion lava_source_conversion
啟用玩家定位條 locatorBar locator_bar
記錄管理員指令 logAdminCommands log_admin_commands
指令連鎖大小限制 maxCommandChainLength max_command_sequence_length
指令的上下文上限 maxCommandForkCount max_command_forks
實體擠壓上限 maxEntityCramming max_entity_cramming
礦車最大速度 minecartMaxSpeed max_minecart_speed
在生物的爆炸中,部分方塊不會掉落成戰利品 mobExplosionDropDecay mob_explosion_drop_decay
允許生物的破壞行為 mobGriefing mob_griefing
自然回血 naturalRegeneration natural_health_regeneration
創造模式玩家使用地獄傳送門的等待時間 playersNetherPortalCreativeDelay players_nether_portal_creative_delay
非創造模式玩家使用地獄傳送門的等待時間 playersNetherPortalDefaultDelay players_nether_portal_default_delay
睡眠比例 playersSleepingPercentage players_sleeping_percentage
投射物是否能破壞方塊 projectilesCanBreakBlocks projectiles_can_break_blocks
隨機刻速率 randomTickSpeed random_tick_speed
簡化除錯資訊 reducedDebugInfo reduced_debug_info
回傳指令回饋 sendCommandFeedback send_command_feedback
顯示死亡訊息 showDeathMessages show_death_messages
積雪厚度 snowAccumulationHeight max_snow_accumulation_height
啟用生怪磚 spawnerBlocksEnabled spawner_blocks_work
生成怪物 spawnMonsters spawn_monsters
重生點半徑 spawnRadius respawn_radius
允許旁觀者生成地形 spectatorsGenerateChunks spectators_generate_chunks
允許 TNT 被點燃並爆炸 tntExplodes tnt_explodes
在 TNT 的爆炸中,部分方塊不會掉落成戰利品 tntExplosionDropDecay tnt_explosion_drop_decay
無差別憤怒 universalAnger universal_anger
流動水轉化成水源 waterSourceConversion water_source_conversion

max_minecart_speed 要開啟礦車的實驗性內容才能使用,一般世界查詢時也會顯示「指令的引數不正確」。

實測紀錄

測試環境是 Java 版 26.3 與基岩版 1.26.61 的伺服器主控台。主控台顯示的是英文訊息 Incorrect argument for command,本文的中文訊息則來自繁體中文語言檔裡對應的文字。

完整名稱對照取自 26.3 伺服器程式裡負責升級世界的 GameRuleRegistryFix,再到主控台逐一查詢。除了 max_minecart_speed 之外,新名稱都能查到目前的設定值,舊名稱則都被拒絕。基岩版的 keepinventory 與 keepInventory 都能使用,keep_inventory 與 raids 則顯示語法錯誤。

舊世界升級的測試使用手動建立的 1.21.10 格式 level.dat,並在裡面設定 10 條規則,交給 26.3 伺服器升級後再查詢,結果都和本文的對應相同。指令方塊的測試用主控台放置方塊並查詢 SuccessCount,舊名稱的結果是 0,新名稱的結果是 1。

總結

舊的 gamerule 指令失敗時,把規則換成新名稱就能執行,指令方塊與資料包裡的舊名稱也要一起修改。實測 Java 26.3 的主控台拒絕舊名稱,舊世界升級後原本的規則設定也都保留下來。

接著可以做什麼

下一篇ComfyUI API 教學:用 Python 批次產圖,無須操作介面AI
Ted Liou

Ted Liou

現役軟體工程師,Unity、AI 技術開發經驗分享與諮詢。