Search in sources :

Example 46 with ISpeciesRoot

use of forestry.api.genetics.ISpeciesRoot in project Binnie by ForestryMC.

the class InoculatorRecipeMaker method create.

public static List<InoculatorRecipeWrapper> create() {
    List<InoculatorRecipeWrapper> recipes = new ArrayList<>();
    for (IBreedingSystem system : Binnie.GENETICS.getActiveSystems()) {
        ISpeciesRoot root = system.getSpeciesRoot();
        IChromosomeType speciesChromosomeType = root.getSpeciesChromosomeType();
        IAllele[] defaultTemplate = root.getDefaultTemplate();
        IIndividual individual = root.templateAsIndividual(defaultTemplate);
        for (ISpeciesType speciesType : system.getActiveTypes()) {
            if (system.isDNAManipulable(speciesType)) {
                ItemStack memberStack = root.getMemberStack(individual, speciesType);
                memberStack.setItemDamage(OreDictionary.WILDCARD_VALUE);
                IAllele species = defaultTemplate[speciesChromosomeType.ordinal()];
                ItemStack serum = ItemSerum.create(new Gene(species, speciesChromosomeType, root));
                // set fully charged
                serum.setItemDamage(0);
                recipes.add(new InoculatorRecipeWrapper(serum, memberStack));
                recipes.add(new SplicerRecipeWrapper(serum, memberStack));
                ItemStack serumArray = ItemSerumArray.create(new Gene(species, speciesChromosomeType, root));
                // set fully charged
                serumArray.setItemDamage(0);
                for (IChromosomeType chromosomeType : root.getKaryotype()) {
                    if (chromosomeType != speciesChromosomeType) {
                        IAllele allele = defaultTemplate[chromosomeType.ordinal()];
                        Engineering.addGene(serumArray, new Gene(allele, chromosomeType, root));
                    }
                }
                recipes.add(new InoculatorRecipeWrapper(serumArray, memberStack));
                recipes.add(new SplicerRecipeWrapper(serumArray, memberStack));
            }
        }
    }
    return recipes;
}
Also used : IIndividual(forestry.api.genetics.IIndividual) ISpeciesType(forestry.api.genetics.ISpeciesType) ArrayList(java.util.ArrayList) IBreedingSystem(binnie.core.api.genetics.IBreedingSystem) IAllele(forestry.api.genetics.IAllele) ISpeciesRoot(forestry.api.genetics.ISpeciesRoot) Gene(binnie.core.genetics.Gene) IChromosomeType(forestry.api.genetics.IChromosomeType) ItemStack(net.minecraft.item.ItemStack)

Example 47 with ISpeciesRoot

use of forestry.api.genetics.ISpeciesRoot in project Binnie by ForestryMC.

the class IsolatorRecipeMaker method create.

public static List<IsolatorRecipeWrapper> create() {
    List<IsolatorRecipeWrapper> recipes = new ArrayList<>();
    Collection<ISpeciesRoot> roots = AlleleManager.alleleRegistry.getSpeciesRoot().values();
    for (ISpeciesRoot root : roots) {
        ISpeciesType[] speciesTypes = root.getIconType().getClass().getEnumConstants();
        IChromosomeType speciesChromosomeType = root.getSpeciesChromosomeType();
        IAllele[] defaultTemplate = root.getDefaultTemplate();
        IIndividual individual = root.templateAsIndividual(defaultTemplate);
        for (ISpeciesType speciesType : speciesTypes) {
            ItemStack memberStack = root.getMemberStack(individual, speciesType);
            memberStack.setItemDamage(OreDictionary.WILDCARD_VALUE);
            IAllele species = defaultTemplate[speciesChromosomeType.ordinal()];
            ItemStack filledSequence = ItemSequence.create(new Gene(species, speciesChromosomeType, root), false);
            IsolatorRecipeWrapper recipeWrapper = new IsolatorRecipeWrapper(memberStack, filledSequence);
            recipes.add(recipeWrapper);
        }
    }
    return recipes;
}
Also used : IIndividual(forestry.api.genetics.IIndividual) ISpeciesType(forestry.api.genetics.ISpeciesType) ArrayList(java.util.ArrayList) IAllele(forestry.api.genetics.IAllele) ISpeciesRoot(forestry.api.genetics.ISpeciesRoot) Gene(binnie.core.genetics.Gene) IChromosomeType(forestry.api.genetics.IChromosomeType) ItemStack(net.minecraft.item.ItemStack)

