use of forestry.api.genetics.IIndividual in project ForestryMC by ForestryMC.
the class SpeciesWidget method handleMouseClick.
@Override
public void handleMouseClick(int mouseX, int mouseY, int mouseButton) {
ItemStack stack = gui.mc.player.inventory.getItemStack();
if (!stack.isEmpty()) {
IIndividual individual = AlleleManager.alleleRegistry.getIndividual(stack);
if (individual != null) {
IGenome genome = individual.getGenome();
onSelect(mouseButton == 0 ? genome.getPrimary() : genome.getSecondary());
return;
}
}
if (mouseButton == 1) {
onSelect(null);
} else {
SoundUtil.playButtonClick();
gui.onModuleClick(this);
}
}
use of forestry.api.genetics.IIndividual in project ForestryMC by ForestryMC.
the class FilterLogic method getValidDirections.
public Collection<EnumFacing> getValidDirections(ItemStack itemStack, EnumFacing from) {
ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(itemStack);
IIndividual individual = null;
ISpeciesType type = null;
if (root != null) {
individual = root.getMember(itemStack);
type = root.getType(itemStack);
}
IFilterData filterData = new FilterData(root, individual, type);
List<EnumFacing> validFacings = new LinkedList<>();
for (EnumFacing facing : EnumFacing.VALUES) {
if (facing == from) {
continue;
}
if (isValid(facing, itemStack, filterData)) {
validFacings.add(facing);
}
}
return validFacings;
}
use of forestry.api.genetics.IIndividual in project Binnie by ForestryMC.
the class IsolatorLogic method onFinishTask.
@Override
protected void onFinishTask() {
super.onFinishTask();
final Random rand = this.getMachine().getWorld().rand;
MachineUtil util = this.getUtil();
final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(util.getStack(Isolator.SLOT_TARGET));
if (root == null) {
return;
}
final IIndividual individual = root.getMember(util.getStack(Isolator.SLOT_TARGET));
if (individual == null) {
return;
}
IChromosomeType[] karyotype = root.getKaryotype();
IChromosomeType chromosome = karyotype[rand.nextInt(karyotype.length)];
IGenome genome = individual.getGenome();
IAllele allele = rand.nextBoolean() ? genome.getActiveAllele(chromosome) : genome.getInactiveAllele(chromosome);
Gene gene = Gene.create(allele, chromosome, root);
final ItemStack serum = ItemSequence.create(gene);
util.setStack(Isolator.SLOT_RESULUT, serum);
util.decreaseStack(Isolator.SLOT_SEQUENCER_VIAL, 1);
if (rand.nextFloat() < TARGET_LOSS_CHANCE) {
util.decreaseStack(Isolator.SLOT_TARGET, 1);
}
util.drainTank(Isolator.TANK_ETHANOL, ETHANOL_PER_PROCESS);
}
use of forestry.api.genetics.IIndividual in project Binnie by ForestryMC.
the class InoculatorLogic method isValidSerum.
@Nullable
public ErrorState isValidSerum() {
final ItemStack serum = this.getUtil().getStack(Inoculator.SLOT_SERUM_VIAL);
final ItemStack target = this.getUtil().getStack(Inoculator.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);
if (individual != null) {
final IGenome genome = individual.getGenome();
for (final IGene gene : genes) {
final IAllele a = genome.getActiveAllele(gene.getChromosome());
final IAllele b = genome.getInactiveAllele(gene.getChromosome());
if (!a.getUID().equals(gene.getAllele().getUID()) || !b.getUID().equals(gene.getAllele().getUID())) {
return null;
}
}
}
return new ErrorState(GeneticsErrorCode.DEFUNCT_SERUM);
}
use of forestry.api.genetics.IIndividual in project Binnie by ForestryMC.
the class ToleranceSystem method alter.
public ItemStack alter(final ItemStack stack, final ItemStack acc) {
final Random rand = new Random();
final float effect = this.type.getEffect(acc);
if (rand.nextFloat() > Math.abs(effect)) {
return stack;
}
final IIndividual member = AlleleManager.alleleRegistry.getIndividual(stack);
final IGenome genome = member.getGenome();
final IAlleleTolerance tolAllele = (IAlleleTolerance) genome.getActiveAllele(this.chromosomeType);
final Tolerance tol = Tolerance.get(tolAllele.getValue());
final Tolerance newTol = Acclimatiser.alterTolerance(tol, effect);
if (rand.nextFloat() > 1.0f / (-newTol.getBounds()[0] + newTol.getBounds()[1])) {
return stack;
}
final ISpeciesRoot root = AlleleManager.alleleRegistry.getSpeciesRoot(stack);
boolean setPrimary = rand.nextBoolean();
boolean setSecondary = !setPrimary;
Gene gene = new Gene(newTol.getAllele(), this.chromosomeType, root);
Splicer.setGene(gene, stack, setPrimary, setSecondary);
return stack;
}
Aggregations