作者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
1F:→ organ63521:专业推 04/24 22:46
2F:推 p3398530:专业认真楼上没有推XD 04/24 22:47
3F:→ jeffffliu:新内容其实只有骨粉 跟 香菇之前用纯测试结果不对 04/24 22:51
4F:推 organ63521:我来补推了 04/24 22:54
5F:推 CP64:挖code推 04/25 00:27
6F:推 diffusa:好专业 推推 04/25 11:47
7F:推 jurian0101:推 04/25 13:27
8F:推 mabikerry:那黑皮树呢 04/25 14:52
9F:→ jeffffliu:(就针叶树吧 04/25 14:54
※ 编辑: jeffffliu 来自: 114.39.137.238 (04/25 14:54)
10F:推 TheZeta:......... 对了 我的小麦浇水後长好了呢! 04/25 16:28
11F:→ jeffffliu:不焦水也会长好! 04/25 17:25
12F:→ gh0987:小麦浇水会直接流掉吧 04/25 19:14
13F:→ jeffffliu:查这个只是要让自己不要浪费骨粉 04/25 23:16