Example 48 with ISpeciesRoot

use of forestry.api.genetics.ISpeciesRoot in project Binnie by ForestryMC.

the class GeneTracker method writeToNBT.

@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
    for (ISpeciesRoot root : AlleleManager.alleleRegistry.getSpeciesRoot().values()) {
        NBTTagCompound nbtRoot = new NBTTagCompound();
        for (IChromosomeType chromo : root.getKaryotype()) {
            NBTTagList nbtChromo = new NBTTagList();
            for (IGene gene : discoveredGenes) {
                if (gene.getSpeciesRoot() == root && gene.getChromosome() == chromo) {
                    nbtChromo.appendTag(new NBTTagString(gene.getAllele().getUID()));
                }
            }
            nbtRoot.setTag(String.valueOf(chromo.ordinal()), nbtChromo);
        }
        nbt.setTag(root.getUID(), nbtRoot);
    }
    return nbt;
}
Also used : NBTTagList(net.minecraft.nbt.NBTTagList) ISpeciesRoot(forestry.api.genetics.ISpeciesRoot) NBTTagCompound(net.minecraft.nbt.NBTTagCompound) IGene(binnie.core.api.genetics.IGene) NBTTagString(net.minecraft.nbt.NBTTagString) IChromosomeType(forestry.api.genetics.IChromosomeType)

Example 49 with ISpeciesRoot

use of forestry.api.genetics.ISpeciesRoot in project Binnie by ForestryMC.

the class GeneTracker method readFromNBT.

@Override
public void readFromNBT(NBTTagCompound nbt) {
    for (ISpeciesRoot root : AlleleManager.alleleRegistry.getSpeciesRoot().values()) {
        if (!nbt.hasKey(root.getUID())) {
            continue;
        }
        NBTTagCompound nbtRoot = nbt.getCompoundTag(root.getUID());
        for (IChromosomeType chromo : root.getKaryotype()) {
            if (!nbtRoot.hasKey(String.valueOf(chromo.ordinal()))) {
                continue;
            }
            NBTTagList nbtChromo = nbtRoot.getTagList(String.valueOf(chromo.ordinal()), 8);
            for (int i = 0; i < nbtChromo.tagCount(); ++i) {
                String uid = nbtChromo.getStringTagAt(i);
                IAllele allele = AlleleManager.alleleRegistry.getAllele(uid);
                if (allele == null) {
                    continue;
                }
                Gene gene = new Gene(allele, chromo, root);
                if (!discoveredGenes.contains(gene)) {
                    discoveredGenes.add(gene);
                }
            }
        }
    }
}
Also used : NBTTagList(net.minecraft.nbt.NBTTagList) IAllele(forestry.api.genetics.IAllele) ISpeciesRoot(forestry.api.genetics.ISpeciesRoot) Gene(binnie.core.genetics.Gene) IGene(binnie.core.api.genetics.IGene) NBTTagCompound(net.minecraft.nbt.NBTTagCompound) IChromosomeType(forestry.api.genetics.IChromosomeType) NBTTagString(net.minecraft.nbt.NBTTagString)

Aggregations

ISpeciesRoot (forestry.api.genetics.ISpeciesRoot)49 IIndividual (forestry.api.genetics.IIndividual)30 ItemStack (net.minecraft.item.ItemStack)20 IAllele (forestry.api.genetics.IAllele)17 IChromosomeType (forestry.api.genetics.IChromosomeType)11 Gene (binnie.core.genetics.Gene)10 IBreedingTracker (forestry.api.genetics.IBreedingTracker)7 IGenome (forestry.api.genetics.IGenome)7 ArrayList (java.util.ArrayList)7 IBreedingSystem (binnie.core.api.genetics.IBreedingSystem)6 ISpeciesType (forestry.api.genetics.ISpeciesType)6 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)6 IGene (binnie.core.api.genetics.IGene)4 IAlleleSpecies (forestry.api.genetics.IAlleleSpecies)4 IFilterData (forestry.api.genetics.IFilterData)3 List (java.util.List)3 Random (java.util.Random)3 Nullable (javax.annotation.Nullable)3 IGeneItem (binnie.genetics.genetics.IGeneItem)2 ForestryEvent (forestry.api.core.ForestryEvent)2