教學:製作附加包/生態域

出自Minecraft基岩版开发Wiki
生態域
系列教學
所屬系列
難易度
高級
前置知識
實踐裝置
WindowsAndroid
所需軟體
  • 假日創作者功能
  • 自訂生態域

引言[編輯]

生態域(Biome)是Minecraft世界中形態各異的地區,有著多樣的地理特徵、植物群海拔高度、溫度、濕度、天空及植被顏色。生態域將生成的世界劃分為一個個不同的自然環境,譬如森林、叢林、沙漠和針葉林。

透過編寫 生態域資料 您可以:

  • 變更生態域的一般形狀
  • 變更生態域生成的比例
  • 變更生態域的裝飾特徵(例如樹和草的分布)
  • 變更生態域的氣候
  • 變更生態域的生物
  • 變更生態域的霧效

接下來讓我們開始

開始[編輯]

首先,生態域都擁有一個 命名空間 ,請先了解這個內容,以為您的生態域賦予一個適當的命名空間(或者修改已有的生態域)。
下面有個 範例 以做參考:

{
  "plains": {
    "format_version": "1.12.0",
    "minecraft:climate": {
      "downfall": 0.4,
      "snow_accumulation": [ 0.0, 0.125 ],
      "temperature": 0.8
    },
    "minecraft:overworld_height": {
      "noise_type": "lowlands"
    },
    "minecraft:surface_parameters": {
      "sea_floor_depth": 7,
      "sea_floor_material": "minecraft:gravel",
      "foundation_material": "minecraft:stone",
      "mid_material": "minecraft:dirt",
      "top_material": "minecraft:grass"
    },   "minecraft:overworld_generation_rules": {
      "hills_transformation": [
        [ "forest_hills", 1 ],
        [ "forest", 2 ]
      ],
      "mutate_transformation": "sunflower_plains",
      "generate_for_climates": [
        [ "medium", 3 ],
        [ "warm", 1 ],
        [ "cold", 1 ]
      ]
    },
    "animal": {},
    "monster": {},
    "overworld": {},
    "plains": {}
  }
}

上面這段取自 官方文件 ,但已廢用。下面給出 1.13.0 以後的例子。

{
    "format_version": "1.13.0",//格式版本
    "minecraft:biome": {
        "description": {
            "identifier": "pumpkin_pastures"//id 标识符
        },
        "components": { //组件
            "minecraft:surface_parameters": {
                "foundation_material": "minecraft:stone",
                "top_material": "minecraft:grass",
                "mid_material": "minecraft:dirt",
                "sea_floor_depth": 4,
                "sea_material": "minecraft:water",
                "sea_floor_material": "minecraft:sand"
            },
            "minecraft:overworld_height": {
                "noise_params": [
                    0.125,
                    0.0625
                ]
            },
            "minecraft:climate": {
                "temperature": 0.375,
                "downfall": 0.25,
                "snow_accumulation": [
                    0,
                    0.5
                ]
            },
            "minecraft:overworld_generation_rules": {                "generate_for_climates": [
                    [
                        "cold",
                        1
                    ]
                ],
                "hills_transformation": "pumpkin_pastures_hills",
                "shore_transformation": "pumpkin_pastures"
            },
            "overworld": {},
            "pumpkin_pastures": {},
            "animal": {},
            "monster": {}
        }
    }
}

修改已有生態域[編輯]

生態域定義檔案可以作為初始定義或覆蓋,這取決於行為包的層級。

生態域規範[編輯]

接下來我們將簡單的介紹有關定義生態域的json檔案的基本規範。(注意:json檔案在 行為包/biomes 下,且一個json檔案對應著 一個生態域)
在json檔案中,您首先能看到的是format_version屬性(這裡將關鍵字譯成屬性),即 版本規範 ,接下來的內容都是基於 format_version ≥ 1.13.0 的情況下,進行的。
接下來我們可以看到另一個頂層屬性minecraft:biome ,它是極其重要的,接下來我們的所有操作都在這個屬性下進行,我們來看一下它的基本格式

