<本站文本内容除另有声明外,转载时均必须注明出处。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。>

致繁體用戶:由於近期 MediaWiki 簡繁轉換表故障頻發,繁體譯名不能正確顯示。繁體譯名一概以遊戲內為准,不便之處敬請諒解。

作为统一社区平台(UCP)计划的一部分,本Wiki将在数周内迁移至新的平台。详情见此

As part of the Unified Community Platform project, your wiki will be migrated to the new platform in the next few weeks. Read more here.

教學/製作行為包

出自Minecraft Wiki
跳到: 導覽搜尋
Information icon.svg
此特性為基岩版獨有。
該文檔的內容可能與實際略有出入。

您可以查看中文玩家社區的優質教學

概述[編輯 | 編輯原始碼]

這篇文章和「資源包教學」有類似之處,當然我們也建議您最好先了解一下如何創建一個資源包,這篇教學可能會忽略一些與資源包的共同點。下面會講解如下內容:

  • 簡述JSON數據格式
  • 如何創建行為包
  • 如何改變怪物行為

如果你看過站內關於pig.json的修改教學,那麼可能會輔助閱讀本篇文章。

所需時間[編輯 | 編輯原始碼]

完成本教學大約需要1個半至2小時。

指引參考[編輯 | 編輯原始碼]

當前正式版(1.16.60):
開發版(beta 1.16.100.58):

教學[編輯 | 編輯原始碼]

所需工具[編輯 | 編輯原始碼]

跟隨下面給出的步驟繼續教學:

文本編輯器[編輯 | 編輯原始碼]

你可以使用任何一種文本編輯器,但我會建議你使用集成開發環境(IDE)。
而在iOS上,用Textcode Viewer則是不錯的選擇,實在不行備忘錄也未嘗不可。如果你的iOS設備已經越獄,也可以嘗試使用iFile或者Filza。
對於Android系統來講,MT管理器將是一個不錯的選擇

檔案管理器[編輯 | 編輯原始碼]

可以使用任何一種檔案管理器。我建議:Windows可以用系統自帶的檔案管理器(但是請你安裝好壓縮和解壓用的軟件,如WinRAR,7z等)。iOS設備上則可以用檔案全能王(英文名FileMaster);Android可以使用ES檔案管理器,最新的ES檔案管理器還具備了代碼糾錯功能,但美中不足的是其編寫代碼系統很不好用,僅推薦作為檔案管理器。推薦使用MT管理器,功能比較齊全。

JSON數據格式[編輯 | 編輯原始碼]

參見:教學/NBT與JSON§JSON的語法

在開始製作行為包之前,我們需要先快速了解一下JSON是怎麼運作的。我們不會去太過於深入JSON技術的一些細節,但是如果你希望了解更多,你可以參閱[1]

JSON裡由兩種不同的數據結構所組成:

  • 鍵值對(對象表示鍵值對)
    • 例如:"name": value
  • 對象陣列
    • 例如:["value1", "value2", ...]

你可以創建一個由鍵值對組成的對象。值也可以是陣列或對象。

對象範例[編輯 | 編輯原始碼]

{
  "minecraft:scale": {
    "value": 0.5
  }
}

上面的對象由一個字符串組成,其中"minecraft:scale"是鍵(該對象的名稱),值是另一個鍵值對("value": 0.5)。

帶列表的對象範例[編輯 | 編輯原始碼]

{
  "minecraft:health": {
    "value": 10,
    "max": 20
  }
}

帶陣列的對象範例[編輯 | 編輯原始碼]

{
  "minecraft: type_family": {
    "family": [
      "monster",
      "undead"
    ]
  }
}
注意

鍵與值之間總是使用冒號分開,值之間則使用逗號分開。另外,每一個左花括號{必須用右花括號關閉},即不允許只出現一個左花括號但是沒有右花括號的情況;方括號[]、雙引號""同理。這一點非常重要!請務必記住。如果上述符號沒有封閉,將可能造成錯誤的結果,讓你的JSON代碼無法執行。

幸運的是,我們可以使用一些線上的工具網站來幫助我們檢查JSON,你可以使用JSONCompare,如果訪問速度較慢,也可以使用國內類似的網站如bejson來檢查你JSON的合法性;你只需要複製你的JSON代碼到該頁面,然後點擊右邊的檢查按鈕(√)即可。如果檢查按鈕顯示為綠色,則說明你的JSON正常,反之,如果檢查按鈕為紅色,他將嘗試告訴你錯誤的原因。注意!這個網站只能檢查這個JSON是否有錯誤比如漏掉大括號或者中括號等,即使通過也並不能代表你的JSON能夠在遊戲裏正確的執行!我們也會檢查你在json檔案中寫的注釋,注釋在json中通常是無效的,但是當你在文檔中寫了「//注釋」的時候工具也會告訴你「JSON檔案無效」,記得在使用工具檢查代碼前先移除所有注釋!

創造一個行為包[編輯 | 編輯原始碼]

行為包作為附加包的一部分,允許你更改一個實體的行為來達到全新的表現效果。不過目前僅支持添加或修改一個實體已經存在的行為(當然這個實體也應該是存在的)。這個簡單的教學將向您展示如何將苦力怕的爆炸行為添加到豬身上,不過在修改豬之前,我們要先讓別人知道自己是這個附加包的作者。

當然,下面的步驟你也可以用在一個材質包上:

  • 將原版行為包複製下來並放到一個專門的資料夾中,命名為「tutorial_behavior_pack」。
  • 在此尋找行為包資料夾:
    • (Windows 10版)C:\Users\帳戶名稱\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\behavior_packs
    • (安卓版)SDCard/games/com.mojang/behavior_packs
  • 創建一個名為manifest.json的JSON檔案。

