教學:製作附加包/方塊

出自Minecraft基岩版开发Wiki
於 2021年9月11日 (六) 09:58 由 LPaicen對話 | 貢獻 所做的修訂 (LPaicen移动页面Manual:方块Manual:制作附加包/方块:统一教程目录)
方塊
系列教學
所屬系列
難易度
中級
前置知識
適用版本
國際版
實踐裝置
所需軟件

本教學預設讀者已掌握附加包的基本構架。教學為自訂方塊的基礎教學,關於自訂方塊的更多內容請檢視進階教學頁面。

概述

自訂方塊是在基岩版beta 1.12.0.2中的新增內容。在基岩版1.16.100.56及之後的部分版本更新中, Mojang 為自訂方塊提供了大量的介面,這使得自訂方塊的功能大大增加,不過現在仍有絕大多數的介面未被開放。

透過自訂方塊,創作者可以在遊戲中創造出屬於您的全新方塊,並透過加入屬性、元件和事件等內容賦予它許多有趣的特性。

加入方塊

加入自訂方塊首先需要了解一下自訂方塊行為部分的基本結構。

自訂方塊組態檔儲存在行為包中的 blocks資料夾下,其資料結構如下:

{
  "format_version": "1.16.0",
  "minecraft:block": {
    "description": {
    }, //描述
    "components": {
    }, //组件
    "events": {
    }, //事件
    "permutations": [
    ] //置换
  }
}

如上,方塊組態檔由描述、元件、事件與置換四部分內容構成。下面對上述四種基本內容進行了簡要闡述:

描述

描述 (description) 物件儲存了用於描述該方塊的基礎資訊,其資料結構如下:

屬性名稱 資料型別 描述
identifier 字串 設定此方塊的識別碼。須包含命名空間但不得使用minecraft:作為命名空間。(除非所編輯的方塊為原版方塊)
is_experimental 布林值 (可選)決定了該方塊是否為實驗性方塊。預設值為 false 。若此屬性值為 true ,則該方塊需開啟實驗性玩法才可獲得。
properties 物件 設定此方塊所具有的一個或多個屬性。例如:"test:block_property": [ 0, 1, 2, 3 ],其中test:block_property為屬性名稱,陣列中的參數為該方塊此屬性可能擁有的值(遊戲預設該方塊初始屬性為所有屬性陣列中的第一個參數)。陣列的參數型別可以為整數、小數、布林值或字串。
register_to_creative_menu 布林值 設定此方塊是否出現在創造模式物品欄。(基岩版1.15.0至今由於不明原因導致此API失效,待修復)

元件

元件(components)物件決定了該方塊的功能屬性,您可選擇並加入您需要的元件屬性。

元件分為一般元件和觸發器。一般元件用於定義該方塊的屬性,觸發器用於在特定條件下使方塊觸發事件。

事件

事件(events)物件儲存了該方塊可能用到的所有事件。

透過在一個事件下直接加入多個事件或使用序列間接加入多個事件可以使一個觸發器同時觸發多個事件:

範例:

"events": {
  "test_event": { //事件名称
    "set_block_property": { //第一个事件
      "minecraft:direction": 1
    },
    "run_command": { //第二个事件
      "command": "say Hello world"
    }
  }
}

置換

置換(permutations)陣列儲存了該方塊在對應條件下會置換或新增的對應所有元件。一般使用 query.block_property[注 1] 來取得方塊屬性並以此作為置換條件。

範例

現在仿照下面的範例,透過建立一個方塊的JSON行為檔案來向遊戲中加入一個簡單的自訂方塊:

{
  "format_version": "1.16.0",
  "minecraft:block": {
    "description": {
      "identifier": "example:test_block"
    },
    "components": {
      "minecraft:destroy_time": 1.0,
      "minecraft:explosion_resistance": 2.5,
      "minecraft:friction": 0.6,
      "minecraft:map_color": "#FFFFFF",
      "minecraft:block_light_absorption": 0,
      "minecraft:block_light_emission": 0
  }
}

定義資源

建立完自訂方塊後,還需要對其增添紋理、音效等內容來改變其外觀表現。首先需要對加入的紋理進行定義。

定義紋理

準備好兩張PNG格式的圖片,這裏以自訂類似原版原木的方塊作為範例:

Tutorial Block Texture
custom_log_end.png —— 「原木」頂部和底部的圖片
Tutorial Block Texture
custom_log_side.png —— 「原木」側面的圖片

將這兩張圖片分別命名並放到資源包的<RP>/textures/blocks/路徑下,這裏分別命名為「custom_log_end.png」和「custom_log_side.png」。

現在準備好了圖片,還需要對這兩張圖片進行定義。建立一個名為「terrain_texture.json」的檔案到<RP>/textures/路徑下,然後向其中加入如下內容:

{
  "resource_pack_name": "tutorial_pack", //这里填写任意名称
  "num_mip_levels": 4,
  "padding": 8,
  "texture_name": "atlas.terrain",
  "texture_data": {
    "log_end": { //定义后的名称
      "textures": "textures/blocks/custom_log_end"  //图片文件的路径
    },
    "log_side": {
      "textures": "textures/blocks/custom_log_side"
    }
  }
}

這樣就將剛剛的custom_log_end.pngcustom_log_side.png兩張圖片分別定義為了「log_end」和「log_side」這兩個名稱。

每加入一張新的圖片都需要在terrain_texture.json中定義一次,定義後的名稱將用於在以後給各種檔案或元件呼叫。

block.json

定義完了圖片,現在需要將這兩張圖片應用到剛剛的自訂方塊上,並且為它加入音效。

首先建立一個名為「block.json」的檔案到資源包根目錄下,然後向其中加入如下內容:

{
  "format_version": [ 1, 1, 0 ],
  "example:test_block": { //刚刚创建的自定义方块的标识符
    "sound" : "wood", //使用木头的音效
    "textures" : {
      "down" : "log_end", //刚刚定义的图片名称,下同
      "side" : "log_side", 
      "up" : "log_end"
    }
  }
}

現在儲存檔案並進入遊戲,將附加包加入進一個世界並進入世界,輸入如下指令: /give @s example:test_block 就可以取得剛剛加入的自訂方塊了。

Tutorial Test Customer Block
自訂「原木」被成功加入到了遊戲


  1. query.block_property 是MoLang中的一項查詢功能。