Skip to content
游戏世界地形纹理 · 机制与百科资料

农业机制 ​

农业是长期稳定的食物与材料来源。通过耕地、施肥、灌溉和作物管理,可以把狩猎采集升级为可持续生产。食物腐败与进食机制见食物与腐败。

耕地基础 ​

游戏中有四种可种植植物的方块:

土壤方块可种植的植物备注
泥土全部植物需耙子耕作,基础土壤,直接可种,使用耙子交互后变为耕地
草地全部植物需耙子耕作,与泥土相同,使用耙子交互后变为泥土
沙子除树苗和南瓜外不支持树木和南瓜
耕地除树苗外可施肥和湿润

耕地详解 ​

耕地由耙子对泥土或草地方块使用获得。耕地有特殊的数据存储结构:

耕地有三种状态:

  • 普通耕地:干燥无肥,作物生长最慢
  • 湿润耕地:靠近水源,显示为深色
  • 施肥耕地:撒上硝石,在硝石位置3x3区域的耕地增加3点肥力值(封顶3点),作物生长加速,百分百成熟

水源滋润范围 ​

方向最大滋润距离说明
水平(东南西北)3 格水源在耕地同一高度,最远 3 格内可滋润
垂直(上下)1 格水源在耕地上方或下方 1 格可滋润
斜对角曼哈顿距离 ≤ 3如东 2 格+南 1 格可滋润,但东 2 格+南 2 格不可

一桶水能滋润多大范围? 以水方块为中心,同高度的耕地在曼哈顿距离 3 格内都能被滋润。实际效果是一桶水可以滋润周围 7×7 菱形区域(每方向各 3 格)内的耕地,共 24 格耕地。

一桶水的滋润范围(俯视图)水✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕✕水方块被滋润(24块)超出范围菱形区域 = 曼哈顿距离 ≤ 3
一桶水可滋润周围 24 格耕地(7×7 菱形区域内)

滋润的传递机制:搜索不仅能直接找到水,还能通过"已湿润的耕地"或"泥土"传递。也就是说,如果水源和耕地之间隔着已湿润的耕地或泥土方块,水源依然可以滋润到远处的耕地。泥土方块(非耕地)也能传递滋润信号,但只有耕地会被标记为湿润。

耕地破坏 ​

辛苦耕好的地,被踩一脚就变回泥土——这是生存战争农业中最常见的"意外"。理解踩坏机制,才能有效保护你的农场。

耕地被踩坏后会退化回泥土(失去耕地状态、湿润和氮肥数据),但上面种植的作物不会消失。耕地退化有两种触发方式:生物踩踏和方块覆盖。

生物踩踏 ​

当生物或玩家碰撞到耕地时,游戏会检查是否踩坏耕地。触发踩坏需要同时满足以下条件:

前提条件(必须全部满足):

  • 生物质量 > 20
  • 生物没有蹲伏(意思是玩家蹲下走不会踩坏耕地)

触发方式(满足任一即踩坏):

触发方式条件踩坏概率说明
跳跃落地垂直速度 < -3100%从高处跳到耕地上,必定踩坏
跑动踩踏垂直速度 < 0 且水平速度² > 1概率性在耕地上跑动时有概率踩坏,概率与游戏帧时间有关
  • 蹲伏保护:玩家蹲下(蹲伏状态)时在耕地上移动不会踩坏耕地。这是保护农场最简单的方法——在农田里养成蹲着走的习惯。
  • 关键结论:几乎所有陆地动物都会踩坏耕地,只有鸟类和极小型的生物不会。农场需要用栅栏围起来,防止牛、马、狼等动物闯入践踏。

方块覆盖 ​

当耕地上方被放置一个实心可碰撞方块时,耕地会立刻退化为泥土。判定规则:

  • 如果上方方块是面透明的(如玻璃窗、栅栏、台阶等)→ 不会踩坏耕地
  • 如果上方方块是面不透明的且可碰撞(如石头、木板、泥土等)→ 会踩坏耕地

这意味着你可以在耕地上方放置玻璃窗来保护作物(例如做温室),但不能直接在耕地上方放石头或木板。

退化处理时机 ​

踩坏请求不会立刻执行,而是加入队列,每 2.5 游戏时间单位(约 2.5 现实秒)批量处理一次。这意味着从踩踏到实际退化有极短的延迟,但玩家无法利用这个延迟来挽救耕地。

轮询与生长周期 ​

