@Override public boolean canSlotAccept(int slotIndex, ItemStack itemstack) { return speciesRoot.isMember(itemstack); }
@Override @Nullable public ISpeciesRoot getSpeciesRoot(ItemStack stack) { if (stack.isEmpty()) { return null; } for (ISpeciesRoot root : rootMap.values()) { if (root.isMember(stack)) { return root; } } return null; }
@Override public boolean test(ItemStack itemStack) { ISpeciesRoot speciesRoot = AlleleManager.alleleRegistry.getSpeciesRoot(speciesRootUid); return speciesRoot != null && speciesRoot.isMember(itemStack); } }
@Override public float getResearchSuitability(ItemStack itemstack) { if (itemstack.isEmpty()) { return 0f; } if (ModuleHelper.isEnabled(ForestryModuleUids.APICULTURE)) { ItemRegistryApiculture beeItems = ModuleApiculture.getItems(); Item item = itemstack.getItem(); if (beeItems.honeyDrop == item) { return 0.5f; } else if (beeItems.honeydew == item) { return 0.7f; } else if (beeItems.beeComb == item) { return 0.4f; } } if (getRoot().isMember(itemstack)) { return 1.0f; } for (Map.Entry<ItemStack, Float> entry : getRoot().getResearchCatalysts().entrySet()) { if (ItemStackUtil.isIdenticalItem(entry.getKey(), itemstack)) { return entry.getValue(); } } return 0f; }
@Nullable private IIndividual getIndividualAtPosition(int x, int y) { Slot slot = getSlotAtPosition(x, y); if (slot == null) { return null; } if (!slot.getHasStack()) { return null; } if (!slot.getStack().hasTagCompound()) { return null; } if (!speciesRoot.isMember(slot.getStack())) { return null; } return speciesRoot.getMember(slot.getStack()); }
@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); }
@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; }