"minecraft:biome": {
	
}

minecraft:biome這個頂層屬性下,有 description 這個屬性,目前這個屬性下僅有 identifier 屬性,他便對應著這個生態域的 命名空間 ,接下來請看下面這個例子

"description": {
	"identifier": "wiki:test_biome"
}

這裡有很多注意點:

  • identifier 屬性不允許省略 name: ,就像上面例子中不能省略 wiki:,但在後面很多地方允許您省略 name:(注:如果您是修改原版的生態域,可以省略 minecraft:)
  • identifier 不能對應多個 值 ,也就是說,一個json檔案僅能定義一個 生態域
  • identifier 所對應的值 必須與檔案名相同

minecraft:biome 屬性下還有 components 屬性,即元件,這是生物群落定義的核心。在這裡,定義生物群落的 各種特點

"components": {
	
	"minecraft:ignore_automatic_features": {}
}

要注意的是:元件中的所有內容始終是 物件屬性 ,儘管是那些看起來要被賦予 布林值 的 屬性,例如:minecraft:ignore_automatic_features 不能被賦予 ture 或者 false 的 布林值,而是賦予一個空物件

"components": {
	
	"minecraft:ignore_automatic_features": {}
}

同時,元件允許出現相同的 屬性名 ,像下面這個例子,同時出現了 兩次 minecraft:overworld_height 屬性,但是遊戲僅採用最後定義的 屬性 ,也就是第二個 minecraft:overworld_height 屬性,儘管 noise_type 的覆蓋層級比 noise_params 更高,所以這樣應該儘量減少重複的 屬性名

"components": {
	
	"minecraft:overworld_height": {
		"noise_type": "ocean"
	},
	"minecraft:overworld_height": {
		"noise_params": [1.25, 0]
	}
}

還要注意的是:當在生態域定義中使用元件時,必須提供其所有必需的屬性;如果沒有提供,將拋出錯誤,生態域將無法生成。 除了用於建立生態域的元件之外,components 屬性下還需要 標籤

"components": {
	
	"overworld": {},
	"pumpkin_pastures": {},
	"animal": {},
	"monster": {}
}

標籤看起來像空元件,它同樣需要滿足 正則運算式 。標籤允許創作者自己定義,大部分情況下,您應當使用範例中所提供的標籤,或者使用 特定的標籤 (這個意思是您不能以minecraft: 開頭,以防與 mojang 未來的更新重複,最好應該像賦予 命名空間 一樣,建立一個標籤)。

繼承[編輯]

生態域定義檔案可以作為初始定義或覆蓋,這取決於行為包的順序。
繼承 僅會繼承 components 屬性中的標籤和元件。但不幸的是,任何元件都需要宣告所有 參數 ,這意味著重寫生態域的時候,重新宣告所有的元件可能是更好的選擇,也就是說轉用 覆蓋 而非 完全繼承。
要注意的是:無論是 完全繼承 還是 覆蓋 的情況下,繼承 總會出現,它是不可避免的,除非新定義干擾了以前的定義,也就是所謂的 表面調整。

覆蓋[編輯]

自訂生態域[編輯]

群系生成[編輯]

群系的生成有幾點是您要明確的:

  • 選擇群系生成在哪個 維度
  • 選擇群系在特定的 插槽 中,起到怎樣的作用
  • 採用何種 種子 以使 世界生成器 透過適當的 噪聲 生成您的群系

先簡單介紹一下 維度:

  主条目:维度

維度(Dimension)為Minecraft中平行世界的稱謂。包括:

  • 主世界 - Minecraft的起始維度與主要維度。
  • 地獄 - 透過在主世界中建造地獄傳送門到達的地獄風格的維度。
  • 終界 - 整個維度都是由終界石構成的浮天空島世界,可透過進入要塞中的終界傳送門到達。

