文章目錄

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 的主控台拒絕舊名稱,舊世界升級後原本的規則設定也都保留下來。