作物不是"每秒都在长",而是每隔一段时间被游戏"检查"一次。理解轮询和生长周期的概念,才能算出作物到底需要多久才能成熟。

什么是轮询 ​

游戏中的方块扫描器会周期性地扫描世界里的所有方块。每完成一轮完整扫描,就叫做一次轮询。扫描器的扫描周期为 1 分钟(现实时间)。

时间换算:1 个游戏天 = 1200 游戏时间单位 = 20 现实分钟。因此:

  • 1 次轮询 = 60 游戏时间单位 = 1 现实分钟 = 0.05 个游戏天 = 1.2 个游戏内小时

每次轮询时,扫描器会调用各种方块行为的 轮询 方法。对于耕地,轮询 会检查是否需要更新湿润状态;对于植物,轮询 会触发生长检查。

什么是生长周期 ​

生长周期是作物的一个参数,表示每隔多少次轮询才尝试生长一次。判定方式为:

是否生长=(轮询计数器 % 生长周期==0)\text{是否生长} = \left( \text{轮询计数器} \text{ \% } \text{生长周期} == 0 \right)

通俗地讲,每进行 生长周期 次轮询后,作物会尝试生长。其中 轮询计数器 每完成一轮扫描 +1。例如黑麦的基础生长周期为 4,意味着每 4 次轮询才尝试生长一次。

各作物的生长周期换算 ​

作物基础生长周期每次生长间隔换算为游戏天换算为现实时间
黑麦4 次轮询4 × 60 = 240 游戏时间单位0.2 天(4.8 游戏内小时)4 现实分钟
棉花8 次轮询8 × 60 = 480 游戏时间单位0.4 天(9.6 游戏内小时)8 现实分钟
南瓜4 次轮询4 × 60 = 240 游戏时间单位0.2 天(4.8 游戏内小时)4 现实分钟

注意:上表是"基础生长周期"(干燥无肥的普通耕地)。湿润和施肥可以缩短生长周期(黑麦/棉花最多减半,南瓜最多减到 1)。另外,这里列出的是每次生长尝试的间隔时间,不是从种下到成熟的总时间。黑麦从种下到成熟需要经历 7 次生长(阶段 0→7),所以总时间还要乘以 7。

完整成熟时间估算 ​

以最佳条件(湿润+施肥)为例:

作物实际生长周期生长次数总成熟时间(现实)总成熟时间(游戏天)
黑麦2 次轮询 = 2 分钟7 次约 14 现实分钟0.7 天
棉花4 次轮询 = 4 分钟2 次约 8 现实分钟0.4 天
南瓜1 次轮询 = 1 分钟7 次约 7 现实分钟0.35 天

以上为理论最快时间,实际游戏中还受光照(夜晚停止生长)、温度(低温增加周期)等因素影响。

作物生长机制 ​

黑麦 ​

黑麦是最基础的粮食作物,共 8 个生长阶段。必须在耕地上种植,否则立刻变野生。野生变化在第 3 阶段判定一次。

黑麦生长的关键要素必要条件☀️ 光照充足上方光照需 ≥ 9🌾 必须在耕地上否则会变野生🌱 尚未成熟共 8 个生长阶段⚗️ 成熟消耗肥力值消耗 1 点肥力值加速因素💧 湿润生长周期 -1 & 野生概率-40%🧪 有施肥生长周期 -1 & 野生概率-40%❄️ 低温惩罚温度≤4时 周期 +4最佳状态:湿润+施肥生长周期最短为 2
黑麦生长要素:满足必要条件后,可通过湿润和施肥加速生长
参数值说明
生长阶段0~7(共8阶段)第7阶段为成熟可收获
光照要求上方光照 ≥ 9光照不足则停止生长
基础生长周期4每4次轮询尝试生长一次
基础野生概率80%仅在第3阶段时判定
低温惩罚周期 +4温度 ≤ 4 时触发
成熟消耗肥力值1点成熟时从耕地扣除

不同条件下的生长表现:

土壤条件生长周期野生概率说明
不在耕地上(泥土/沙子)—100%跳过生长直接变野生
普通耕地(干燥无肥)480%基础值
湿润耕地340%湿润:周期-1,野生概率-40%
施肥耕地340%肥力值>0:周期-1,野生概率-40%
湿润+施肥耕地20%两项加成叠加,最佳状态
低温惩罚周期+4—温度 ≤ 4 时触发