目前,終界 暫時不允許加入和刪除已有的 生態域 。所以我們只能對 地獄主世界 進行操作,先從主世界講起。

主世界[編輯]

首先要明確一個重要的地方,何謂 種子(此處提供我的世界wiki的頁面)
當遊戲準備生成一個世界時,遊戲會呼叫一個被稱作 柏林噪聲 的算法,生成一個偽隨機數,這個數決定了世界的樣子。但由於偽隨機算法的性質,若算法初始輸入的數值(種子)是相同的話,算出的最終結果是相同的。這就是種子的意義:使用相同的種子可以生成出多個相同的世界。
當世界生成算法更新(通常是加入新的生態域)後,相同的種子就不會生成相同的地形。這也是某些不同的遊戲版本中,相同的種子無法產生相同的地形的原因。
再簡單介紹一下 插槽:
這裡插槽的指的是世界基本分布方式(這裡只介紹主世界),包括

若將世界比作一張大版,插槽就將這張大板分割成了各個部分,生態域都應該穩穩的插在插槽中,以使世界能夠正常生成
在主世界中採用 地區 , 氣候 和 權重 這三個值來生成群系

//下面这些本质上是个组件
"minecraft:overworld_generation_rules": {
	"generate_for_climates": [
		["cold", 1]   //温度类型,1是权重
	],
	"hills_transformation": "pumpkin_pastures_hills",
	"shore_transformation": "pumpkin_pastures"
}

在遇到高山等地形時,上面這個元件還能幫助 生態域 轉換自己的型別。要注意的是:它們也可以把自己註冊成基本的生態域(已有的基本生物情緒包括土地高山等),並宣告自己的子群系
了解了這些後,我們就可以開始了解下面的內容了。

氣候[編輯]
"generate_for_climates": [
	["frozen", 2],
	["cold", 1]
]

所有生態域都擁有溫度(Temperature)、降水(Downfall)和降水型別(Precipitation)三個基本屬性,這些屬性組合在一起就是 氣候
這裡我們先看 溫度 ,這裡的溫度與一般情況下的極為不同,在現實世界中,我們直接用數字表示溫度,但現在你將會看到5種不同意義的溫度,這些溫度插槽表示著群系能在哪些溫度地圖下產生

溫度型別 屬性名
冰凍 frozen
寒冷 cold
一般 medium
不熱 lukewarm
溫暖 warm
  不热 的温度只适用于海洋和深海。土地只使用其他4种温度类型。

氣候槽和地區槽形成了獨有的插槽地圖(指同型別插槽所占有的空間),這些地圖相互重疊,形成了 噪音交又點 (這個我們之後會講到) ,換句話說:生態域只能在這些 噪音交叉點 上生成,基本氣候插入這些 點 ,然後它的子群系就會申請更精細的形狀,但是這麼多群系,難道全部給它們生成嗎?所以就需要權重來幫忙,權重規定了 生態域可以爭奪的空間
關於 權重 ,您需要注意的點:

  • 氣候槽和地區槽是無法組態和修改的,這導致群眾成為了您唯一修改 生態域 大小的方式
  • 權重應該是一個整數值,您也可以給它提供幾位小數,但是遊戲會將小數向下取整
  • 權重應該是一個自然數,如果您給它設定為負數,它的情況將會跟設定為零的時候一樣
  • 權重也同樣在 generate_for_climates 之下(這裡的意思是說溫度後面的數字即為權重,就像上面的json例子一樣),通常來說將 所有權重 修改為 0 ,應當可以使目前群系消失(無法生成),但是遊戲有個回退系統,所以此方法無效

