作者jeffffliu (女子 食我 口阿)
看板Minecraft
標題Re: [討論] 不太有用的樹木學(v1.5.1)&骨粉運作
時間Wed Apr 24 22:43:04 2013
因為在弄自動灑骨粉的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
→ organ63521:專業推 04/24 22:46
推 p3398530:專業認真樓上沒有推XD 04/24 22:47
→ jeffffliu:新內容其實只有骨粉 跟 香菇之前用純測試結果不對 04/24 22:51
推 organ63521:我來補推了 04/24 22:54
推 CP64:挖code推 04/25 00:27
推 diffusa:好專業 推推 04/25 11:47
推 jurian0101:推 04/25 13:27
推 mabikerry:那黑皮樹呢 04/25 14:52
→ jeffffliu:(就針葉樹吧 04/25 14:54
※ 編輯: jeffffliu 來自: 114.39.137.238 (04/25 14:54)
推 TheZeta:......... 對了 我的小麥澆水後長好了呢! 04/25 16:28
→ jeffffliu:不焦水也會長好! 04/25 17:25
→ gh0987:小麥澆水會直接流掉吧 04/25 19:14
→ jeffffliu:查這個只是要讓自己不要浪費骨粉 04/25 23:16