黑麦不在耕地上会百分百变野生。最佳条件下生长周期仅 2,野生概率降为 0%。施肥和湿润对野生概率的减免各高达 40%,效果显著。

黑麦掉落 ​

黑麦分野生和种植两种,掉落完全不同:

种植的黑麦(人工播种):

生长阶段掉落物数量说明
0-4无0苗期破坏什么都不掉
5野生黑麦种子1 个中期只掉 1 个野生种子
6野生黑麦种子1~2 个接近成熟,掉 1-2 个野生种子
7(成熟)黑麦种子1~3 个完全成熟掉 1-3 个黑麦种子
7(成熟)经验球50% 概率 1 个成熟时额外有一半概率掉经验球

阶段 5 和 6 掉的是野生黑麦种子,只有完全成熟(阶段7)才掉黑麦种子。黑麦种子比野生种子产量更高。

野生黑麦(野外自然生长):

生长阶段掉落物数量概率
0-2无0-
3-7野生黑麦种子1 个33%

野生黑麦产量很低——大小超过 2 格后也只有三分之一的概率掉 1 个种子,而且没有经验球。

棉花 ​

棉花生长的关键要素必要条件☀️ 光照充足上方光照需 ≥ 9🌾 必须在耕地上否则会变野生🌱 尚未成熟仅 3 个生长阶段⚗️ 成熟消耗肥力值消耗 1 点肥力值加速因素💧 湿润生长周期 -2 & 野生概率-40%🧪 有施肥生长周期 -2 & 野生概率-40%❄️ 低温惩罚温度≤4时 周期 +8最佳状态:湿润+施肥生长周期最短 (4)
棉花生长要素:机制与黑麦相同,但加速幅度和低温惩罚更大

棉花是纺织原料,只有 3 个生长阶段,但基础生长周期更长。必须在耕地上种植,否则立刻变野生。野生变化在第 1 阶段判定一次。

参数值说明
生长阶段0~2(共3阶段)第2阶段为成熟可收获
光照要求上方光照 ≥ 9光照不足则停止生长
基础生长周期8每8次轮询尝试生长一次
基础野生概率80%仅在第1阶段时判定
低温惩罚周期 +8温度 ≤ 4 时触发
成熟消耗肥力值1点成熟时从耕地扣除

不同条件下的生长表现:

土壤条件生长周期野生概率说明
不在耕地上(泥土/沙子)—100%跳过生长直接变野生
普通耕地(干燥无肥)880%基础值
湿润耕地640%湿润:周期-2,野生概率-40%
施肥耕地640%施肥:周期-2,野生概率-40%
湿润+施肥耕地40%两项加成叠加,最佳状态

棉花与黑麦机制相同,但施肥和湿润各减 2 周期(黑麦仅减1),所以最佳条件下周期从8降到4。低温惩罚也翻倍(+8 vs 黑麦的+4),棉花对寒冷更敏感。

棉花掉落 ​

只有完全成熟(阶段 2)才掉落,0 和 1 阶段破坏什么都不掉。

种植的棉花:

掉落物数量说明
棉花种子1~2 个必掉
棉花团1~2 个必掉,做布料和床的原料
经验球50% 概率 1 个成熟时额外一半概率掉

野生棉花:

掉落物数量说明
棉花种子1~2 个只掉种子,不掉棉花团

野生棉花只掉种子,不掉棉花团和经验球。要获得棉花团必须人工种植。

南瓜 ​

南瓜是唯一有死亡概率的作物——不是变野生,而是直接枯死。共 8 个生长阶段,死亡概率每次生长都判定(不限于特定阶段),累积风险更高。不在耕地上也能生长(不会立刻退化),但死亡概率更高。

南瓜生长的关键要素必要条件☀️ 光照充足上方光照需 ≥ 9🌱 尚未成熟共 8 个生长阶段⚗️ 成熟消耗肥力值消耗 3 点肥力值⚠️ 有死亡概率(非野生)加速因素🌾 在耕地上周期 -1 死亡 -5%💧 湿润周期 -1 死亡 -5%🧪 有施肥周期 -1 死亡 -5%❄️ 低温≤8 周期+5最佳:耕地+湿润+施肥
南瓜生长要素:三项加成各提供"加速+降低死亡"双重效果
参数值说明
生长阶段0~7(共8阶段)第7阶段为成熟可收获
光照要求上方光照 ≥ 9光照不足则停止生长
基础生长周期4每4次轮询尝试生长一次
基础死亡概率15%每次生长都判定(共7次,累积风险高)
低温惩罚周期 +5温度 ≤ 8 时触发(阈值比黑麦/棉花的4更高)
成熟消耗肥力值3点成熟时从耕地扣除肥力值(黑麦/棉花仅1点)