要注意的是:

  • 在遊戲底層中,氣候插槽比地區插槽更早考慮,也就是說:一個生物體系會先考慮這個群系是否滿足 氣候 要求,再考慮是否滿足 地區 要求
  • 如果同一個群系生成在兩個相鄰的溫度插槽時,這兩個群系會合成一個
  • 首次載入時,玩家定然會在 平原 , 叢林 ,針葉林 , 黑森林 , 平原 , 森林 及它們的變種 誕生 ,如果它們不存在,遊戲將會無休止的尋找 合適的 生成 位置
  • 與地區插槽不同,一個生態域能註冊多個 氣候插槽
//平原生物群系的范例
"generate_for_climates": [
	["cold", 1],
	["medium", 3],
	["warm", 1]
]

上述講的是關於氣候的 溫度 選項,其他選項可以在玩法中找到。

地區[編輯]

遊戲中的主世界由多個地區分割而成,這些地區充當了放置生態域的插槽,一般情況下會明顯的被海洋和陸地分割。
接下來我們將介紹多種 地區槽 型別。
土地
與真實的世界不同,主世界的大部分是陸地。共有56個 生物群落 屬於它,其中許多是變異或丘陵形式的基礎生物群落。

共有土地
"generate_for_climates": [
	["cold", 1]
]

這是遊戲內最大的 槽 ,占有了大部分 土地,除非另有標記,不然所有的自訂生物群群系 都將插入這個 槽

 当所有属于共有土地的群系都被特殊的方法清除后,稀有土地的群系就会占据原来的共有土地,如果稀有土地的也被清除,游戏将会从备用表中直接提取
稀有土地
"minecraft:overworld_generation_rules": {
	"generate_for_climates": [
		["medium", 1]
	]
	
},

"rare": {}

稀有土地槽是主世界中為生物群落預留的一些大而罕見的區域。當生態域擁有 rare 標籤時,生態域便可以生成在 稀有土地槽 中,要注意的是:

  • rare 標籤的層級比 ocean 標籤低(這兩個標籤不共存)
  • 稀有土地槽 目前擁有的群系中不包括氣候有 frozen 溫度的群系,但仍然允許您將擁有這種氣候溫度的群系,加入進稀有土地,像下面這個例子
"minecraft:overworld_generation_rules": {
	"generate_for_climates": [
		["frozen", 1]
	]
},

"rare": {}

海洋
主世界的其餘部分都被海洋所覆蓋,事實上海洋這個詞不太恰當,因為看起來像河和湖泊的也是海洋。使用 ocean 標籤可以將生態域插入海洋,您要注意的是:

  • 海洋通常分為淺海和深海,兩者的比重大致相等。分散的島嶼可以在海洋區域內生成。
  • 一般地,有10種海洋群系
基本海洋
"minecraft:overworld_generation_rules": {
	"generate_for_climates": [
		["lukewarm", 1]
	]
},

"ocean": {}

基本海洋約占海洋面積的一半。該區域旨在供深度相對較淺的水生生物群落使用,您要注意的是:

  • 基本海洋不能用deep標籤來開槽


深海

深海採用 deep 標籤,但 deep 的標籤必需與 ocean 標籤一起使用。

"minecraft:overworld_generation_rules": {
	"generate_for_climates": [
		["frozen", 1]
	]
},

"ocean": {},
"deep": {}

島嶼
島嶼本身不是一個主生態域,是一個子生態域。您可以先了解什麼是島嶼:

  从概念上讲,岛屿与陆地区域的次级生物群落没有什么不同,它看起来更像是丘陵,但又并非是山丘。海洋中的岛屿才算真正意义上岛屿
"minecraft:overworld_generation_rules": {
	"hills_transformation": "tropical_island"
},

上面指的是陸地上的島嶼(即所謂的山丘)

"minecraft:overworld_generation_rules": {
	"hills_transformation": "deep_ocean"
},

上面指的是海洋中的島嶼(有時可能會成為海岸)
蘑菇

  下面的蘑菇特指包含蘑菇的生物群系

