diff options
author | bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> | 2018-09-22 01:43:19 +0200 |
---|---|---|
committer | bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> | 2018-09-22 01:43:19 +0200 |
commit | 7871a490b84e8bd35f4e8f2671c5f5ea85c7728d (patch) | |
tree | a616d6a203381da51fa6c2fccc36d7fef5a80cdd /src/main/java/gregtech/common/bees/GT_Bee_Mutation.java | |
parent | 6b8fd21f4a387cd3b2f1b7eb7c5354b9ebaf674b (diff) | |
download | GT5-Unofficial-7871a490b84e8bd35f4e8f2671c5f5ea85c7728d.tar.gz GT5-Unofficial-7871a490b84e8bd35f4e8f2671c5f5ea85c7728d.tar.bz2 GT5-Unofficial-7871a490b84e8bd35f4e8f2671c5f5ea85c7728d.zip |
+added <1% bee mutation rate
+fixed crashing w/o mods for bees
Diffstat (limited to 'src/main/java/gregtech/common/bees/GT_Bee_Mutation.java')
-rw-r--r-- | src/main/java/gregtech/common/bees/GT_Bee_Mutation.java | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/bees/GT_Bee_Mutation.java b/src/main/java/gregtech/common/bees/GT_Bee_Mutation.java new file mode 100644 index 0000000000..852f00e6d6 --- /dev/null +++ b/src/main/java/gregtech/common/bees/GT_Bee_Mutation.java @@ -0,0 +1,75 @@ +package gregtech.common.bees; + +import forestry.api.apiculture.*; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IGenome; +import forestry.api.genetics.IMutationCondition; +import forestry.apiculture.genetics.BeeMutation; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.World; + +import java.lang.reflect.Field; +import java.util.List; + + +public class GT_Bee_Mutation extends BeeMutation { + + private int split = 1; + + public GT_Bee_Mutation(IAlleleBeeSpecies bee0, IAlleleBeeSpecies bee1, IAllele[] result, int chance, int split) { + super(bee0, bee1, result, chance); + this.split = split; + BeeManager.beeRoot.registerMutation(this); + } + + @Override + public float getBaseChance() { + return ((float) ((float)super.getBaseChance() / ((float)split))); + } + + @Override + public float getChance(IBeeHousing housing, IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, IBeeGenome genome0, IBeeGenome genome1) { + World world = housing.getWorld(); + ChunkCoordinates housingCoordinates = housing.getCoordinates(); + int x = housingCoordinates.posX; + int y = housingCoordinates.posY; + int z = housingCoordinates.posZ; + + float processedChance = getbasicChance(world, x, y, z, allele0, allele1, genome0, genome1); + + + if (processedChance <= 0f) { + return 0f; + } + + IBeeModifier beeHousingModifier = BeeManager.beeRoot.createBeeHousingModifier(housing); + IBeeModifier beeModeModifier = BeeManager.beeRoot.getBeekeepingMode(world).getBeeModifier(); + + processedChance *= beeHousingModifier.getMutationModifier(genome0, genome1, processedChance); + processedChance *= beeModeModifier.getMutationModifier(genome0, genome1, processedChance); + + return processedChance; + } + + protected float getbasicChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0, IGenome genome1) { + float mutationChance = getBaseChance(); + List<IMutationCondition> mutationConditions = null; + try { + Field f = this.getClass().getDeclaredField("mutationConditions"); + f.setAccessible(true); + Object o = f.get(this); + mutationConditions = o instanceof List ? (List) o : null ; + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + + if (mutationConditions != null) + for (IMutationCondition mutationCondition : mutationConditions) { + mutationChance *= mutationCondition.getChance(world, x, y, z, allele0, allele1, genome0, genome1); + if (mutationChance == 0) { + return 0; + } + } + return mutationChance; + } +} |