Add-On NPC自訂對話框 & dialogue指令用法

NPC是Minecraft基岩版可以自訂對話框的互動實體,必須用指令生怪蛋獲得。一般情況下,玩家可以自訂按鈕,而按鈕按下後可以自訂要執行的指令。

而隨著/dialogue指令的加入,玩家可以操控、修改NPC顯示的對話框,因此能夠整合到Add-On中當作引導角色。如果修改資源包UI的json檔案的話,要做成[像伺服器的介面](https://youtu.be/hBTiALEDUGE)也是有可能的。

用途舉例:如果你的Add-On有很多武器,創造背包又顯得太雜亂,這時讓玩家透過某個物品打開對話框,按按鈕拿東西會比打指令直覺許多。

本文範例會新增一個物品,使用時會執行/dialogue指令,讓隱形的NPC顯示對話框,玩家按下按鈕就能進行傳送,這些都能透過Add-On事先定義好。文章後面可以下載我製作的範本檔案。

這篇文章參考自[Bedrock Wiki](https://wiki.bedrock.dev/entities/npc-dialogs.html)。

## /dailogue指令用法

這個指令用於開啟附近NPC指定的對話框,sceneName下一段落會說明。

```json
/dialogue open npc: target> player: target [sceneName:string]
```

這個指令用於修改附近NPC指定的對話框,但要切換對話框的話用open就好了。

```json
/dialogue change npc: target sceneName:string [player: target]
```

按下的指令可以使用特殊的選擇子"@initiator",這樣能夠確保執行指令的對象都是指向開啟對話框的玩家。

## 建立NPC對話框

NPC對話框的檔案儲存在行為包的dialogue資料夾,這個範本檔案叫做teleport_dialog.json。

```json
{
    "format_version": "1.17",
    "minecraft:npc_dialogue": {
        "scenes": [
            //第一個對話框
            {
                "scene_tag": "menu1",
                "npc_name": "傳送",
                "text": "選擇傳送選項",
                "on_open_commands": [
                    "/say 你好"
                ],
                "on_close_commands": [
                    "/say 再見"
                ],
                "buttons": [
                    {
                        "name": "世界原點",
                        "commands": [
                            "/tp @initiator 0 128 0"
                        ]
                    },
                    {
                        "name": "往上或往下",
                        "commands": [
                            "/dialogue open @e[type=npc,c=1] @initiator menu2"
                        ]
                    }
                ]
            },
            //第二個對話框
            {
                "scene_tag": "menu2",
                "npc_name": "傳送到哪裡?",
                "text": "選擇一個傳送點",
                "on_open_commands": [
                    "/say 你好"
                ],
                "on_close_commands": [
                    "/say 再見"
                ],
                "buttons": [
                    {
                        "name": "返回上一個介面",
                        "commands": [
                            "/dialogue open @e[type=npc,c=1] @initiator menu1"
                        ]
                    },
                    {
                        "name": "往上",
                        "commands": [
                            "/tp @initiator ~ ~+64 ~"
                        ]
                    },
                    {
                        "name": "往下",
                        "commands": [
                            "/tp @initiator ~ ~-64 ~"
                        ]
                    }
                ]
            }
        ]
    }
}
```

"screentag"就是指令會用到的screenname。上面的程式有二個screentag,代表是不同的對話框。
"texts"是顯示的文字。
"npc_name"是NPC的名字,可以改寫成:

```json
"npc_name": {
  "rawtext": [
    {
      "translate": "entity.endermite.name"
    }
  ]
}
```

這樣就能透過texts/的lang檔案來進行翻譯,這個範例會把名字變成終界蟎。
"on_open_command"是打開對話框會執行的指令。
"on_close_command"是關閉對話框會執行的指令。

## 範例:生成隱形的NPC,並讓玩家透過自訂物品開啟介面

### 召喚NPC的指令

functions/setup.mcfunction 用於召喚NPC,會生成一個NPC在世界暗處,僅當作開啟面板的媒介。
如果tickingarea無效,那就只能把NPC改生成在玩家旁邊測試。

```json
tickingarea add 0 1 0 0 2 0
summon npc "§r" 0 1 0
```

### 新增物品

在行為包的/items新增teleport_menu.json

```json
{
    "format_version": "1.16.100",
    "minecraft:item": {
        "description": {
            "identifier": "dialog:teleport_menu",
            "category": "items"
        },
        "components": {
            "minecraft:on_use": {
                "on_use": {
                    "event": "open_menu",
                    "target": "self"
                }
            },
            "minecraft:foil": true,
            "minecraft:icon": {
                "texture": "ender_pearl"
            },
            "minecraft:display_name": {
                "value": "傳送面板"
            }
        },
        "events": {
            "open_menu": {
                "run_command": {
                    "command": [
                        "dialogue open @e[type=npc,c=1] @s menu1"
                    ],
                    "target": "player"
                }
            }
        }
    }
}
```

先輸入/function setup,接著當玩家在**生存模式**右鍵使用這個物品時,對話框就會打開
按下「返回上一個介面」,則會回到第一個對話框。


按[這裡](https://www.mediafire.com/file/3uya2sao2wuof11/%25E8%2587%25AA%25E8%25A8%2582NPC%25E5%25B0%258D%25E8%25A9%25B1%25E6%25A1%2586%25E8%25A1%258C%25E7%2582%25BA%25E5%258C%2585.mcpack/file)下載範本。

留言

此網誌的熱門文章

Minecraft基岩版多人連線教學: 方法一覽

【詳細解說】什麼是Minecraft基岩版,跟Java版有什麼差?

Minecraft基岩版安裝模組(Add-On)&資源包&光影教學