manifest.json[編輯 | 編輯原始碼]

manifest.json在行為包中相當於目錄及清單的作用。因此manifest.json是一個行為包的必要組成部分。

manifest.json
{
    "format_version": 1,
    "header": {
    "uuid": "e3c5a9be-1cfc-4a74-9f70-9213bab32090",//uuid采用十六进制
    "name": "资源包名称",
    "version": [0, 0, 1],//此处填入资源包版本
    "description": "资源包简介",
    "modules": [
      {
        "description": "子资源包简介",
        "version": [0, 0, 1],//子资源包版本
        "uuid": "14d5fb6b-ef0a-47e5-8a98-d615709c1a03",//uuid采用十六进制
        "type": "data"//"data"表示该包为行为包,"resources"则表示该包为材质包
      }
    ]
  }
}

當然,你完全可以把「manifest.json」複製進你的行為包資料夾並修改它。如果你需要讓你行為包配套材質綁定到行為包上,就要讓行為包中「dependencies」裏面的「uuid」 和材質包中modules的「uuid」相同。

注意

單從檔案名稱和大致結構看來材質包和行為包的「manifest.json」似乎是完全一樣的。但是modules中的「type」決定了它是那種類型的包,行為包對應「data」,材質包對應「resources」。不過與此同時,你需要讓header和modules的UUID不同,同樣的材質包的所有UUID也不能和行為包重合。如果真的出現相同的情況,則會導致只能導入其中一個包。即使該資源包僅有manifest.json也是可以成功導入的,因此導入的成功與否並不代表資源包的內容是否正確。若manifest出現錯誤,則會出現<該資源包無法解析>的字樣,因此若沒有可用的代碼驗證工具,可上sojson.com將代碼複製進網址後進行線上格式驗證。

製作一個圖標[編輯 | 編輯原始碼]

為行為包製作圖標的過程其實是和為資源包製作圖標一樣的,可以在創建資源包中查看細節。當然,資源包和行為包圖標一樣也是可以的。可以命名一個pack_icon.png的圖片,將其放在行為包根目錄裡。

測試自己的行為包[編輯 | 編輯原始碼]

現在可以嘗試執行了!創建一個新的世界,在創建世界頁面的左邊可以看到行為包選項,點進去之後找到你導入的行為包並選中。如果有彈窗就點確定,行為包會導致這個世界不再能夠獲得成就:

CBPPicture 2.png

請記住,每當您更改行為包時,您都需要創建一個新世界,因為遊戲會在創建世界時製作行為包的副本。所以,如果您修改世界(地圖)資料夾中包含的附加包,則可以避免這種情況。如果你想將這個包應用到其他世界,則需要手動將它複製回com.mojang/behavior_packs資料夾。

設定JSON檔案結構[編輯 | 編輯原始碼]

現在我們的這個包所需的東西已經準備好了,讓我們把這些json檔案放進一個資料夾裡。

  • 在這個名為"tutorial_behavior_pack"的資料夾裡,新建一個名為「entities」的資料夾。

我們將要把所有改變實體行為的json檔案放在entities資料夾內。我們開始吧。首先,把pig.json從\Vanilla_Behavior_Pack\entities\pig.json複製出來,然後,把它粘貼到entities資料夾裏面。現在pig.json已經複製完了。把它用你選擇的文本編輯器打開。

實體JSON概述[編輯 | 編輯原始碼]

在我們修改JSON代碼前,讓我們首先簡要地看看我們的實體.json怎麼建立。

Minecraft實體JSON有4個部分:

minecraft:entity[編輯 | 編輯原始碼]

這是每個生物的主要對象,接下來所有行為behavior和事件event都是這個對象中包含的值。

entity.json偽代碼
{
  "minecraft:entity": {pig} scale 11.111
    "format_version": 0.1,
    "component_groups": { 在这填写组件组 },
    "components": { 在这填写组件 },
    "events": { 在这填写事件 }
  }
}
注意

在Minecraft中,這不是有效的json!這只是一個如何編寫一個可用實體json的示例。如果你查看一下現有的pig.json你將會注意到「在這填寫組件組」這一部分事實上已經寫入了真正的組件。

注意2

format_version是用來告訴Minecraft該讀取哪個版本的JSON。當我們升級JSON檔案並添加新組件時,應當告訴遊戲它需要尋找對應版本。這是通過修改format_version後的版本號來完成的。

所以,請你儘可能不改變這個數字,因為當Minecraft的預設JSON更新時,你也需要更新你的JSON來適應新的變化。一旦你更改了你的JSON,你就需要改變這個版本號。你應該把官方已更新的JSON複製過來,做好你自己的修改後再覆蓋回去。

(囉嗦一堆就是告訴你別用自己的版本號,去用官方的。)

組件組(Component groups)[編輯 | 編輯原始碼]

用於定義一組行為,用於簡單地去除或增加多個行為,對於改變生物狀態十分有用(例如幼年豬與成年豬行為的轉換)。

在pig.json中含有pig_baby、pig_adult兩個複合標籤組。可以看到,只有當某個組件組當前被加入這個實體中時,這個組件組才會執行。因此,當這隻豬是幼年豬時,pig_baby這個組件組將會被加入並執行,而pig_adult則不會。

組件(Components)[編輯 | 編輯原始碼]

用於定義該種生物的共有行為。

可以看到「minecraft:identifier」和「minecraft:type_family」存在於這一部分,因為我們希望每一種豬都有這些行為。

事件(Events)[編輯 | 編輯原始碼]

事件用於加入或移除複合標籤組。事件被我們加入的組件或者Minecraft本身的代碼所觸發。

