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"));
}
}
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;
}
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;
}
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);
}
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;
}
Aggregations