aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/bees/GT_Bee_Mutation.java
diff options
context:
space:
mode:
authorbartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com>2018-09-22 01:43:19 +0200
committerbartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com>2018-09-22 01:43:19 +0200
commit7871a490b84e8bd35f4e8f2671c5f5ea85c7728d (patch)
treea616d6a203381da51fa6c2fccc36d7fef5a80cdd /src/main/java/gregtech/common/bees/GT_Bee_Mutation.java
parent6b8fd21f4a387cd3b2f1b7eb7c5354b9ebaf674b (diff)
downloadGT5-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.java75
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;
+ }
+}