====== 杂交 ======
\\ <del>不科学的科学</del>\\
\\
查询作物用下面这个链接\\
https://gtnh.miraheze.org/wiki/IC2_Crops_List
----


===== 作物 =====
==== IC2 ====
<fs large>[[http://www.mcmod.cn/item/145.html|作物架基础]]</fs>\\
<fs large>[[https://ftb.gamepedia.com/Crop_Breeding_(IndustrialCraft_2)|IC2的杂交品种..1]]</fs>\\
<fs large>[[https://ftb.gamepedia.com/Crops_(Useful_Crops)|IC2的杂交品种..2]]</fs>\\
\\
可参考：1.10.2 IC2杂交（注意，红石大陆为1.7.10，因此可能会与这个视频有出入，仅供参考！）\\
<fs large>[[https://www.bilibili.com/video/BV1ix411y7kn?t=210|bilibili 酒石酸菌-IndustrialCraft-2-Exp-工业2实验版-1.10.2-part-7-农业与杂交]]</fs>

<fs large>[[https://technicpack.fandom.com/wiki/Crops_Tutorial#Tiers|杂交教程（英文）]]</fs>

==== GT6 ====
依赖IC2的作物架(ID:#0488)\\
加入格雷科技后的杂交系统有了一些改变，作物架的合成需要两个防腐木棍。\\ 合成防腐木棍需要将普通的木棍放入浸洗盆中和油类液体混合。\\ 前期比较容易获得的油为杂酚油， 可以通过焦炉获取。 \\ 
{{::tim图片20180210193543.png?400|}}\\
<del><fs large>[[https://ftb.gamepedia.com/Crops_(GregTech)|GT6的杂交金属品种]]</fs></del>(Tiramisuy：这个没我上面给出的全）\\
<fs large>[[http://fanyi.baidu.com/|请善用翻译（百度）]]</fs>\\
<fs large>[[https://translate.google.com/|请善用翻译（谷歌）]]</fs>\\

=============================  \\

作物成长速度代码分析：  \\
<hidden><code java>
  // 如果复合作物成长环境，每1tick都会计算一次作物成长值
  public int calcGrowthRate()
  {
    if (this.crop == null) {
      return 0;
    }
    // 作物本tick成长基础点数 = 固定3+ 0到6的随机数
    int base = 3 + IC2.random.nextInt(7) + this.statGrowth;
    // 成长需求成长率 = （当前作物等级-1）*4 + 当前种子成长值 + 当前种子产量值 + 当前种子抗性值
    int need = (this.crop.tier() - 1) * 4 + this.statGrowth + this.statGain + this.statResistance;
    // 成长需求成长率最小为0
    if (need < 0) {
      need = 0;
    }
    
    /* 当前环境所能提供的作物成长率计算，主要通过【湿度】，【养分】，【空气质量】点数计算；
    * 可可，咖啡，西瓜，南瓜，小麦，粘性甘蔗有重写此方法计算公式，如有需要请自行翻阅对应作物类中的weightInfluences方法
    * 其他作物：
    * 环境所能提供的作物成长率 = （当前作物湿度点数 + 当前作物养分点数 + 当前作物空气质量点数）*5
    */
    int have = this.crop.weightInfluences(this, getHumidity(), getNutrients(), getAirQuality()) * 5;

    /* 作物本tick成长点数 =（当前环境所能提供的作物成长率 - 成长需求成长率）* 100% * 作物本tick成长基础点数；
    * 如果【当前环境所能提供的作物成长率】比【成长需求成长率】低26（包含），作物不会成长，
    * 并且有（31 - 种子抗性值）/ 31 * 100% 几率清空作物架（看起来抗性值基本没啥用，高了反而增加作物成长需求）
    */
    if (have >= need)
    {
      base = base * (100 + (have - need)) / 100;
    }
    else
    {
      int neg = (need - have) * 4;
      if ((neg > 100) && (IC2.random.nextInt(32) > this.statResistance))
      {
        reset();
        base = 0;
      }
      else
      {
        base = base * (100 - neg) / 100;
        if (base < 0) {
          base = 0;
        }
      }
    }
    return base;
  }
  
  // 湿度点数的计算
  public byte updateHumidity()
  {
    int value = Crops.instance.getHumidityBiomeBonus(this.worldObj.getBiomeGenForCoords(this.xCoord, this.zCoord));
    if (this.worldObj.getBlockMetadata(this.xCoord, this.yCoord - 1, this.zCoord) >= 7) {
      value += 2;
    }
    if (this.waterStorage >= 5) {
      value += 2;
    }
    value += (this.waterStorage + 24) / 25;
    return (byte)value;
  }
  
  // 养分点数计算
  public byte updateNutrients()
  {
    /* 生物群系提供的点数：
    *    JUNGLE, 10
    *    SWAMP, 10
    *    MUSHROOM, 5
    *    FOREST, 5
    *    RIVER, 2
    *    PLAINS, 0
    *    SAVANNA, -2
    *    HILLS, -5
    *    MOUNTAIN, -5
    *    WASTELAND, -8
    *    END, -10
    *    NETHER, -10
    *    DEAD, -10
    */
    int value = Crops.instance.getNutrientBiomeBonus(this.worldObj.getBiomeGenForCoords(this.xCoord, this.zCoord));
    for (int i = 2; i < 5; i++)
    {
      if (this.worldObj.getBlock(this.xCoord, this.yCoord - i, this.zCoord) != Blocks.dirt) {
        break;
      }
      value++;
    }
    value += (this.nutrientStorage + 19) / 20;
    return (byte)value;
  }
  
  // 空气质量点数计算
  public byte updateAirQuality()
  {
    int value = 0;
    int height = (this.yCoord - 64) / 15;
    if (height > 4) {
      height = 4;
    }
    if (height < 0) {
      height = 0;
    }
    value += height;
    int fresh = 9;
    for (int x = this.xCoord - 1; (x <= this.xCoord + 1) && (fresh > 0); x++) {
      for (int z = this.zCoord - 1; (z <= this.zCoord + 1) && (fresh > 0); z++) {
        if ((this.worldObj.isBlockNormalCubeDefault(x, this.yCoord, z, false)) || 
          ((this.worldObj.getTileEntity(x, this.yCoord, z) instanceof TileEntityCrop))) {
          fresh--;
        }
      }
    }
    value += fresh / 2;
    if (this.worldObj.canBlockSeeTheSky(this.xCoord, this.yCoord + 1, this.zCoord)) {
      value += 2;
    }
    return (byte)value;
  }

</code>
</hidden>

----
===== 蜜蜂 =====
==== 林业 ====


----
===== 树 =====
==== 林业 ====


----
<del><fs large>**蝴蝶**</fs></del>\\
<del><fs medium>**林业**</fs></del>