各条件的独立效果:

条件生长加速效果死亡概率减免效果
在耕地上周期 -1-5%
湿润周期 -1-5%
施肥周期 -1-5%

南瓜与黑麦/棉花的关键区别:黑麦/棉花只有"湿润"和"施肥"两种加成,而南瓜多了一项"在耕地上"的加成(黑麦/棉花在耕地上是前提条件,不提供额外效果)。三项条件各提供两种效果:加速生长 + 降低死亡概率。

不同条件下的生长表现:

土壤条件生长周期死亡概率效果来源
非耕地(泥土/沙子上)415%无任何加成,但仍能生长
普通耕地(干燥无肥)310%仅耕地加速+减免
湿润耕地25%耕地+湿润,两项叠加
施肥耕地(干燥)25%耕地+施肥,两项叠加
湿润+施肥耕地10%耕地+湿润+施肥,三项全满

南瓜与黑麦/棉花的最大区别:不在耕地上也能生长,但死亡概率更高。每项加成仅减免 5% 死亡概率(黑麦/棉花的野生概率减免高达40%),但三项叠加后可降至 0%。南瓜成熟消耗 3 点肥力值,对土壤肥力消耗极大,需频繁补肥。

节约肥力值

南瓜成熟消耗 3 点肥力值,在一次施肥后可以先种植两次棉花或黑麦,此时肥力值为 1,再种植一次南瓜时只会消耗 1 点肥力值。

南瓜掉落 ​

南瓜任何阶段(1-7)破坏都掉南瓜本身,但阶段 0(刚种下的种子形态)什么都不掉。

生长阶段掉落物数量说明
0无0刚种下的种子形态,破坏无掉落
1-6南瓜方块1 个掉对应大小的南瓜
7(成熟)南瓜方块1 个掉完整的大南瓜
7(成熟)经验球50% 概率 1 个成熟时额外一半概率掉

南瓜不掉种子——南瓜直接掉南瓜方块。要得到南瓜种子需要从其他途径获取(比如宝藏、创造模式等)。 南瓜掉落后是"已收获"状态,可以直接捡起来当食物或做材料。

三种作物关键差异总结 ​

对比项黑麦 / 棉花南瓜
不在耕地上变野生(100%)能正常生长(死亡概率15%)
退化类型变野生枯死(停止生长)
退化判定时机仅特定阶段判定一次每次生长都判定
每项加成的退化减免40%5%
成熟消耗肥力值1点3点
低温惩罚阈值温度 ≤ 4温度 ≤ 8(更容易受冻)
三种作物对比总结对比项🌾 黑麦🌿 棉花🎃 南瓜定位基础粮食纺织原料基础粮食生长阶段8 阶段3 阶段8 阶段基础周期484最佳周期241退化类型变野生变野生枯死退化减免40%/项40%/项5%/项判定时机特定阶段一次特定阶段一次每次生长都判定成熟耗肥113低温惩罚≤4 周期+4≤4 周期+8≤8 周期+5不在耕地变野生变野生能生长黑麦稳 · 棉花慢 · 南瓜险而快
三种作物对比:黑麦/棉花变野生,南瓜枯死;南瓜最脆弱但最佳周期最短

野生状态与枯死状态 ​

野生状态(黑麦/棉花):植物变为野生品种后仍在继续生长。野生状态不可逆转。

枯死状态(南瓜):南瓜枯死后停止生长,不会产出南瓜。枯死的南瓜会像其他食物一样腐败。枯死状态不可逆转。

化肥与堆肥 ​

硝石:从硝石矿(砂岩中生成)开采获得硝石块。硝石粉撒在耕地上可增加3点肥力值(封顶3点),加速作物生长并降低退化概率。

堆肥:腐烂食物最终转化为堆肥,可直接替代耕地使用,自带肥力,无需额外施肥。这是利用腐败食物的主要方式——将腐烂食物留在地上,最终变成堆肥后用于种植。

写给开发者 ​

资料暂存

本小节内容暂时存放于此,后续会移动至“MOD开发”章节。

开发概览

土壤数据结构 ​

SoilBlock 的 data 字段使用按位存储:

Bit含义方法
bit 0湿润状态(Hydration)GetHydration / SetHydration
bit 1-2肥力等级(rogen, 0-3)GetNitrogen / SetNitrogen

肥力等级值为 0-3,由 Math.Clamp(nitrogen, 0, 3) 限制。

Clamp(x, min, max):限制函数。若 x 小于 min 则返回 min,若 x 大于 max 则返回 max,否则返回 x。这里把肥力限制在 0~3 的合法范围内。

轮询机制(SubsystemBlocksScanner.cs) ​

方块扫描器以固定周期扫描世界中的所有方块,每完成一轮扫描 pollPass 计数器 +1:

csharp
public float ScanPeriod = 60f;  // 扫描周期:60 游戏时间单位(= 1 现实分钟)

public int m_pollPass;  // 轮询计数器,每完成一轮完整扫描 +1

public virtual void Update(float dt) {
    // m_pollShiftsCount 按时间累积,控制扫描进度
    m_pollShiftsCount += terrain.AllocatedChunks.Length * 16 * 16 * dt / ScanPeriod;
    // ... 逐块扫描,对每个可轮询方块调用 OnPoll ...
    // 当所有区块扫描完一轮后:
    if (hasLooped) {
        m_pollPass++;  // 轮询计数器 +1
    }
}

水源滋润判定(SubsystemSoilBlockBehavior.cs) ​

耕地在每次轮询时检查是否应该变湿润。核心方法 DetermineHydration 使用递归"步数预算"搜索水源:

csharp
// OnPoll:每次轮询时检查耕地是否需要更新湿润状态
public override void OnPoll(int value, int x, int y, int z, int pollPass) {
    bool hydration = SoilBlock.GetHydration(Terrain.ExtractData(value));
    if (DetermineHydration(x, y, z, 3)) {      // 初始步数预算 = 3
        if (!hydration) {
            m_toHydrate[new Point3(x, y, z)] = true;   // 需要湿润
        }
    }
    else if (hydration) {
        m_toHydrate[new Point3(x, y, z)] = false;      // 需要干燥
    }
}

// DetermineHydration:递归搜索水源,steps 为剩余步数预算
public bool DetermineHydration(int x, int y, int z, int steps) {
    if (steps > 0 && y > 0 && y < 254) {
        // 水平方向:4 个邻居,各消耗 1 步
        if (DetermineHydrationHelper(x - 1, y, z, steps - 1)) return true;
        if (DetermineHydrationHelper(x + 1, y, z, steps - 1)) return true;
        if (DetermineHydrationHelper(x, y, z - 1, steps - 1)) return true;
        if (DetermineHydrationHelper(x, y, z + 1, steps - 1)) return true;
        // 垂直方向:上下各消耗 2 步(仅 steps >= 2 时检查)
        if (steps >= 2) {
            if (DetermineHydrationHelper(x, y - 1, z, steps - 2)) return true;
            if (DetermineHydrationHelper(x, y + 1, z, steps - 2)) return true;
        }
    }
    return false;
}

// DetermineHydrationHelper:检查当前位置的方块类型
public bool DetermineHydrationHelper(int x, int y, int z, int steps) {
    int cellValueFast = SubsystemTerrain.Terrain.GetCellValueFast(x, y, z);
    int num = Terrain.ExtractContents(cellValueFast);
    int data = Terrain.ExtractData(cellValueFast);
    switch (num) {
        case 18: return true;  // 水方块(WaterBlock)→ 直接找到水源
        case 168:              // 耕地(SoilBlock)
            if (SoilBlock.GetHydration(data)) {
                return DetermineHydration(x, y, z, steps);  // 已湿润的耕地可传递滋润
            }
            break;
    }
    if (num == 2) {
        return DetermineHydration(x, y, z, steps);  // 泥土(DirtBlock)可传递滋润
    }
    return false;
}

方块编号对照:WaterBlock.Index = 18,DirtBlock.Index = 2,SoilBlock(耕地)= 168。

步数预算消耗规则:

移动方向消耗步数初始预算 3 时的最大距离
水平(东南西北)13 格
垂直(上下)21 格

传递规则:水方块(18)直接返回 true;已湿润的耕地(168)和泥土(2)会递归调用 DetermineHydration 继续搜索,步数预算不变。这意味着滋润信号可以穿过已湿润的耕地或泥土向外传递,直到步数耗尽。