事件可以使用randomize函數在不同結果之間進行選擇(請參閱pig.json中的「minecraft:entity_spawned」)。 請注意,randomize的權重可以增加到100以上。這是因為它們不是百分比! 如果你把成年豬的比重設定為23,然後將小豬的比重設定為100,那麼你將有23/123的機會獲得成年豬和100/123的機會獲得一頭小豬。

「note:」的組件[編輯 | 編輯原始碼]

minecraft:identifier[編輯 | 編輯原始碼]

這個語句對每一個實體來說都是必要的。它告訴遊戲你的JSON對哪些實體有效。

請注意:標識符(identifier)必須被正確命名!如果亂輸你可能會遇到一些不可描述的事情或是實體大罷工。不知道/不確定如何命名?請參考原版行為包中關於那個實體的JSON檔案。(在/Vanilla_Behavior_Pack/entities/)

minecraft:type_family[編輯 | 編輯原始碼]

它為實體設定族類型。族類型利用多種多樣的要素,選擇特定的實體。具體例子請參考「minecraft:rideable」和「minecraft:breedable」。

minecraft:entity_spawned[編輯 | 編輯原始碼]

當你規定的的實體生成時,這個語句會被觸發。 在pig.json中有一個隨機化函數,可以隨機地生成大豬或小豬。你可以閱讀它來加深理解。

正式開始吧![編輯 | 編輯原始碼]

添加組件[編輯 | 編輯原始碼]

現在我們已經明白了一個實體是如何被設定的;是時候魔改一下關於豬的代碼了!

找到creeper.json和pig.json檔案(在Vanilla_Behavior_Pack/entities/)然後分別打開它們。你眼前應該有兩個分離的窗口(這樣便於來回切換)。

首先,讓豬找到一個攻擊對象。你可以往pig.json的組件對象中寫入"minecraft:nearest_attackable_target"和"minecraft:target_nearby_sensor"來達到這一目的。

然後,豬要找目標。在組件對象中找到"minecraft:behavior.random_look_around"。它應該剛好在"events"小節之前。

最後,爆炸吧!從creeper.json中複製」target_nearby_sensor」和 「nearest_attackable_target」組件,粘貼到pig.json的」random_look_around」組件之後。(下邊有詳細代碼,自己看)


pig.json 片段:

...

"minecraft:behavior.random_look_around": {
  "priority": 9
},
"minecraft:behavior.nearest_attackable_target": {
  "priority": 1,
  "entity_types": [
    {
      "filters": { "other_with_families": "player" },
      "max_dist": 16
    }
  ], 
  "must_see": true
},
"minecraft:target_nearby_sensor": {
  "inside_range": 3.0,
  "outside_range": 7.0,
  "on_inside_range": {
    "event": "minecraft:start_exploding",
    "target": "self"
  },
  "on_outside_range": {
    "event": "minecraft:stop_exploding",
    "target": "self"
  }
}

...

注意下最後的括號後沒加逗號,這是因為 "minecraft:target_nearby_sensor"是最後一個組件(話說完了,不用逗號)。

minecraft:nearest_attackable_target[編輯 | 編輯原始碼]

這個組件讓實體在你定義的限制下攻擊最近的目標。下面是一些設定的說明。

  • Priority – 優先級,設定這個組件的重要程度。優先級數越高,組件就越可能優先執行(比如兩個組件衝突時)。
  • Entity_types – 選擇你定義的實體,把它/它們設定為目標。(上邊提到過)
  • Max_dist – 最大距離。目標在這個範圍內才能被追蹤和攻擊。
  • Must_see – 必須被看見。目標必須在玩家的視野範圍內,才會被你設定的實體攻擊。

在上面的代碼中,我們選定了玩家作為目標。當玩家走進以豬為中心16塊為半徑的區域時,就會遭到追擊。

minecraft:target_nearby_sensor[編輯 | 編輯原始碼]

目標靠近傳感器。在你設定的範圍內如果有目標,這個組件就會被觸發。

  • Inside_range – 設定「內部範圍」的距離
  • Outside_range – 設定「外部範圍」的距離
  • On_inside_range – 當目標進入「內部範圍」,觸發這個函數內的語句。
  • On_outside_range – 當目標脫離「外部範圍」,觸發該函數內的語句。

上面的代碼中,我們想要利用on_inside_range和on_outside_range觸發"minecraft:start_exploding"(開始爆炸)和"minecraft:stop_exploding"(停止爆炸)。當然現在啥也不會發生,因為我們還沒添加這兩個事件呢!(下面就要講怎麼添加事件)

添加事件[編輯 | 編輯原始碼]

在pig.json中滾動到「events」對象底部並在"minecraft:on_unleash"的右花括號後添加一個逗號。我們將添加新的開始/停止爆炸事件。

從creeper.json複製"minecraft:start_exploding"和"minecraft:stop_exploding"事件,粘貼到pig.json。pig.json看起來應該像這樣(新的文本以綠色高亮)。

pig.json 片段:

...

"minecraft:on_unleash": {
  "remove": {
    "component_groups": [
      "minecraft:pig_leashed"
    ]
  }
},
"minecraft:start_exploding": {
  "remove": {
    "component_groups":[
      "minecraft:hunting"
    ]
  },
  "add": {
    "component_groups": [
      "minecraft:exploding"
    ]
  }
},
"minecraft:stop_exploding": {
  "remove": {
    "component_groups": [
      "minecraft:exploding"
    ]
  },
  "add": {
    "component_groups": [
      "minecraft:hunting"
    ]
  }
}

