From 44a86cd45fa2a9bc84c6b58e5f42ea032befd5dd Mon Sep 17 00:00:00 2001 From: bdew Date: Sun, 16 Aug 2015 20:25:06 +0300 Subject: [PATCH] Added BeeModifiers (based on BeeHousingModifier) --- .../bdew/gendustry/custom/BeeMutation.scala | 5 +- .../gendustry/forestry/BeeModifiers.scala | 48 +++++++++++++++++++ 2 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 src/net/bdew/gendustry/forestry/BeeModifiers.scala diff --git a/src/net/bdew/gendustry/custom/BeeMutation.scala b/src/net/bdew/gendustry/custom/BeeMutation.scala index 8b09f1c..57f1651 100644 --- a/src/net/bdew/gendustry/custom/BeeMutation.scala +++ b/src/net/bdew/gendustry/custom/BeeMutation.scala @@ -12,6 +12,7 @@ package net.bdew.gendustry.custom import forestry.api.apiculture._ import forestry.api.core.{EnumHumidity, EnumTemperature} import forestry.api.genetics.{AlleleManager, IAllele} +import net.bdew.gendustry.forestry.BeeModifiers import net.bdew.lib.Misc import net.minecraft.block.Block import net.minecraft.item.ItemStack @@ -55,9 +56,7 @@ class BeeMutation(parent1: IAlleleBeeSpecies, parent2: IAlleleBeeSpecies, result else { val bkm = getRoot.getBeekeepingMode(housing.getWorld) var processedChance = chance - import scala.collection.JavaConversions._ - for (mod <- housing.getBeeModifiers) - processedChance *= mod.getMutationModifier(genome0, genome1, processedChance) + processedChance *= BeeModifiers.from(housing).getMutationModifier(genome0, genome1, processedChance) processedChance *= bkm.getBeeModifier.getMutationModifier(genome0, genome1, processedChance) processedChance } diff --git a/src/net/bdew/gendustry/forestry/BeeModifiers.scala b/src/net/bdew/gendustry/forestry/BeeModifiers.scala new file mode 100644 index 0000000..8543510 --- /dev/null +++ b/src/net/bdew/gendustry/forestry/BeeModifiers.scala @@ -0,0 +1,48 @@ +/* + * Copyright (c) bdew, 2013 - 2015 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://bdew.net/minecraft-mod-public-license/ + */ + +package net.bdew.gendustry.forestry + +import forestry.api.apiculture.{IBeeGenome, IBeeHousing, IBeeModifier} + +import scala.collection.JavaConversions._ + +/** + * Combines multiple IBeeModifier together + * Conceptually based on BeeHousingModifier from Forestry + * @param modifiers collection of modifiers + */ +case class BeeModifiers(modifiers: Traversable[IBeeModifier]) extends IBeeModifier { + override def getTerritoryModifier(genome: IBeeGenome, currentModifier: Float): Float = + modifiers.foldLeft(1F)((v, m) => m.getTerritoryModifier(genome, v * currentModifier)) + + override def getMutationModifier(genome: IBeeGenome, mate: IBeeGenome, currentModifier: Float): Float = + modifiers.foldLeft(1F)((v, m) => m.getMutationModifier(genome, mate, v * currentModifier)) + + override def getLifespanModifier(genome: IBeeGenome, mate: IBeeGenome, currentModifier: Float): Float = + modifiers.foldLeft(1F)((v, m) => m.getLifespanModifier(genome, mate, v * currentModifier)) + + override def getProductionModifier(genome: IBeeGenome, currentModifier: Float): Float = + modifiers.foldLeft(1F)((v, m) => m.getProductionModifier(genome, v * currentModifier)) + + override def getFloweringModifier(genome: IBeeGenome, currentModifier: Float): Float = + modifiers.foldLeft(1F)((v, m) => m.getFloweringModifier(genome, v * currentModifier)) + + override def getGeneticDecay(genome: IBeeGenome, currentModifier: Float): Float = + modifiers.foldLeft(1F)((v, m) => m.getGeneticDecay(genome, v * currentModifier)) + + override def isSealed: Boolean = modifiers.exists(_.isSealed) + override def isSelfLighted: Boolean = modifiers.exists(_.isSelfLighted) + override def isSunlightSimulated: Boolean = modifiers.exists(_.isSunlightSimulated) + override def isHellish: Boolean = modifiers.exists(_.isHellish) +} + +object BeeModifiers { + def from(beeHousing: IBeeHousing) = BeeModifiers(beeHousing.getBeeModifiers) +} \ No newline at end of file