- 致编者:请牢记我们的域名wiki.mcbe-dev.net!
- 致编者:欢迎加入本Wiki的官方交流QQ群或Discord服务器!
- 基岩版1.19.31现已发布!(了解更多)
- Inner Core现已支持Xbox模组联机!(了解更多)
- 如果您是第一次来到本Wiki,欢迎注册一个账户
- 点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
- 请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
教學:製作附加包/地物/地物檔案
概述[編輯]
地物(features)檔案存放於行為包的 features 資料夾下,用於定義某個地物的生成結構。
地物檔案可以單獨存在,也可由多個子地物檔案組合而成。事實上,在Minecraft中,大多數地物都是由多個子地物鏈式組合而成的(如帶有蜂巢的樹是由樹的地物檔案與生成蜂巢的地物檔案組合而成)。
加入地物[編輯]
開發人員可在行為包的 features 資料夾下新建 json 檔案用於儲存單個地物,遊戲引擎在載入地物組態時,會預設強制將單個 json 檔案識別為一個地物組態。
所有的地物都應當在 format_version 欄位內指定對應的版本,開發人員需為每個地物定義一個形如 namespace:identifier 的識別碼,其中 namespace 為其命名空間,用於鑑別該地物歸屬於哪個行為包,命名空間的缺失會導致遊戲報錯,同時可能出現未知的錯誤;identifier 為該地物的名稱。同時,地物檔案名稱必須與其ID相同(不含命名空間)
Json結構[編輯]
地物檔案的json結構如下
{
"format_version": "1.13.0", //适配的游戏版本,最低为1.13.0
"<预制的地物配置类型>": {
"description": {
"identifier": <自定义地物的标识符>
},
//...其他属性
}
}
官方為開發人員提供了如下9種不同型別的地物組態:
minecraft:single_block_feature[編輯]
單方塊地物(Single Block Feature)用於在特定位置生成單個方塊。
成功條件:方塊被成功放置
失敗條件:方塊放置失敗
數據結構[編輯]
屬性名稱 | 變數型別 | 描述 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:single_block_feature | 物件 | 單方塊地物
當此屬性省略時,被放置的方塊將可覆蓋任意方塊。 |
範例[編輯]
放置單個南瓜方塊
{
"format_version": "1.13.0",
"minecraft:single_block_feature": {
"description": {
"identifier": "example:single_pumpkin_feature"
},
"places_block": "minecraft:pumpkin",
"enforce_placement_rules": true,
"enforce_survivability_rules": true,
"may_place_on": [
"minecraft:grass"
],
"may_replace": [
"minecraft:air"
]
}
}
minecraft:ore_feature[編輯]
礦石地物(Ore Feature)用於生成脈狀方塊羣以模擬礦藏。儘管其名稱為「礦石地物」,但實際上,任何方塊都可以作為此地物的組成方塊。
成功條件:至少一個方塊被成功放置
失敗條件:所有方塊都放置失敗
數據結構[編輯]
屬性名稱 | 變數型別 | 描述 | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:ore_feature | 物件 | 礦石地物
|
範例[編輯]
沙與安山岩中的油藏
{
"format_version": "1.13.0",
"minecraft:ore_feature": {
"description": {
"identifier": "example:oil_deposit_feature"
},
"places_block": "example:oil_block",
"count": 12,
"may_replace": [
"minecraft:sand",
{
"name": "minecraft:stone",
"states": {
"stone_type": "andesite"
}
}
]
}
}
minecraft:structure_template_feature[編輯]
結構模板地物(Structure Template Feature)可用於放置以 .mcstructure為後綴的結構。結構檔案可由結構方塊匯出得到,放置於行為包的 structures 資料夾下;引用來自其他包的結構檔案也是可行的。
成功條件:結構被成功放置
失敗條件:結構放置失敗
數據結構[編輯]
屬性名稱 | 變數型別 | 描述 | ||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:structure_template_feature | 物件 | 結構模板地物
|
範例[編輯]
放置一個「漂浮」於空氣中的熱氣球結構
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "example:hot_air_balloon_feature"
},
"structure_name": "example:hot_air_balloon",
"adjustment_radius": 8,
"facing_direction": "random",
"constraints": {
"unburied": {},
"block_intersection": {
"block_allowlist": [
"minecraft:air"
]
}
}
}
}
minecraft:aggregate_feature[編輯]
聚合地物(Aggregate Feature)用於以任意順序放置一個地物集合,集合中所有子地物的輸入座標都相同。由於無法保證所有地物一定都能被放置,其子地物不應互相依賴。
成功條件:至少一個地物被成功放置
失敗條件:所有地物都放置失敗
數據結構[編輯]
屬性名稱 | 變數型別 | 描述 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:aggregate_feature | 物件 | 聚合地物
|
範例[編輯]
在神廟周圍散佈多種不同植物
{
"format_version": "1.13.0",
"minecraft:aggregate_feature": {
"description": {
"identifier": "example:monument_with_flowers_feature"
},
"features": [
"monument_feature",
"scatter_white_flowers_feature",
"scatter_yellow_flower_feature"
]
}
}
minecraft:sequence_feature[編輯]
序列地物(Sequence Feature)用於按順序放置多個地物,這裏的順序取決於它們在陣列中的先後。放置過程中,上一個地物的輸出位置為下一個地物的輸入位置,例如:一顆樹被放置於 (0, 0, 0) ,並且該地物最後一個方塊被放置於 (0, 10, 0) ,則序列中的下一個地物的輸入座標為 (0, 10, 0) 。
成功條件:序列中所有地物被成功放置
失敗條件:序列中任一地物放置失敗。後續未被放置的地物將會被跳過。
數據結構[編輯]
屬性名稱 | 變數型別 | 描述 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:sequence_feature | 物件 | 序列地物
|
範例[編輯]
在樹冠上散佈水果
{
"format_version": "1.13.0",
"minecraft:sequence_feature": {
"description": {
"identifier": "example:oak_tree_then_apples_feature"
},
"features": [
"oak_tree_feature",
"scatter_apples_feature"
]
}
}
minecraft:scatter_feature[編輯]
分散地物(Scatter Feature)可透過設定地物生成位置相對輸入位置的偏移量和地物的生成概率來實現將地物分散到區塊中的效果。
成功條件:至少放置成功了一個地物。
失敗條件:未能成功放置任何地物。
數據結構[編輯]
屬性名稱 | 變數型別 | 描述 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:scatter_feature | 物件 | 分散地物
|
範例[編輯]
在海平面上散佈花朵
{
"format_version": "1.13.0",
"minecraft:scatter_feature": {
"description": {
"identifier": "example:scatter_flowers_feature"
},
"places_feature": "example:flower_feature",
"iterations": 10,
"scatter_chance": 50.0,
"x": {
"distribution": "uniform",
"extent": [ 0, 15 ]
},
"y": 64,
"z": {
"distribution": "uniform",
"extent": [ 0, 15 ]
}
}
}
minecraft:search_feature[編輯]
搜尋地物(Search Feature)可為指定的地物在指定範圍內遍歷搜尋一個有效的放置位置。搜尋地物會遵從 "search_axis" 屬性所設定的軸向順序在 "search_volume" 所設定的範圍內進行遍歷搜尋。例如,當 "search_axis" 值為 "-x" ,"search_volume" 在[0, 0, 0]與[5, 5, 5]之間時,該地物將會從x軸座標值較大的位置開始沿x軸座標值減小的方向遍歷搜尋,即從x=5的層級開始搜尋,當搜尋範圍內所有符合x=5的位置都檢測完畢後,它才會開始檢測所有符合x=4的搜尋範圍內的位置,以此類推,直至搜尋範圍內所有位置都被檢測完畢。其餘軸向條件下同理。
成功條件:有效的放置位置數與 "required_successes" 指定的數量相等。
失敗條件:有效的放置位置數少於 "required_successes" 指定的數量。
數據結構[編輯]
屬性名稱 | 變數型別 | 描述 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
minecraft:search_feature | 物件 | 搜尋地物
|
範例[編輯]
將蘋果附着到樹上
{
"format_version": "1.13.0",
"minecraft:search_feature": {
"description": {
"identifier": "example:find_valid_apples_feature"
},
"places_feature": "example:apple_feature",
"search_volume": {
"min": [ -3, -3, -3 ],
"max": [ 3, 3, 3 ]
},
"search_axis": "-y",
"required_successes": 3
}
minecraft:weighted_random_feature[編輯]
加權隨機地物(Weighted Random Feature)可根據權重隨機選擇並放置地物。每個地物的權重等於其權重值佔所有地物權重值總和的百分比,權重越高,該地物被放置的可能性就越大。
成功條件:選中的地物成功被放置。
失敗條件:未能成功選中的地物。
數據結構[編輯]
屬性名稱 | 變數型別 | 描述 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
description | 物件 |
| |||||||||
features | 陣列 | 儲存了所有[地物標識,權重]陣列,其子元素數據結構如下:
|
範例[編輯]
選擇並放置花的變種
{
"format_version": "1.13.0",
"minecraft:weighted_random_feature": {
"description": {
"identifier": "example:select_flower_feature"
},
"features": [
[ "example:white_flower_feature", 1 ],
[ "example:red_flower_feature", 2 ],
[ "example:blue_flower_feature", 1 ],
[ "example:yellow_flower_feature", 4 ]
]
}
}
minecraft:tree_feature[編輯]
方塊指定[編輯]
在地物中可透過如下兩種數據結構來指定方塊
變數型別 | 描述 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
字串 | 方塊ID | |||||||||
物件 |
|
你知道嗎[編輯]
- 自1.16版本開始mojang才強制要求開發人員必須為每個地物檔案的名稱定義命名空間,在此之前無需定義命名空間。
- 地物檔案必須依賴地物規則檔案才能在遊戲中發揮效用。