... 現在我們帶來了苦力怕的事件,但它需要一些清理。我們的豬不需要一個狩獵組件組。因此我們可以從start_exploding移除「remove」部分,從stop_exploding移除「add」部分。現在我們的代碼看起來像這樣:

pig.json 片段:

...

"minecraft:on_unleash": {
  "remove": {
    "component_groups": [
      "minecraft:pig_leashed"
    ]
  }
},
"minecraft:start_exploding": {
  "add": {
    "component_groups": [
      "minecraft:exploding"
    ]
  }
},
"minecraft:stop_exploding": {
  "remove": {
    "component_groups": [
      "minecraft:exploding"
    ]
  }
}

...

注意兩個事件分別在添加和移除一個組件組叫做「minecraft:exploding」。我們的pig.json還沒有這個組件組呢!

添加組件組[編輯 | 編輯原始碼]

向上滾動到pig.json的頂部到「component_groups」部分。找到最後一個組件組,該組應該是pig_leashed,並在其右大括號中添加逗號。現在輸入以下內容,或者從creeper.json複製「minecraft:exploding」組件組。Pig.json現在應該如下所示(綠色新代碼):

pig.json 片段

...

  "minecraft:pig_leashed": {
    "minecraft:behavior.move_towards_restriction": {
      "priority": 2,
      "speed_multiplier": 1.0
    }
  },
  "minecraft:exploding": {
    "minecraft:explode": {
      "fuseLength": 1.5,
      "fuseLit": true,
      "power": 3,
      "causesFire": false
    }
  }
},
"components": {
  "minecraft:damage_sensor": {

...

minecraft:explode[編輯 | 編輯原始碼]

fuseLength – 這個實體在引信點燃時爆炸所需的時間(以秒為單位)

fuseLit – 添加此組件時引信是否自動點燃

power – 這決定了所造成的傷害,以及爆炸半徑的大小

causesFire – 這決定了爆炸是否會導致附近的方塊着火

讓我們在這個群組中添加一個「scale」組件,這樣我們的豬在它爆炸之前就會變大!在「explode」組件的結束大括號中添加一個逗號,並輸入以下內容(綠色的新文本):

pig.json 片段

...

  "minecraft:exploding": {
    "minecraft:explode": {
      "fuseLength": 1.5,
      "fuseLit": true,
      "power": 3,
      "causesFire": false
    },
    "minecraft:scale": {
      "value": 2      
    }
  }
},
"components": {
  "minecraft:damage_sensor": {

...

minecraft:scale[編輯 | 編輯原始碼]

Value – 實體正常規模的倍率。值為2將使比例加倍,值為.5將使比例減半等。

測試我們的行為包[編輯 | 編輯原始碼]

  1. 啟動遊戲
  2. 創建新世界
  3. 設定世界為創造模式
  4. 打開作弊
  5. 單擊行為包
  6. 在右側列表中找到「Tutorial Behavior Pack」並單擊它
  7. 單擊創建世界
  8. 從創造模式的背包中拿出豬的生怪蛋,並生成一隻豬(或者輸入/summon pig)
  9. 跑離20方塊左右
  10. 使用指令將模式切換為生存模式:/gamemode s
  11. 沖向那隻豬
  12. 如果豬像苦力怕一樣爆炸,那麼,恭喜你,你成功製作了一個行為包!

恭喜![編輯 | 編輯原始碼]

您只是簡單接觸到了行為包的可能性!!如果您希望能夠做的不僅僅是爆炸,請查看實體組件參考指南以查看可以添加到實體的其他行為和組件!您還可以隨時查看如何為示例設定Vanilla的行為包,如果您的遊戲版本為1.8以上,您還可以嘗試自訂實體,1.12以上可嘗試自訂物品和合成表以及生態域(高級)。


注意實體特有的不可更改行為[編輯 | 編輯原始碼]

目前為止,並不是實體的所有行為均可更改,在最新基岩版內,大部分實體行為已經可以進行更改了,但仍有部分行為並未放置在實體行為檔案中,例如女巫扔藥水的特性就沒有寫在其行為檔案裡。而這些特有行為往往都是為某些生物量身定做的,例如界伏蚌的半方塊狀態以及瞬移,終界使者的躲避弓箭和水,凋零怪的召喚時蓄力以及半血召喚凋零骷髏,發射藍色凋零骷髏頭,和死後爆炸等,以及岩漿立方怪和史萊姆的死後分裂,甚至還有終界使者,烈焰使者等生物行走的粒子密度。這些行為均未記錄在行為檔案中。以前的時候可能無可奈何,但是基岩版1.8更新以後,我們可以通過"runtime_identifier": "minecraft:实体ID"代碼【在1.10版本更新後,越來越多的原版特性被加入到行為包當中,包括瞬移,分裂等】(來源:MINECON Earth 2018官方展示行為包中的鴨子行為代碼),來獲取某個實體的特有行為,下面給出一個例子:

{
  "format_version": "1.8.0",
  "minecraft:entity" {
    "description": {
      "identifier": "dfsteve:ditto",
      "runtime_identifier": "minecraft:rabbit",
      "is_spawnable": true,
      "is_summonable": true,
      "is_experimental": false
    },
    ...
  },
  ...
}

其中我把一個自訂實體的執行標識符設定為"rabbit",則該自訂實體便擁有了兔子的一些特性,其中甚至包括彩蛋。此外還有其他實例,例如:

Steve upside down.jpg

自訂實體史蒂夫繼承了原版生物特性,用Grumm命名使其倒立了,即便如此,你仍不能改變一個實體原來的特性,僅能為其增加新的特性。

當然,對於我們行為包作者來說,我們希望未來這些特性會逐步加入到行為檔案中供我們開發,這將對我們的開發起着重要作用,例如界伏蚌的半方塊特性以及凋零怪的血條,用途很廣泛。總之,希望官方把行為包功能做得越來越完善。

挑戰[編輯 | 編輯原始碼]

既然你已經有了一些基礎的經驗,你可以挑戰一下下列任務:

  • 使殭屍可以被玩家騎乘;
  • 再嘗試讓玩家能夠用某種東西控制殭屍的方向。(提示:可以參照豬的item_controllable以及controlled_by_player組件)
  • 使村民在持有弓時轉變為骷髏。(提示:可以參照狼的tameable組件和村民的transformation組件。)
  • 改變太陽和月亮的材質(和材質包類似)
  • 用桶對着苦力怕獲得岩漿桶
  • 使牛可以發射地獄幽靈火球。

排查故障[編輯 | 編輯原始碼]

如果您的JSON更改似乎在遊戲中不起作用,請檢查以下內容:

  • 確保您已正確輸入所有內容。拼寫錯誤和標點丟失會導致不必要的行為!
  • 確保.json檔案位於正確的資料夾中並正確命名!
    • 您應該有一個名為entities的資料夾,其中包含所有.json檔案
  • 確保您的實體具有正確的標識符
    • 如果您不確定它應該是什麼,請檢查Vanilla Minecraft行為包中的.json檔案
    • Vanilla的.json檔案可以在/Vanilla_Behavior_Pack/entities中找到
  • 如果您的實體行為很奇怪,無AI,甚至懸浮,敲擊或者其他行為後實體會垂直升天或者下墜,並穿過方塊,這可能是代碼格式正確但與該實體衝突的結果,嘗試刪除多餘不合理行為

進階:自訂實體[編輯 | 編輯原始碼]

在本章節,你將學會如何創建一個完整的名字為npc的自訂實體,並學會如何更改該自訂實體的部分屬性。

行為包部分

在行為包根目錄新建一個entities資料夾,在資料夾中放入你新增的實體的json。這個json的名字為[实体子名].json,其中實體子名為identifier中的命名空間ID的名稱部分。

{
	"format_version": "1.8.0",
	"minecraft:entity": {
		"description": {
			"identifier": "test:npc",
			"runtime_identifier": "test:npc",
			"is_spawnable": true,
			"is_summonable": true,
			"is_experimental": false
		},
		"components": {
			"minecraft:fire_immune": true,
			"minecraft:type_family": {
				"family": [ "test", "npc"]
			}
		}
	}
}

自訂的實體json與其他生物實體json的寫法相同,具體可參照上文

資源包部分

在資源包根目錄創建一個entity資料夾,將實體的屬性json寫進去,名字同樣為[实体子名].json。如:

 1 {
 2 	"format_version": "1.8.0",
 3 	"minecraft:client_entity": {
 4 		"description": {
 5 			"identifier": "test:npc",
 6 			"materials": { "default": "npc" },
 7 			"textures": {
 8 				"default": "textures/entity/npc"
 9 			},
10 			"geometry": {
11 				"default":"geometry.npc"
12 			},
13 			"render_controllers": [
14 				"controller.render.npc"
15 			],
16 	"spawn_egg": {
17 		"base_color": "#99e550",
18 		"overlay_color": "#99e550"
19 			}
20 		}
21 	}
22 }

identifier與之前行為包中所寫ID需統一,materials決定了將被這個實體所調用的材料。textures後面為實體貼圖材質路徑,geometry則確定了實體的建模檔案路徑,render_controllers決定了這個實體所擁有的渲染控制器。兩個color則分別確定了生成這個實體的生怪蛋的斑點的顏色與底色,格式為十六進制。

materials

接着你需要在資源包根目錄再創建一個名字為materials的資料夾,在裏面放置實體的材料entity.material.例:

{
	"materials": {
		"version": "1.0.0",		"npc:entity_alphatest": {}
	}
}

不同的materials材料將會給實體應用上不同的渲染效果,具體可參照原版材質包中的materials/entity.material。 註:在materials中,"npc"需要與之前的identifier中的子名相統一。

render_controllers

依然是在根目錄創建一個名為render_controllers的資料夾,在裏面放入這個實體的動畫檔案,名字為[实体子名].json

{
	"format_version": "1.8.0",
	"render_controllers": {
		"controller.render.npc": {
			"geometry": "Geometry.default",
			"materials": [
				{ "*": "Material.default" }
			],
			"textures": [ "Texture.default" ]
		}
	}
}

其中"controller.render.npc",npc為實體子名,其他部分為基礎內容。 注意: 如果您沒有添加"render_controllers",那麼您用Blockbench旋轉的方塊模型將會發生錯誤。如果沒有"render_controllers",直接把您旋轉的方塊模型導入進Minecraft,將不會進行旋轉,而是長着難看的樣子或看不見任何的方塊模型。

最後就是材質,模型,與語言檔案的部分。材質需要根據在之前entity中所寫的路徑對應,在對應的路徑放入名字為實體子名的貼圖即可。模型也是同樣的,在指定的路徑中放入名字為實體子名的json模型檔案,模型的實體名為"geometry.[实体子名]"。具體可參照教學/修改實體模型。語言檔案需要在根目錄,新建一個texts的資料夾,在裏面放入名為zh_CN.lang的檔案。其他語言則將檔案名改成對應的語言代碼即可。在裏面寫上以下內容:

entity.npc.name=npc
item.spawn_egg.entity.npc.name=npc

每有一個自訂實體都要在需要語言檔案中加上以下內容:

entity.[实体子名].name=实体名

item.spawn_egg.entity.[实体子名].name=生物蛋名

(註:未加入以上內容也不影響自訂實體的任何功能。)

完成以上步驟,你將會得到一個完整的自訂實體。 行為包擁有了自訂實體功能後,正在逐漸向着mod的方向發展。

進階:自訂方塊[編輯 | 編輯原始碼]

自訂方塊是基岩版beta 1.12.0.2中的新增內容,可以修改原版方塊的部分特性及增加一個全新的方塊。

行為包部分

首先,在行為包根目錄新建一個blocks的資料夾,在資料夾中放入你新增的方塊的json

{
  "format_version": "1.10.0",
  "minecraft:block": {
    "description": {
      "identifier": "test:space",
      "is_experimental": false,
      "register_to_creative_menu":true
    },
    "components": {
        "minecraft:destroy_time": {
            "value":1
        },
        "minecraft:block_light_absorption": {
            "value": 0
        },
        "minecraft:block_light_emission": {
            "emission": 0.0
        },
        "minecraft:explosion_resistance": {
            "value": 0.0
        },
        "minecraft:flammable": {
            "burn_odds": 0,
            "flame_odds": 0
        },
        "minecraft:friction": {
            "value": 0.1
        },
        "minecraft:loot": {
            "table": "loot_table/blocks/space"
        },
        "minecraft:map_color": {
            "color": "#ffff99"
        }
    }
  }
}
    •  format_version:定義了此檔案的版本,除非有充分理由,否則請勿更改
    •  minecraft:block
      •  description
        •  identifier:方塊命名空間ID
        •  is_experimental:此方塊是否使用實驗性玩法
        •  register_to_creative_menu:此方塊是否出現在創造模式物品欄中
      •  components
        •  minecraft:destroy_time:破壞此方塊所需的時間
          •  value:值
        •  minecraft:block_light_absorption:此方塊會吸收多少光亮
          •  value:值
        •  minecraft:block_light_emission:此方塊的亮度等級
          •  emission:值
        •  minecraft:explosion_resistance:此方塊的爆炸抗性
          •  value:值
        •  minecraft:flammable:此方塊的燃燒屬性
          •  burn_odds:着火時,此方塊被燒毀的機率(設為0則不可燃)
          •  flame_odds:周圍有火時,此方塊被引燃的機率
        •  minecraft:friction:此方塊的摩擦係數,影響實體在其上的移動速度
          •  value:值
        •  minecraft:loot:破壞此方塊時掉落的物品,使用戰利品表的路徑表示
          •  table:值
        •  minecraft:map_color:此方塊在地圖上顯示的顏色,使用十六進制顏色編碼表示(#RRGGBB)
          •  color:值
資源包部分

先在資源部根目錄創建一個blocks.json的檔案,將方塊的屬性寫進去,寫法可參照原版的blocks.json。

{
  "format_version": [1,1,0],
  "test:space": {
    "textures": "space",
    "sound": "stone"
  }
}

三個元素分別為命名空間ID,材質,音效,若材質及音效為自訂,則需要在terrain_texture.json和sound_definitions中增加對應的路徑。 接着創建textures資料夾,在資料夾中創建一個名為terrain_texture.json的檔案。

{
  "resource_pack_name": "vanilla",
  "texture_name": "atlas.terrain",
  "padding": 8,
  "num_mip_levels": 4,
  "texture_data": {
   "space": {
    "textures": [
     "textures/blocks/space"
    ]
   }
  }
}

從texture_data開始寫,space為在blocks.json中所指定的材質ID。textures的值為該材質的路徑位置。

之後需要根據路徑在textures中創建一個blocks的資料夾,在內放入一個名字為space的圖片,導入即可。

注意:基岩版正式版目前不能修改/添加方塊的模型,基岩版beta 1.16.100.56已新增添加方塊模型。

進階:自訂物品與合成表[編輯 | 編輯原始碼]

Dark Oak Sapling JE2 BE2.png
該頁面仍需完善。

你可以幫助我們擴充關於該主題的更多信息。
原因:39

基岩版支持了自訂物品(1.10),方塊(1.10)和合成表(1.12),具體方法做以下概述。

命名空間ID

自訂物品的命名空間不能是minecraft,也建議不要是類似於addoncustomtest的名稱。建議是行為包的簡易英文名稱或作者名稱。而ID則可以是物品英文名,空格請替換成下劃線_或連字符-[注 1]


1.定義物品行為
  • 自訂物品的大致格式,你需要創建一個items資料夾放入行為包內,然後創建一個json檔案。接着像這樣格式,自訂你的物品。
{
    "format_version": "1.12.0",
    "minecraft:item": {
        "description": {
            "identifier": "minecraft:testitem"
        },
        "components": {
            "minecraft:max_damage": 10,
            "minecraft:hand_equipped": false,
            "minecraft:stacked_by_data": false,
            "minecraft:foil": false,
            "minecraft:block": "",
            "minecraft:max_stack_size": 64,      
            "minecraft:use_duration": 32,
            "minecraft:food": {
                "nutrition": 4,
                "saturation_modifier": "low",
                "using_converts_to": "testitem",
                "on_use_action": "",
                "on_use_range": 4,
                "cooldown_type": "",
                "cooldown_time": 4,
                "can_always_eat": true,
                "effects": [
                    {
                        "name": "regeneration",
                        "chance": 1.0,
                        "duration": 30,
                        "amplifier": 4
                    },                                                
                    {                                                 
                        "name": "absorption",                       
                        "chance" : 1.0,                               
                        "duration" : 120,                             
                        "amplifier" : 3                               
                    }
                ],
                "minecraft:seed": {
                    "crop_result": "sweet_berry_bush",    
                    "plant_at": ["grass","dirt","podzol"] 
                }
            }
        }
    }
}

下面是物品json的格式,大部分內容都是可以省略的。

    •  format_version:定義了清單的當前版本。除非有充分的理由,否則請勿更改,如需使用下述全部屬性,需要填入1.13
    •  minecraft:item
      •  description
        •  identifier:物品命名空間ID
      •  components:物品行為
        •  minecraft:max_damage:耐久度
        •  minecraft:hand_equipped:是否為手持裝備
        •  minecraft:stacked_by_data:是否可以重疊
        •  minecraft:foil:是否讓物品擁有類似附魔的閃爍效果
        •  minecraft:block:物品在方塊狀態下的名稱
        •  minecraft:max_stack_size:物品的最大堆棧數量
        •  minecraft:seed:物品作為種子的相關屬性
          •  crop_result:種下後產生的方塊
          •  plant_at:一個字符串陣列,指出種子可以種植在哪些方塊上
        •  minecraft:use_duration:使用所需時間(如食用食物的時間)
        •  minecraft:food:物品作為食物的相關屬性。
          •  nutrition:補充的飢餓值
          •  saturation_modifier:補充的飽食度等級,預設為normal
            •  poor:稀少
            •  low:較少
            •  normal:普通
            •  good:較多
            •  high:很多
            •  supernatural:超自然
          •  using_converts_to:使用後,此物品轉換為這一欄中的物品
          •  on_use_action:使用物品後的效果
            •  chorus_teleport:類似食用歌萊果後的效果,瞬移
          •  on_use_range:3個範圍的陣列,傳送位置x,y,z的偏移值
          •  is_meat:決定食物是否為肉,可以使用在已馴服的上‌[需要測試]
          •  cooldown_type:可填"chorusfruit"或不填
          •  cooldown_time:使用此物品的冷卻時間(以刻為單位)
          •  can_always_eat:是否可以一直吃(飢餓值為滿時)
          •  effects:食用後的狀態效果
              •  name:狀態效果名稱
              •  chance:隨機選中該狀態效果的概率,範圍是0-1
              •  duration:狀態效果長度(以秒為單位)
              •  amplifier:狀態效果的強度等級

你可以查看文檔獲取上述列表更詳細描述(beta版)。

2.定義合成表(可選)

自訂合成表前,需要先確認需要何種配方,配方大致共分為有序合成、無序合成與其他合成(熔爐、釀造台、切石機……等)三種,並創建一個名為recipes的資料夾,放入行為包裡。

接着需要創建類似如下的檔案,並為其命名,檔案內部大致介紹如下

有序合成(以蛋糕為例)

{
  "format_version": "1.12",
  "minecraft:recipe_shaped": {
    "description": {
      "identifier": "minecraft:cake"
    },
    "tags": [ "crafting_table" ],
    "pattern": [
      "AAA",
      "BEB",
      "CCC"
    ],
    "key": {
      "A": {
        "item": "minecraft:bucket",
        "data": 1
      },
      "B": {
        "item": "minecraft:sugar"
      },
      "C": {
        "item": "minecraft:wheat"
      },
      "E": {
        "item": "minecraft:egg"
      }
    },
    "result": [
      { "item": "minecraft:cake" },
      { "item": "minecraft:bucket", "count": 3, "data": 0 }
    ]
  }
}
    •  format_version:此檔案的版本,若非必要,請勿更改
    •  minecraft:recipe_shaped:表示此為有序合成
      •  description
        •  identifier:命名空間ID
      •  tags:物品可在哪裏合成
      •  pattern:指定需在工作枱裡如何擺放物品以合成,一列一個元素
      •  key:解釋"pattern"中使用的代號為何種物品,以下使用蛋糕合成表解釋
        •  A:代號"A"所代表的數據
          •  item:在此為「桶」(尚未指定為哪一種桶)
          •  data:將此值設定為"1",將桶指定為「牛奶」
        •  B:代號"B"所代表的數據
          •  item:在此為「糖」
        •  C:代號"C"所代表的數據
          •  item:在此為「小麥」
        •  E:代號"E"所代表的數據
          •  item:在此為「蛋」
      •  result:指定輸出何種物品,可有多個輸出
        •  item:此為第一個合成物品,蛋糕
        • :此為第二個合成物品(尚未指定為何種物品)
          •  item:在此指定物品為「桶」(尚未指定為何種桶)
          •  count:將「桶」的數量設為「3」
          •  data:將此值設定為"0",將桶指定為「鐵桶」

無序合成(以南瓜派為例)

{
  "format_version": "1.12",
  "minecraft:recipe_shapeless": {
    "description": {
      "identifier": "minecraft:pumpkin_pie"
    },

    
    "tags": [ "crafting_table" ],
    "ingredients": [
      {
        "item": "minecraft:pumpkin"
      },
      {
        "item": "minecraft:sugar"
      },
      {
        "item": "minecraft:egg"
      }
    ],
    "result": {
      "item": "minecraft:pumpkin_pie"
    }
  }
}
    •  format_version:此檔案的版本,若非必要請勿更改此項
    •  minecraft_shapeless:表示此為無序合成
      •  description
        •  identifier:命名空間ID
      •  tags:可在哪裏合成
      •  ingredients:需要將哪些物品放入工作枱(不限位置)
        •  item:指定為何種物品
      •  result
        •  item:指定輸出何種物品,不可有多個輸出

其他合成 - 熔爐合成(以仙人掌綠為例)

{
  "format_version": "1.12",
  "minecraft:recipe_furnace": {
    "description": {
      "identifier": "minecraft:furnace_cactus"
    },
    "tags": ["furnace"],
    "input": "minecraft:cactus",
    "output": "minecraft:dye:2"
  }
}
    •  format_version:此檔案的版本,若非必要請勿更改此項
    •  minecraft:recipe_furnace:表示此為熔爐合成
      •  description
        •  identifier:命名空間ID
      •  tags:可在哪裏合成
      •  input:輸入物品
      •  output:輸出物品

其他合成如釀造台、切石機……等之合成配方與熔爐配方相似,在此不多做贅述。如果你想讓物品有多種合成方法,需要創建多個json檔案,名稱不受限制。

3.添加資源包中物品的定義

定義完了物品行為後,我們就要到資源包的部分進一步定義。這可以決定物品的性質。在資源包目錄下創建items資料夾,然後在其中創建一個json檔案。檔案內容如下所示:

{
  "format_version": "1.10",
  "minecraft:item": {
    "description": {
      "identifier": "minecraft:appleEnchanted",
      "category": "Nature"
    },

    "components": {
      "minecraft:icon": "apple_golden",
      "minecraft:use_animation": "eat",
      "minecraft:hover_text_color": "light_purple",

      "minecraft:render_offsets": "apple"
    }
  }
}

格式:

    •  format_version:定義了清單的當前版本。
    •  minecraft:item
      •  description
        •  identifier:物品命名空間ID
        •  category:物品的分類,影響在創造模式物品欄中的顯示位置。‌[需要更多信息]
          •  Equipment:裝備
          •  Items:物品
          •  Nature:自然
      •  components:組件
        •  minecraft:icon:材質名稱
        •  minecraft:use_animation:使用動畫
          •  eat:食用
          •  drink:飲用,類似於蜂蜜瓶
          •  camera相機效果
        •  minecraft:hover_text_color:文本顏色
        •  minecraft:render_offsets:創造模式物品欄中的排序位置‌[需要更多信息]
4.添加材質

添加的物品還需要添加材質檔案才能顯示。材質檔案不一定要放在textures/items/下。在textures資料夾下創建item_texture.json,內容如下

{ 
"resource_pack_name":"Vanilla",
"texture_name":"atlas.item",
"texture_data":{
	"item":{
     "textures":"textures/item/item"
	 },
 }
 }
    •  resource_pack_name:資源包名稱,可以填入vanilla或其他名稱‌[需要驗證]
    •  texture_name:‌[需要更多信息]請填atlas.item
    •  texture_data:材質數據。
      •  (name):一個元素,名稱為上面所講的 minecraft:icon的值。
        •  textures:材質路徑(無需擴展名,以資源包資料夾為根目錄)。如果只有單個材質,它是字符串類型,如果是多個材質(我們這裏沒有用到),它則是陣列類型。
5.添加語言檔案
參見:語言詳細教學

在得到物品後,你會發現它缺少名稱,因為還沒有定義語言檔案。請在資源包內新建texts資料夾,並創建lang檔案。檔案名由語言決定,如zh_CN.lang(如果已經存在,就直接打開)。 然後添加一行(無需括號):

item.(物品命名空间ID).name=(名称) #
6.完成!

恭喜你完成了自訂物品!你可以進入遊戲看看效果了。如果你為其添加了合成配方,你可以合成它,如果沒有,可以用/give指令獲得它。

本頁面暫做概述,歡迎補充。

  1. 也可以依照駝峰命名規範,如附魔金蘋果appleEnchanted,但不建議使用。

傳播和分享[編輯 | 編輯原始碼]

現在你已經創建了一個行為包。想與朋友分享?照着下面做。

  • 定位你的行為包檔案
    • Windows系統:(C:\Users\帳戶名稱\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\behavior_packs\tutorial_behavior_pack)
    • Android系統:(/storage/emulated/0/games/com.mojang/behavior_packs/)
    • iOS系統:下載一個可以壓縮文檔的軟件,如「解壓專家」,在上面可以新建,導入各種檔案。首先打開safari,從wiki上點擊下載vanilla行為包,等待上面白條走完後,畫面上出現下載好的檔案,然後點擊「用其他應用打開」並保存到「我的iPhone/解壓專家/myfolders」,然後打開解壓專家,可以看到原始行為包了。魔改完後,按照格式壓縮成zip文檔並把後綴名改成.mcpack,在軟件裡長按該檔案,在彈出框中選擇"分享",然後選「在minecraft中打開」就可以測試了,也可以用QQ打開,分享給聯繫人。
  • 選擇已有的檔案和資料夾
  • 右擊,選擇「發送到」->zip壓縮文檔
  • 把生成的檔案重命名為tutorial_behavior_pack.mcpack
    • 確定檔案擴展名為.mcpack
    • 可能會彈出窗口問你是否確定修改擴展名,選「是」

你現在可以給你的朋友.mcpack檔案了!當他們打開它時,Minecraft會在它還沒有執行時啟動,然後它將導入你的資源包供他們使用!

注意

您可以通過刪除resource_packs資料夾中的副本(首先進行備份!),然後打開mcpack導入它來測試是否可行。 如果它不起作用,請確保在製作.mcpack zip壓縮文檔時選擇了resource_pack的內容而不是資料夾本身。

注意2

如果您的行為包引用資源包,則mcpack也不會自動包含該資源包,即使您已將行為pack_manifest賦予該包的依賴性。如果您具有資源包依賴關係,也為資源包創建.mcpack,或創建一個世界並添加要導出的行為和資源包,然後導出該世界。導入該世界時,該世界的保存資料夾將包含該世界的behavior_packs和resource_packs的資料夾。您可以將這些包複製到本地資料夾,以便能夠在行為和資源包選單中看到它們並將它們添加到其他世界。