Search in sources :

Example 1 with IGene

use of binnie.core.api.genetics.IGene in project Binnie by ForestryMC.

the class GeneArrayItem method getInfo.

@Override
@SideOnly(Side.CLIENT)
public void getInfo(List<String> list) {
    List<String> totalList = new ArrayList<>();
    IBreedingSystem breedingSystem = getBreedingSystem();
    if (breedingSystem != null) {
        for (IGene gene : genes) {
            String chromosomeName = breedingSystem.getChromosomeName(gene.getChromosome());
            totalList.add(TextFormatting.GOLD + chromosomeName + TextFormatting.GRAY + ": " + gene.getName());
        }
    }
    if (totalList.size() < 4 || GuiScreen.isShiftKeyDown()) {
        list.addAll(totalList);
    } else {
        list.add(totalList.get(0));
        list.add(totalList.get(1));
        list.add((totalList.size() - 2) + " " + I18N.localise("genetics.item.gene.more.genes"));
    }
}
Also used : ArrayList(java.util.ArrayList) IGene(binnie.core.api.genetics.IGene) IBreedingSystem(binnie.core.api.genetics.IBreedingSystem) SideOnly(net.minecraftforge.fml.relauncher.SideOnly)

Example 2 with IGene

use of binnie.core.api.genetics.IGene in project Binnie by ForestryMC.

the class SplicerLogic method isValidSerum.

@Nullable
public ErrorState isValidSerum() {
    final ItemStack serum = this.getUtil().getStack(Splicer.SLOT_SERUM_VIAL);
    if (serum.isEmpty()) {
        return null;
    }
    final ItemStack target = this.getUtil().getStack(Splicer.SLOT_TARGET);
    final IGene[] genes = Engineering.getGenes(serum);
    if (genes.length == 0) {
        return new ErrorState(GeneticsErrorCode.INVALID_SERUM_NO);
    }
    if (!genes[0].getSpeciesRoot().isMember(target)) {
        return new ErrorState(GeneticsErrorCode.INVALID_SERUM_MISMATCH);
    }
    final IIndividual individual = genes[0].getSpeciesRoot().getMember(target);
    boolean hasAll = true;
    for (final IGene gene : genes) {
        if (hasAll) {
            final IAllele a = individual.getGenome().getActiveAllele(gene.getChromosome());
            final IAllele b = individual.getGenome().getInactiveAllele(gene.getChromosome());
            hasAll = (hasAll && a.getUID().equals(gene.getAllele().getUID()) && b.getUID().equals(gene.getAllele().getUID()));
        }
    }
    if (hasAll) {
        return new ErrorState(GeneticsErrorCode.DEFUNCT_SERUM);
    }
    return null;
}
Also used : IAllele(forestry.api.genetics.IAllele) IIndividual(forestry.api.genetics.IIndividual) ErrorState(binnie.core.machines.errors.ErrorState) IGene(binnie.core.api.genetics.IGene) ItemStack(net.minecraft.item.ItemStack) Nullable(javax.annotation.Nullable)

Example 3 with IGene

use of binnie.core.api.genetics.IGene in project Binnie by ForestryMC.

the class SplicerLogic method getGenesToUse.

public static int getGenesToUse(ItemStack serum, ItemStack target) {
    if (serum.isEmpty() || target.isEmpty()) {
        return 1;
    }
    final IIndividual ind = AlleleManager.alleleRegistry.getIndividual(target);
    final IGene[] genes = ((IItemSerum) serum.getItem()).getGenes(serum);
    if (ind.getGenome().getSpeciesRoot() != ((IItemSerum) serum.getItem()).getSpeciesRoot(serum)) {
        return 1;
    }
    int i = 0;
    for (final IGene gene : genes) {
        if (ind.getGenome().getActiveAllele(gene.getChromosome()) != gene.getAllele() || ind.getGenome().getInactiveAllele(gene.getChromosome()) != gene.getAllele()) {
            ++i;
        }
    }
    return (i < 1) ? 1 : i;
}
Also used : IIndividual(forestry.api.genetics.IIndividual) IGene(binnie.core.api.genetics.IGene) IItemSerum(binnie.genetics.api.IItemSerum)

Example 4 with IGene

use of binnie.core.api.genetics.IGene in project Binnie by ForestryMC.

the class SplicerLogic method onFinishTask.

@Override
protected void onFinishTask() {
    super.onFinishTask();
    final ItemStack serum = this.getUtil().getStack(Splicer.SLOT_SERUM_VIAL);
    Preconditions.checkState(!serum.isEmpty());
    final ItemStack target = this.getUtil().getStack(Splicer.SLOT_TARGET);
    Preconditions.checkState(!target.isEmpty());
    final IGene[] genes = ((IItemSerum) serum.getItem()).getGenes(serum);
    for (final IGene gene : genes) {
        Splicer.setGene(gene, target, true, true);
    }
    this.getUtil().damageItem(serum, Splicer.SLOT_SERUM_VIAL, 1);
}
Also used : IGene(binnie.core.api.genetics.IGene) IItemSerum(binnie.genetics.api.IItemSerum) ItemStack(net.minecraft.item.ItemStack)

Example 5 with IGene

use of binnie.core.api.genetics.IGene in project Binnie by ForestryMC.

the class InoculatorLogic method applySerum.

public static ItemStack applySerum(ItemStack target, ItemStack serum) {
    ItemStack applied = target.copy();
    final IGene[] genes = ((IItemSerum) serum.getItem()).getGenes(serum);
    for (final IGene gene : genes) {
        Splicer.setGene(gene, applied, true, true);
    }
    return applied;
}
Also used : IGene(binnie.core.api.genetics.IGene) IItemSerum(binnie.genetics.api.IItemSerum) ItemStack(net.minecraft.item.ItemStack)

Aggregations

IGene (binnie.core.api.genetics.IGene)10 ItemStack (net.minecraft.item.ItemStack)4 IItemSerum (binnie.genetics.api.IItemSerum)3 IIndividual (forestry.api.genetics.IIndividual)3 IBreedingSystem (binnie.core.api.genetics.IBreedingSystem)2 ErrorState (binnie.core.machines.errors.ErrorState)2 IAllele (forestry.api.genetics.IAllele)2 Nullable (javax.annotation.Nullable)2 NBTTagList (net.minecraft.nbt.NBTTagList)2 GeneItem (binnie.genetics.genetics.GeneItem)1 IGeneItem (binnie.genetics.genetics.IGeneItem)1 IChromosomeType (forestry.api.genetics.IChromosomeType)1 IGenome (forestry.api.genetics.IGenome)1 ISpeciesRoot (forestry.api.genetics.ISpeciesRoot)1 ArrayList (java.util.ArrayList)1 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)1 NBTTagString (net.minecraft.nbt.NBTTagString)1 SideOnly (net.minecraftforge.fml.relauncher.SideOnly)1