Re: [討論] 不太有用的樹木學(v1.5.1)&骨粉運作
因為在弄自動灑骨粉的mod所以我想知道這個樹苗是有機會成長成功是怎麼判斷的
[於是我去看了程式碼,其實打這篇在邊看邊打]
[因為之前是看1.4.7,這篇是1.5.1-7.7.1.673]
[有興趣的人可以去http://jd.minecraftforge.net/ 看程式碼]
[這篇打的順序不是由上往下 最後才會把結論打在前面]
[樹木成長基本上是沒啥變化 有變化是骨粉的部分]
┌─┬───┬───────────────────┐
│ │樹 苗│45%機率成功,成功兩次以上才會嚐試長大 │
│ ├───┼───────────────────┤
│骨│香 菇│40%機率嚐試長大 │
│ ├───┴───┬───────────────┤
│ │西瓜莖、南瓜莖│成長度範圍:0 ~ 7 │
│ │小 麥、蘿 蔔│沒完整成長才會使用 │
│ │馬鈴薯 │成長度增加:2 ~ 5 │
│ ├───┬───┴───────────────┤
│ │ │成長度範圍:0 ~ 2 │
│ │可可豆│沒完整成長才會使用 │
│粉│ │成長度增加:1 │
│ ├───┼───────────────────┤
│ │草 磚│產生草(90%),黃花(6.67%),紅花(3.33%) │
└─┴───┴───────────────────┘
一、首先一切都從骨粉開始
ItemDye.onItemUse 使用物品
ItemDye.applyBonemeal 如果是骨粉的時候呼叫這個
如果目標是樹苗
45%機率會呼叫(失敗骨粉也會減少)
BlockSapling.func_96477_c
如果沒灑過(0x8 bit是0) 這次是第一次施肥 他會紀錄施肥一次(0x8 bit 設成1)
如果有施肥過(0x8 bit非0是1) 這時候才會成長呼叫(有可能長失敗)
BlockSapling.growTree 來嚐試樹的生成(後述)
如果目標是香菇
有40%會呼叫(失敗骨粉也會減少)
BlockMushroom.fertilizeMushroom 來嚐試巨大香菇的生成(後述)
如果目標是西瓜莖南瓜瓜莖(如果成長度已滿7不會使用)
會直接呼叫
BlockStem.fertilizeStem 成長度(0~7)會加上 2~5
如果目標是小麥馬鈴薯蘿蔔(如果成長度已滿7不會使用)
會直接呼叫
BlockCrops.fertilize 成長度(0~7)會加上 2~5
如果目標是可可豆(如果成長度已滿2不會使用)
成長度(0~2)會加上 1
如果目標是草磚(這部分沒變)
會在附近的草磚上生成花草
(因為是不斷隨機移動挑位置,而且嚐試很多次,這部份就不重要了)
┌ 1/3 生成紅花 3.33%
┌ 1/10 生成花│
│ └ 2/3 生成黃花 6.67%
└ 9/10 生成草 90%
二、巨大香菇跟樹木的成長
成長檢查分成兩部分:(1)判斷能不能生成 (2)生成樹木
判斷能不能生成的範圍跟生成樹木的範圍是不同的
這裡主要是著重判斷範圍
所有檢查都會先把樹苗移除再來檢查
失敗再把樹苗放回去
巨大香菇
WorldGenBigMushroom(0);
WorldGenBigMushroom(1);
檢查範圍內只能有空氣、樹葉 生成的時候只會生成在空氣、透明方塊
-3-2-1 0+1+2+3 不透明方塊會被吃掉(黑色框框部分)
+7□□□□□□□ ↑(看這次選) -3-2-1 0+1+2+3 -3-2-1 0+1+2+3
+6□□□□□□□ ↑│(哪種高度) +6■■■■■■■+6■■■■■■■
+5□□□□□□□↑││三種高度的 +5■■□□□■■+5□□□□□□□
+4□□□□□□□│││的檢查範圍 +4■□■□■□■+4■■■□■■■
+3 □ │││分別是 +3 □ □ □ +3 □
+2 □ │││(1)藍 +2 □ □ □ +2 □
+1 □ │││(2)藍+青 +1 □ +1 □
0 □ ↓↓↓(3)藍+青+紫 0 □ 0 □
-1 ■ 如果黑色框框部分已經有不透明方塊
↑此處只能是泥土、草磚、菌土 則不會生成香菇磚,之後的樹木成長同不重複
只要藍色區域有的話就有可能生成最矮的巨大香菇(此部份一定都不能有東西)
針葉樹
WorldGenTaiga2();
檢查範圍內只能有空氣、樹葉
←───→ 樹葉區寬度
←─────→ 5x5 7x7隨機 先生成樹葉
-3-2-1 0+1+2+3 只會生成在空氣、透明方塊
+9□□□□□□□ ↑ 不過針葉樹樹葉只會在檢查範圍內生成
+8□□□□□□□ ↑│有樹葉區
+7□□□□□□□ ↑││高度從 然後在中心生成原木
+6□□□□□□□ ↑│││+6~+9 只會生成在空氣、樹葉
+5□□□□□□□ ││││到
+4□□□□□□□ ││││+1~+2
+3□□□□□□□ ││││
+2□□□□□□□ ↓↓↓↓
+1□□□□□□□ ↑只有樹幹區(只檢查樹幹)
0 □ ↓高度是1~2隨機
-1 ■
↑此處只能是泥土、草磚
只要藍色區域有的話就有可能生成最小的針葉樹(此部份一定都不能有東西)
白皮樹、黃皮樹、叢林樹
WorldGenForest();
WorldGenTrees(true); this(true, 4, 0, 0, false);
WorldGenTrees(true, 4 + par5Random.nextInt(7), 3, 3, false);
由於這類樹的檢查範圍是依據樹高
所以先從樹木形狀跟檢查範圍(以特定高度為例子)
-2-1 0+1+2
+7■■■■■ ↑總↑頂端 檢查範圍內
+6■□□□■ │檢│三格高 白皮樹:只能有空氣、樹葉
+5■□□□■ │查↓檢查5x5 黃皮樹、叢林樹:
+4□□□□□ │範↑中間 只能有空氣、樹葉、草磚、泥土、原木
+3□□□□□ │圍│區域
+2 ■□■ │ │檢查3x3 先生成樹葉 只會生成在空氣、透明方塊
+1 ■□■ │ ↓ 然後在中心生成原木只會生成在空氣、樹葉
0 □ ↓ ←底層檢查1x1
-1 ■
↑此處只能是泥土、草磚
因此以下區域符合條件的時候最少可以生成一種高度的樹
-2-1 0+1+2
□□□□□ ↑最大 白皮樹是+8
□□□□□ │檢查 黃皮樹是+7
.......... │範圍 叢林樹是+13
+6 □□□□□ │
+5 □□□□□ │↑
+4 □□□□□ ││最小 白皮樹是+6
+3 □□□□□ ││檢查 黃皮樹叢林樹是+5
+2 □□□ ││範圍
+1 □□□ ││
0 □ ↓↓
不管怎樣中心區域(3x3)從+1到最大檢查範圍(+8/+7/+13) 不可以有東西(扣除例外)
外圈區域(5x5外圈)從最小樹高-2(+4/+3/+3)到最大檢查範圍之中
最少要有連續三層有都沒有東西,樹苗才有可能生成
叢林巨木
WorldGenHugeTrees(true, 10 + par5Random.nextInt(20), 3, 3);
由於樹幹是2x2
檢查中心是以西北方的那一塊
北
負向
西 ■□ 東
負向 □□ 正向
南
正向
檢查範圍如下
-2-1 0+1+2 檢查範圍內
+32□□□□□ ↑最高檢查範圍 只能有空氣、樹葉、草磚、泥土、原木、樹苗
.......... │最多+32
+11□□□□□ │↑ 先生成側枝
.......... ││最小檢查範圍 從頂端往下每2~5高度到一半高度
+3□□□□□ ││最多+11 隨機往某個方向生成側枝(含少數原木)
+2□□□□□ ││ 樹葉只會生成在空氣、透明方塊
+1□□□□□ ↓↓ 然後在中心2x2生成主幹原木
0 □※※ ←底層檢查3X3 只會生成在空氣、樹葉
-1 ■■ 並且在原木周圍67%生成藤蔓(每一面,共八面)
↑↑此處只能是泥土、草磚 只會生成在空氣
只要藍色區域有的話就有可能生成最小的叢林巨木(此部份一定都不能有東西)
黃皮神木
WorldGenBigTree(true);
黃皮神木是黃皮樹10%機率會進行黃皮神木生成
只檢查中心主幹區域
他檢查跟生成的方式都是線性檢查看能檢查多遠或是生成多遠
0
他是先隨機一個樹高(+5~+16) +5□ 最少這樣就能生成
然後從樹苗往上方檢查,只能有空氣、樹葉 +4□ 只是長不出精美的樹型
看最高能長多高(最少要+5就是) +3□
+2□
然後之後依據樹高來生成樹木 +1□
(過程複雜請忽略他) 0□
■
↑此處只能是泥土、草磚
--
有問題請寄信(推文)大多人不在(????
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.39.137.238
→
04/24 22:46, , 1F
04/24 22:46, 1F
推
04/24 22:47, , 2F
04/24 22:47, 2F
→
04/24 22:51, , 3F
04/24 22:51, 3F
推
04/24 22:54, , 4F
04/24 22:54, 4F
推
04/25 00:27, , 5F
04/25 00:27, 5F
推
04/25 11:47, , 6F
04/25 11:47, 6F
推
04/25 13:27, , 7F
04/25 13:27, 7F
推
04/25 14:52, , 8F
04/25 14:52, 8F
→
04/25 14:54, , 9F
04/25 14:54, 9F
※ 編輯: jeffffliu 來自: 114.39.137.238 (04/25 14:54)
推
04/25 16:28, , 10F
04/25 16:28, 10F
→
04/25 17:25, , 11F
04/25 17:25, 11F
→
04/25 19:14, , 12F
04/25 19:14, 12F
→
04/25 23:16, , 13F
04/25 23:16, 13F
Minecraft 近期熱門文章
PTT遊戲區 即時熱門文章