生成(Spawn)是指玩家和生物在世界中被創造的過程和行為。
玩家的生成
世界生成
世界生成區域示意圖。白色表示單人遊戲生成區域,藍色代表多人遊戲生成區域,黃色代表世界重生點。
當伺服器處於除冒險模式以外的其他模式下時,新玩家最初將在世界重生點周圍的小片區域內生成。區域預設為20×20格,但能透過spawnRadius遊戲規則在單人或多人遊戲中變更。一旦死亡,玩家將在該區域內重生,除非他們的個人重生點已經被變更。
當玩家生成時,出生在重生點的X軸與Z軸的相應位置的最高處,即使這樣的生成算法會把玩家放到最大建築高度的上面。這個區域將不考慮實體生成在什麼可怕的地方,因此,若在X軸和Z軸的位置沒有方塊,就可能會導致玩家生成在虛空上方。
世界重生點也決定了永久載入的重生點區塊的中心。
世界重生點可透過/setworldspawn變更。
冒險模式
當伺服器的預設遊戲模式被設定為冒險模式(透過使用server.properties)時,就會忽略正常的生成機制,並直接在世界重生點上生成玩家。這包括了XYZ軸座標,即使沒有阻擋及上方有方塊存在。
如果Y軸不是一個有效的生成區域直到伺服器找到有效為止,大多數玩家可以生成在Y=256。如果生成區域中間是空氣,玩家會生成在空氣中,甚至在出現空隙(如果有)的情況下時會掉進虛空裡。
個人生成
玩家可以透過在床上睡覺或使用/spawnpoint指令來變更重生點。如果玩家死亡時個人重生點被阻擋(或被破壞等),他們將被迫重生在世界重生點。
在床上睡覺允許對外界干擾,但如果原來的重生點被阻擋,玩家將嘗試在床附近的其他方塊上重生。
自然生成
許多生物在區塊建立時生成,這個事件只能在每個區塊內只能發生一次,且不受/gamerule doMobSpawning指令的影響。
動物的生成
一頭牛在地圖中的樹葉中生成並且不能逃出,這是森林山丘地區常見的現象。
大約十分之一的新生成區塊中將包含生物,通常是一群最多到4隻的同種動物。它們總在該區塊柱狀區域中最高的有效方塊生成,換言之就是可以看到天空的地方。此方塊必須是不透明的方塊而且其上兩個方塊必須是透明方塊。方塊上面並不需要有草也不需要被照亮(生物生成也是同理)。
動物並不會在沙漠和海洋生態域中生成(兔子和魷魚除外)。兔子只能生成在沙漠、積雪的平原、針葉林、巨木針葉林、和積雪的針葉林生態域中。哞菇只會生成在蘑菇地生態域中。
動物生成的隨機性來源於種子碼,這意味著具有相同種子的世界中區塊內將在相同的地方生成相同動物。
其他生物
下列生物在/gamerule doMobSpawning被設定為false仍會生成。
- 村民作為村莊生成時的一部分生成。
- 殭屍村民作為殭屍村莊生成時的一部分生成,它們永遠不會消失。
- 單個女巫小屋在生成時攜帶1個女巫。
- 3個遠古深海守衛作為海底遺蹟生成時的一部分生成。
- 終界龍作為終界生成時的一部分生成。終界龍可透過在出口傳送門上放置終界水晶重生。
- 界伏蚌作為終界城的一部分生成。
- 衛道士和喚魔者作為綠林府邸的一部分生成。
- 1個村民和1個殭屍村民作為雪屋地下室的一部分生成。
- 一些沉屍作為海底廢墟或沉船的一部分生成。
- 鐵魔像作為掠奪者前哨站和村莊的一部分生成
生成週期
Java版
生物大致劃分為四種:攻擊型,被動型,水生型(也就是魷魚和魚)和環境型(也就是蝙蝠)。攻擊型生物有一個每遊戲刻(1/20秒)一次的生成週期。被動型和水生型生物只有每400刻(20秒)一次的生成週期。因為這一點,攻擊型生物可以在任何時候生成,而動物生成則非常少。大多數生物在區塊生成時一同生成。
生物生成通常情況下在玩家周圍15*15區塊(240*240方塊)內。當在多人遊戲中,攻擊型生物會在任意一名玩家的上述距離之內生成。然而,遠於所有玩家128方塊距離之外的怪物會立即被清除(參見清除一節),所以攻擊型生物生成區域被有效地限制在以每一玩家為中心的半徑128方塊內的球形範圍裡。生物容量為所有玩家共享,無視玩家位置。
生物容量
生物容量與適合生成的區塊總數直接成比例。要計算容量的話,生成區域在每一方向上均擴展一個區塊,所以有17*17區塊的大小,然後總的區塊數被代入到下式中:
容量=常量*区块数/289
每一種生物均具有自己的容量計算和公式中不同的常量值:
攻击型 = 70 被动型 = 10 环境型(蝙蝠) = 15 水生型(鱿鱼) = 5
在單人遊戲模式下,區塊計數總為17*17=289,那麼各種生物的容量也就是上面列出的數值。在多人遊戲中,在多個玩家範圍內的區塊只被計算一次,所以玩家越分散,更多地區塊會被覆蓋且會有更高的容量。
在每次生成週期的開始都會檢查一次容量。如果存活的生物數量超過它的容量,整個生成週期就會被跳過。檢查生物和計算生物容量的區域時相同的,生成區域被每個方向上的1個區塊拓展。
成群生成
一組生物生成的舉例。這一41*1*41生成區域被標記為藍色(沒按比例)。黃色輪廓表示在檢查環境後事實上生物可以生成的地點。注意生物可以在火把和階梯方塊內生成。但是它們不能在玻璃方塊的上面生成因為它是透明的。紅色立方體是這一組生物的中心,必須是空氣方塊,不過其上下可以為任意方塊。
單獨一個生物生成地點的要求。
在每一生成週期中,會在每一個合適的區塊中進行一次生成一組生物的嘗試。該區塊內選擇一個隨機地點作為這組生物的中心點。為生成這組生物,中心方塊對水生生物而言必須是水方塊,對所有其他生物來說則必須是空氣方塊。注意在後面的情形中,它一定得是空氣方塊。任何其他方塊,哪怕是一個透明方塊都會阻止整組生物的生成。
如果該組位置合適,會在以中心方塊為原點41*1*41的範圍(就是41*41格大小的方型,有1格高的區域)內進行12次嘗試以生成多至4個的生物(狼是8個,地獄幽靈是1個)。生物將會在這一區域生成其身體的最下部分。在每次生成嘗試中,會在這一區域中隨機選擇一個方塊的地點。儘管生成區域能擴展到中心21格之外,但是隨機選出的地點強烈地向該組的中心集中。大約有85%的生成將會在該組中心的5格以內,99%會落在10格以內。
組內所有的生物都是相同的種類。在該組第一次生成嘗試時從該地區所適合生成的種類中隨機挑選一種以決定整組的種類:
生成條件
每次獨立的生成嘗試只有在以下的所有的條件都符合時才能成功:
- 生成方塊在周圍24格內(球體)不能有玩家或者玩家重生點。
- 單種生物的數量少於該生物的容量。
- 如果生成的是蝙蝠,則...
- 生成的方塊的高度必須為62或更低。
- 如果真實世界內的日期為10月20日至11月3日,亮度等級為7或以下,其餘時間為4或以下。
- 如果生成的是動物(山貓和哞菇除外),則...
- 生成的方塊的下面必須是草。
- 生成的方塊的周圍亮度必須是9或者更高。
- 如果生成的是一個攻擊性生物(下面提到的除外)生成在主世界,則...
- 如果生成的是史萊姆,則...
- 如果生成的是地獄幽靈,則...
- 用於攻擊型生物的亮度檢查機制不適用於此。
- 有95%的機率生成失敗,因此生成機率只有正常情況下的1⁄20。
- 如果生成的是烈焰使者,則...
- 用於攻擊型生物的亮度檢查機制不適用於此。
- 生成亮度必須為11或更低。
如果上述所有條件均滿足的話生物就生成了。當4個生物生成(或者是8隻狼、1隻地獄幽靈和3隻兔子)或完成12次嘗試(此條件優先)後該組即告生成完成。終界龍和凋零怪不適用上述規則。
註解
- 由於普遍性的方塊檢查,除了魷魚之外幾乎所有生物必須生成於一個上方至少帶兩格無障礙空間的不透明方塊的頂端,甚至地獄幽靈等也是如此。然而如果上面一格的方塊是透明的話(譬如一個玻璃方塊或活塞),矮個子的生物可以在一格高的空間裡生成。
- 單個的生物可以在告示牌、壓力板和其他的透明非固體方塊中生成,但一組生物不可以。它們需要一個完全空白的方塊作為中心。因為一組生物都是在同一高度生成,這就需要在一個平坦的表面上有一些空氣方塊以允許生物生成,且空氣方塊越多就允許生成更多。
- 通常情況下,室外有空氣的建築比地下室能在室內生成更多的生物,因為在室外生成的群組可以在室內生成生物。
- 生物容量在很短的時間內就趨於飽食。因為這一點,透過讓生物聚集於一個生成空間裡(比如生怪塔)可以防止生物在室外生成。
- 容量的存在也意味著生物死得越快,生成得就越快。
- 因為只在生成週期的開頭檢測(生物)容量,所以當一次週期生成大量生物時,容量可被戲劇性地超出。這在魷魚身上經常發生,它們容量正常情況下很少(單人遊戲中是5),但是在一個有很多水的地方可以一次週期內生成很多。
- 如果玩家的視野距離或多人遊戲中的伺服器視野距離為9或更低,則怪物生成數量會嚴重減少(或者它們消失太快),並且可能導致玩家根本沒有遇到怪物。請將視圖距離設定為10或更高,以確保怪物正確生成。
基岩版
基岩版的自然生成機制只和Java版共享一小部分。在基岩版中,主要有兩大類自然生成機制:成群生成和結構生成。結構生成是指生物作為結構的一部分生成,例如地獄要塞和女巫小屋等等。成群生成占據其他種類的自然生成,包括單獨生成(即不包括2個或更多)。兩種機制都遵循相同的生成條件和生物容量規則。
生物生成在以玩家為中心的6個區塊的圓柱形範圍內,在每個區塊內評估。如果模擬距離小於6個區塊,則模擬距離內的區塊才能生成生物。生物生成的算法有1⁄200的機率嘗試在每個區塊每刻中執行。
生物容量
主要有兩種影響生成的生物容量:全局生物容量和生物密度容量。全局容量被設定為200,無視難易度。全局容量僅影響自然生成,不影響透過繁殖、生怪蛋、/summon指令、怪物蛋和其他類型的生成。生物在常載入區域(玩家周圍或使用指令/tickingarea)內才會算進全局容量。生物也能擁有獨自的容量:
| 生物 | 地表容量 | 洞穴容量 |
|---|---|---|
| 地獄幽靈 | 0 | 2 |
| 苦力怕 | 5 | 無限制 |
| 其他 | 無限制 | 無限制 |
生物密度容量。密度容量限制每種或每分類的生物在9×9方形區域內每區塊是否有資格生成生物。常載入區域外的生物會被算進生物密度容量。密度容量能被分為2種不同的分類:地表生物和洞穴生物彼此相互獨立。
生物有4種分類:環境、動物、敵對生物和水生生物。每個維度內每個分類的密度容量以及生物位置如下:
| 分類 | 位置 | 主世界 | 地獄 | 終界 |
|---|---|---|---|---|
| 環境 | 地表 | 0 | 0 | 0 |
| 洞穴 | 2 | 0 | 0 | |
| 動物 | 地表 | 4 | 0 | 0 |
| 洞穴 | 0 | 0 | 0 | |
| 敵對生物 | 地表 | 8 | 0 | 10 |
| 洞穴 | 8 | 16 | 8 | |
| 水生生物 | 地表 | 4 | 0 | 0 |
| 洞穴 | 0 | 0 | 0 |
生成條件
以下規則適用於所有生物:
一些附加規則適用於指定分類的生物。
水生生物:
- 不能離開流體生成。
敵對生物:
- 亮度大於7時不能生成。
非水生生物:
成群生成
成群生成的發生有兩個階段:首先嘗試生成地表的生物,然後嘗試生成洞穴裡的生物。在生成前,生物的密度容量基於目前區塊周圍的9x9方格區域計算。生成開始於目前區塊評估後選擇隨機的X和Z座標。Y軸座標的選擇為由世界高度開始,向下尋找固體方塊以及其上面的一個非固體方塊。找到的第一個這樣的方塊被認為是地表,算法將嘗試生成一群地表生物。然後算法繼續向下搜尋下一個固體方塊,以及其上方的一個非固體方塊。當找到滿足標準的方塊時,算法將嘗試生成一群洞穴生物。洞穴生成會一直進行,直到Y軸到達世界的底部,而且一群洞穴生物生成後也不會停止。
地表生物和洞穴生物會嘗試透過以下步驟去決定生物的生成和生成時的數量:
- 將一種同類的隨機生物集合起來。
- 如果生成位置是流體,則會將一種同類的隨機水生生物集合起來。
- 如果亮度大於7,且生成位置上面沒有其他方塊,生成區域為草地,則會生成隨機的被動型生物。
- 否則會生成敵對型生物。
- 選擇生物的隨機數量,每種生物有自己的最大值或最小值數量,生成的數量由難易度決定。
- 確保生成位置有合適的生成條件。
- 根據全局生物容量去限制生物生成數量如果生物數量達到或超過容量,則不會生成生物。
- 對於每個生物的生成,會檢查生成是否超過生物密度容量上限。
- 如果生成的生物沒有超過上限,然後可以使用公式計算生物生成的機率:
(生物密度容量 - 当前生物密度) / 生物密度容量
- 如果生成的生物沒有超過上限,然後可以使用公式計算生物生成的機率:
- 最後,生物會生成於地圖裡。
- 有時生物的生成會失敗,例如生成位置被牆或方塊阻擋。
其他類型的生成
- 牛、雞、豬、羊、哞菇、兔子、村民、山貓、駱馬、貓熊、貓和狼可以進行繁殖。除村民之外,這些繁殖方式需要玩家飼餵它們。
- 一枚扔出去的雞蛋有1/8的機率生成一隻小雞,其中又有額外1/32的機率從一枚雞蛋中生成4隻幼年雞,所以共計有1/256的機率扔一隻雞蛋獲得4隻幼年雞。
- 雪人、鐵魔像和凋零怪可由玩家使用正確的生成結構而生成。鐵魔像也可以在有許多村民的村莊裡生成。
- 鱈魚、鮭魚、河豚和熱帶魚可透過倒空對應的魚桶生成。
- 怪物蛋在被破壞或附近的蠹魚被攻擊時會生成一條蠹魚。
- 殭屍可以在午夜無視生大多數生成限制而生成,導致殭屍圍城事件發生,事件甚至可以在蘑菇地生態域和
/gamerule doMobSpawning為false時發生。遊戲將嘗試在17x7x17區域內進行10次嘗試,該區域以村莊半徑內的一個區塊為中心,Y軸與村莊中心的值相同。 - 殭屍豬人可以在主世界的地獄傳送門生成,無視玩家和亮度等級。
- 終界蟎在玩家投擲終界珍珠後隨機生成。
- 中型和大型的史萊或岩漿立方怪被殺死時會生成更多同類,不過要小上一個尺寸。
- 當豬被閃電擊中後,它會轉變為殭屍豬人。
- 當村民被閃電擊中後,它會轉變為女巫。
- 當苦力怕被閃電擊中後,它會轉變為閃電苦力怕。
- 生怪箱會在周圍生成其裡面的生物。自然生成的生怪箱會生成以下生物:殭屍、骷髏、蜘蛛、洞穴蜘蛛、蠹魚和烈焰使者。但可以對生怪箱會使用指令或生怪蛋來生成其他怪物。它們和生成週期有相同的生成條件,但敵對生物可能會在它們下面沒有方塊的情況下生成。
- 在創造模式下,玩家可以用生怪蛋來生成大多數生物。當用此法生成生物時,會忽略所有的常規生成需求,如光照等級和方塊類型等。
- 使用
/summon指令可以生成任意實體。
清除
Java版
各種生物生成範圍圖解。
敵對生物(治癒中的殭屍村民除外)、蝙蝠、魷魚、山貓(存在了2400刻後)、雞騎士的雞和其他的敵對生物包括未馴服的狼
- 生物其半徑32格內沒有玩家的情況下超過30秒,就有1⁄800的機率在每刻(0.05秒)被清除,即每秒2.47%的機率。因此,這些生物的半衰期為27.73秒(最初的30秒過後)。
- 生物在其半徑128格內沒有玩家的情況下立刻被清除。
- 請注意,這是一個歐幾裡德球體,而不是從上到下的圓柱體和taxicab球體(類似於八面體)。例子:一個生物在0/y/0會在30秒(如上)內仍然存在,如果玩家移動到65/y/65(真實距離91.9格)之後。但玩家移動到91/y/91後(真實距離128.7格)生物會立刻被清除。
- 生物所在的區塊必須保持活躍,直到生物被清除為止。否則生物會被凍結,直到玩家接近這個區塊並使其活躍為止,並可能再次找到同樣的生物。因為單個區塊呈方體狀,而清除所需的距離是歐幾裡德球體,與X/Z軸相比,在對角線方向上移動,並且可能需要一些垂直距離以幫助保持區塊活躍,使怪物被清除。此外,改進顯示距離也有作用,因為這會使遊戲載入更多的區塊。
- 所有敵對生物(包括手持物品的)會在難易度設定為和平時被清除,無視玩家與其的距離。
- 在多人遊戲中,沒有玩家線上時不會發生生物清除現象。
- 被命名牌命名的敵對生物不會被清除,但透過被命名的生怪蛋生成的生物仍會照常被清除。
- 如果敵對生物手持或穿戴任何被玩家給予或從地上掉落的物品,則它們不會被清除。
- 雞騎士的雞會遵循殭屍的清除條件而和殭屍一同被清除。
基岩版
基岩版的實體清除根據每區塊每刻評估而發生。實體在每刻有1⁄50的機率在每個區塊內被清除。清除發生時,區塊內會隨機選擇實體作為目標,並透過以下條件被清除:
- 實體在距離玩家54格以外。
- 亮度等級低於8.
- 對於敵對生物,亮度必須大於8,且對於地表的敵對生物來說必須為白天。
- 實體存在時間過長。
- 該實體沒有持久性。
持久性
在基岩版中,帶有持久性的實體不會被清除,實體的持久性透過下列情況產生:
- 與玩家互動。
- 被玩家騎乘。
- 被命名牌命名。
- 被食物誘惑。
- 被繁殖,以及因繁殖而生成。
- 被馴服。
- 嘗試攻擊玩家。
- 被玩家攻擊。
- 被玩家接觸。
- 透過生怪箱生成。
- 透過生怪蛋生成。
- 透過
/summon指令生成。 - 治癒中的殭屍村民。
- 骷髏和骷髏馬作為骷髏陷阱的一部分生成。
- 界伏蚌作為終界城的一部分生成。
- 女巫作為女巫小屋的一部分生成。
- 村民或殭屍村民作為雪屋的一部分生成。
- 殭屍村民作為殭屍村莊的一部分生成。
- 衛道士作為綠林府邸的一部分生成。
下列實體總是擁有持久性:
歷史
| Java版Classic | |||||
|---|---|---|---|---|---|
| 0.24 SURVIVAL TEST | 生物現在成群生成。 | ||||
| ? | 生成區域曾經是17*17個區塊而不是15*15。該區域被縮小了,但是舊的大小仍然被用於計算生物容量。 | ||||
| 並不總是能透過防止生物在其他地方生成來夠驅使它們聚集於一個生成空間裡。一些更早的關於「生成」的資料或許可以作為參考。 | |||||
| 大量的空餘空間曾經能促進一般地區的生物生成。這一點對於一個小一點的規模仍然有效,且由於成組生成的機制而只對水平分布有效。 | |||||
| Java版Alpha | |||||
| v1.2.0 | ? | 0,0區塊(X為0-16且Z為0-16)總是首先進行生物生成判定。如果一個人在此區塊建了一個暗室,那所有的生物都會生成在其中,而導致其他地方都沒有。 | |||
| Java版Beta | |||||
| 1.8 | ? | 世界建立時的生成位點即使不是在沙灘也總是在沙上。 | |||
| Java版 | |||||
| 1.0.0 | ? | 在此之前,生成只被光照等級所決定而不是目前區塊的屬性。攻擊型生物在光照等級7或更低的地方生成而被動型生物在光照等級9或更高的地方生成。因為這一點,儘管在有光照的地方仍有很小的機率生成攻擊型生物,歸因於它們在無光照的空中生成。另外如果你帶了很多火把下礦,然後返回,你很可能將會看到你的房子裡面有一些牛、豬、雞或羊在裡面到處跑。 | |||
| 1.1 | 12w01a | 對玩家的生成位置的有效生態域進行了調整。玩家現在能生成在森林、平原、針葉林、疏林丘陵和針葉林丘陵裡。 | |||
| 1.2 | 12w03a | 玩家的重生點現在能被定位在叢林和叢林丘陵生態域裡。 | |||
| 1.8 | 14w25a | 成群生成的大多數限制被移除。在此之前必須為空氣或者任意透明方塊。 | |||
| 1.9 | 15w46a | 當生成敵對生物時,要求生成點的方塊不能阻止生物的移動(以前只是不透明的),不能是任何類型的鐵軌。 此外,上面的方塊不能再是液體。 | |||
| 15w51a | 加入spawnRadius遊戲規則以控制玩家能在距離世界重生點多遠的位置重生。 | ||||
| 1.9-pre2 | 生成機制調整,「12次嘗試」現在是「4次嘗試」,所謂的「四次」是1-4的隨機次數,這意味著總的生成嘗試會更少,生成地點遠離生物群體座標中心的機會也會更小。 | ||||
你知道嗎
- 在舊版本中,重生點在熔岩湖裡是可能的,從而導致玩家幾乎無法在這樣的世界中進行遊戲,除非附近有水。這種情況在1.9中被修復,現在在世界重生點區域內不再生成熔岩湖。
- 世界生成點(玩家在沒有有效的床的情況下重生點)通常是X和Z軸上-500和+500之間的隨機點(由種子決定)。如果選擇的點在水中(因為沒有可用,但海洋生態域為在-500到+500範圍內),就將在-1500到+1500之間進行第二次嘗試。如果由於海洋而失敗,則遊戲放棄此方法並將世界生成點設定在海洋中間(仍在海平面)。然而,通常情況下,如果玩家在水中生成,它將在岸邊,因為世界生成本身在乾燥的地方上選擇了一個地方。
- 玩家在世界空間內的10個半徑範圍內生成(所以可能的區域為21x21)時檢查此21x21區域內的有效生成位置並將液體視為空氣(在1.13液體機制變更之前)。因此,如果你生成在熔岩裡,就可以繼續試試你的運氣,因為21x21範圍內的空間通常不會在熔岩湖中。
外部連結
- http://www.minecraftforum.net/topic/136723-mob-spawning-algorithm-in-12-01-analyzed/ - Marglyph創作的Beta 1.2中的生成算法
- http://www.minecraftforum.net/topic/37979-mob-spawning-science/ - fr0stbyte124創作的萬聖節更新之前的生成算法