有關蘑菇最有名的生態域應當是蘑菇地,可怕的是,有關蘑菇的生態域幾乎是無法刪除的。當你刪除主世界其他的群系之後,蘑菇就會覆蓋掉這些
因為蘑菇的這種特性,如果你在一個世界中不想要蘑菇,使它變得跟海洋特別像,可能是唯一的方法。

"minecraft:overworld_generation_rules": {
	
	"hills_transformation": [
		["overgrown_forest_hills_short", 4],
		["overgrown_forest_hills_tall", 1]
	],
	"shore_transformation": "rocky_shore"
}



現在主世界所有的 主生物體系 ,已經介紹完畢,接下來我們將介紹 子生態域型別 。
首先一個主生態域可以透過以下的 生成規則轉變 來宣告自己的子生態域:

型別轉變 生成規則
"hills_transformation"
突變 "mutate_transformation"
"river_transformation"
海岸 "shore_transformation"

子生態域也可以宣告自己的子生態域,但是不可以同類嵌套,比如說山不能再宣告山,但可以宣告 突變山。下面我們列舉它們的使用方法:

子生態域宣告
型別 注意 範例
它們通常擁有著高海拔,在生態域中很常見,雖說它們的名字是丘陵,但是他們不一定必須要生成丘陵,它們也可以用於生成天山湖,火山口等生態域。它們的特點是小而常見
"hills_transformation": "pumpkin_pastures_hills"
突變 這是一種大而罕見的群系。要注意的是,突變只能在子群系中宣告,比如說您可以宣告突變丘陵,但是您不應該期望它可以在主生態域中生成。
"mutate_transformation": "mushroom_forest_dense"
//突变丘陵
"hills_transformation": "mangrove_forest_hills"
//另一种形式
"mutate_transformation": "mangrove_forest_hills_mutated"
河流 河流生態域的生成是極其危險的,所以建好一個生態域只擁有一種河流,這在接下來我們可能會詳細介紹
"river_transformation": "ivory_shallows"
海岸 跟河流一樣,海岸有點特別,它既可以屬於陸地生態域,也可以屬於海洋生態域(加入ocean標籤)。一般用沙或者石頭裝飾,它能夠用來生成大而淺的湖泊,或者陸地與海洋的過渡
"shore_transformation": "lava_fields"

地獄[編輯]

"minecraft:nether_generation_rules": {
	"target_temperature": 0.5,
	"target_humidity": 0.75,
	"target_altitude": -0.25,
	"target_weirdness": 0,
	"weight": 0.1
}

我們必須對您做出警告,地獄雖然比主世界擁有更多的功能控制,但這是以更高的複雜性做代價的,生態域都需要更為強大的數學系統。

基礎[編輯]

與主世界不一樣,主世界僅擁有氣候與地形兩種槽,它卻擁有4種(並且槽與槽之間的區分更加明顯):

型別
溫度 target_temperature
濕度 target_humidity
海拔 target_altitude
幽冥 target_weirdness
 请注意:上面这些内容并不代表着生物群系的实际属性,如"target_altitude"值的提高,并不会使气候变暖,它也可以代表着腐败性。所以在特殊情况下,我们可以重新声明他们的表示含义,甚至忽略他们。

這些target槽的值被限定在-1到1之間。

更多考慮[編輯]

群系形狀[編輯]

塊型別[編輯]

高度圖[編輯]

噪聲[編輯]

表面生成[編輯]

表面調整[編輯]
噪聲交叉點[編輯]

玩法[編輯]

玩法是一個抽象的意義,下面內容包括生態域的 迷霧實體地物 ,裝飾。

特徵[編輯]

外部特徵[編輯]
不可變特徵[編輯]
洞穴(內部特徵)[編輯]

生物[編輯]

標籤[編輯]

參考[編輯]

  1. 官方文件:生態域
  2. 我的世界wiki:種子(世界生成)
  3. 我的世界wiki:噪聲生成器
  4. 我的世界wiki:維度
  5. 我的世界wiki:生態域