use of forestry.api.arboriculture.ITreeMutation in project Binnie by ForestryMC.
the class TreeBreedingSystem method getChance.
@Override
public float getChance(final IMutation mutation, final EntityPlayer player, final IAlleleSpecies firstSpecies, final IAlleleSpecies secondSpecies) {
ISpeciesRoot speciesRoot = this.getSpeciesRoot();
final ITreeGenome genome0 = (ITreeGenome) speciesRoot.templateAsGenome(speciesRoot.getTemplate(firstSpecies));
final ITreeGenome genome2 = (ITreeGenome) speciesRoot.templateAsGenome(speciesRoot.getTemplate(secondSpecies));
return ((ITreeMutation) mutation).getChance(player.world, player.getPosition(), (IAlleleTreeSpecies) firstSpecies, (IAlleleTreeSpecies) secondSpecies, genome0, genome2);
}
use of forestry.api.arboriculture.ITreeMutation in project ForestryMC by ForestryMC.
the class Tree method mutateSpecies.
@Nullable
private static IChromosome[] mutateSpecies(World world, @Nullable GameProfile playerProfile, BlockPos pos, ITreeGenome genomeOne, ITreeGenome genomeTwo) {
IChromosome[] parent1 = genomeOne.getChromosomes();
IChromosome[] parent2 = genomeTwo.getChromosomes();
ITreeGenome genome0;
ITreeGenome genome1;
IAlleleTreeSpecies allele0;
IAlleleTreeSpecies allele1;
if (world.rand.nextBoolean()) {
allele0 = (IAlleleTreeSpecies) parent1[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele();
allele1 = (IAlleleTreeSpecies) parent2[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele();
genome0 = genomeOne;
genome1 = genomeTwo;
} else {
allele0 = (IAlleleTreeSpecies) parent2[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele();
allele1 = (IAlleleTreeSpecies) parent1[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele();
genome0 = genomeTwo;
genome1 = genomeOne;
}
IArboristTracker breedingTracker = null;
if (playerProfile != null) {
breedingTracker = TreeManager.treeRoot.getBreedingTracker(world, playerProfile);
}
List<IMutation> combinations = TreeManager.treeRoot.getCombinations(allele0, allele1, true);
for (IMutation mutation : combinations) {
ITreeMutation treeMutation = (ITreeMutation) mutation;
// Stop blacklisted species.
// if (BeeManager.breedingManager.isBlacklisted(mutation.getTemplate()[0].getUID())) {
// continue;
// }
float chance = treeMutation.getChance(world, pos, allele0, allele1, genome0, genome1);
if (chance <= 0) {
continue;
}
// boost chance for researched mutations
if (breedingTracker != null && breedingTracker.isResearched(treeMutation)) {
float mutationBoost = chance * (Config.researchMutationBoostMultiplier - 1.0f);
mutationBoost = Math.min(Config.maxResearchMutationBoostPercent, mutationBoost);
chance += mutationBoost;
}
if (chance > world.rand.nextFloat() * 100) {
return TreeManager.treeRoot.templateAsChromosomes(treeMutation.getTemplate());
}
}
return null;
}
Aggregations