湿润更新时机:OnPoll 只是将变更请求加入 m_toHydrate 队列,实际更新在 Update 方法中每 10 游戏时间单位批量执行一次。

植物生长系统架构 ​

核心文件:Survivalcraft/Subsystem/BlockBehavior/SubsystemPlantBlockBehavior.cs

处理的方块索引(HandledBlocks):

19=TallGrassBlock, 20=FlowerBlock, 24, 25, 28=FlowerBlock变体,
99=?, 131=BasePumpkinBlock, 132=JackOLanternBlock, 
174=RyeBlock, 204=CottonBlock, 244=?

生长触发条件:仅在 EnvironmentBehaviorMode.Living 模式下触发(OnPoll 方法)。

生长方法源码要点 ​

三种作物的生长方法中,变量对应关系:

变量黑麦棉花南瓜含义
num2/num4484基础生长周期
num3/num50.80.80.15退化概率(野生/死亡)
退化触发size == 3size == 1每次生长判定时机不同
退化方法SetIsWildSetIsWildSetIsDead不同的状态设置

黑麦/棉花的生长条件分支:

csharp
// 不在耕地上 → 立刻变野生
if (Terrain.ExtractContents(cellValueFast) != 168) {
    // 直接设为野生状态
    int value5 = Terrain.ReplaceData(value, RyeBlock.SetIsWild(data, true));
    m_subsystemCellChangeQueue.QueueCellChange(x, y, z, value5);
    return;
}
csharp
// 在耕地上 → 计算生长周期和野生概率
int num2 = 4;       // 基础生长周期
float num3 = 0.8f;  // 基础野生概率
if (nitrogen > 0)  { num2--; num3 -= 0.4f; }  // 施肥:周期-1,野生-0.4
if (hydration)     { num2--; num3 -= 0.4f; }  // 湿润:周期-1,野生-0.4
if (num <= 4)      { num2 += 4; }              // 低温惩罚

// 生长判定:pollPass % max(周期,1) == 0,或野生概率 >= 1(必定生长)
if (pollPass % MathUtils.Max(num2, 1) == 0 || !(num3 < 1f)) {
    int data4 = RyeBlock.SetSize(data, MathUtils.Min(size + 1, 7));
    // 野生概率判定(仅在特定阶段)
    if (m_random.Float(0f, 1f) < num3 && size == 3) {
        data4 = RyeBlock.SetIsWild(data4, true);
    }
    // 成熟时消耗肥力
    if (size + 1 == 7) {
        SoilBlock.SetNitrogen(data3, MathUtils.Max(nitrogen - 1, 0));
    }
}

南瓜的生长条件分支(关键差异):

csharp
// 南瓜不在耕地上也能生长(不会立刻退化)
int num4 = 4;        // 基础生长周期
float num5 = 0.15f;  // 基础死亡概率
if (num == 168)    { num4--; num5 -= 0.05f; }  // 耕地:周期-1,死亡-0.05
if (num2 > 0)      { num4--; num5 -= 0.05f; }  // 肥力:周期-1,死亡-0.05
if (flag)          { num4--; num5 -= 0.05f; }  // 湿润:周期-1,死亡-0.05
if (num3 <= 8)     { num4 += 5; }               // 低温惩罚(阈值8,比黑麦/棉花的4更高)

// 死亡概率每次生长都判定(不限于特定阶段)
if (m_random.Float(0f, 1f) < num5) {
    data3 = BasePumpkinBlock.SetIsDead(data3, true);  // 直接枯死
}
// 成熟时消耗3点肥力(黑麦/棉花仅1点)
if (num == 168 && size + 1 == 7) {
    SoilBlock.SetNitrogen(data2, MathUtils.Max(num2 - 3, 0));
}

模组扩展建议 ​

  • 添加新植物:创建新的 ModPlantBlockBehavior 继承类,负责自己模组植物的生长
  • 添加新土壤类型:只需调整该土壤方块的 IsSuitableForPlants 属性

作物生长流程 ​

种子种在合适土壤上 → OnPoll触发Grow → 检查光照≥9 → 
检查土壤条件 → 计算生长周期和退化概率 → 
pollPass % 周期 == 0 → 生长+1阶段 → 
退化概率判定(野生/死亡) → 成熟时消耗肥力值 → 可收获
参与共建发现错误或有建议?两种零门槛方式,无需本地环境

玩家共建文档 · 原版、插件版、联机版与插件联机版请注意区分