From b8d12e37bf27736ed7d327de8fff3a19a2b61a7f Mon Sep 17 00:00:00 2001 From: Astatine5985 <63466861+Astatine5985@users.noreply.github.com> Date: Fri, 17 Jan 2025 05:50:35 +1300 Subject: [PATCH] Isolator crash fix revision (#56) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> (cherry picked from commit 5f1b5daa2433e3c6507e4297b03a34674c56be50) --- .../isolator/IsolatorComponentLogic.java | 33 ++++++++----------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/src/main/java/binnie/genetics/machine/isolator/IsolatorComponentLogic.java b/src/main/java/binnie/genetics/machine/isolator/IsolatorComponentLogic.java index 532b7f3c..e10a0b1f 100644 --- a/src/main/java/binnie/genetics/machine/isolator/IsolatorComponentLogic.java +++ b/src/main/java/binnie/genetics/machine/isolator/IsolatorComponentLogic.java @@ -1,12 +1,11 @@ package binnie.genetics.machine.isolator; +import java.util.Arrays; +import java.util.Objects; import java.util.Random; import net.minecraft.item.ItemStack; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - import binnie.core.genetics.Gene; import binnie.core.machines.Machine; import binnie.core.machines.inventory.IChargedSlots; @@ -17,14 +16,13 @@ import binnie.genetics.item.ItemSequence; import forestry.api.genetics.AlleleManager; import forestry.api.genetics.IAllele; +import forestry.api.genetics.IChromosome; import forestry.api.genetics.IChromosomeType; import forestry.api.genetics.IIndividual; import forestry.api.genetics.ISpeciesRoot; public class IsolatorComponentLogic extends ComponentProcessSetCost implements IProcess { - private static final Logger LOG = LogManager.getLogger("Genetics"); - protected float enzymePerProcess = 0.5f; protected float ethanolPerProcess = 10.0f; @@ -83,22 +81,19 @@ protected void onFinishTask() { } final IChromosomeType[] karyo = root.getKaryotype(); - final IChromosomeType chromosome = karyo[rand.nextInt(karyo.length)]; - final IAllele allele; - try { - allele = rand.nextBoolean() ? individual.getGenome().getActiveAllele(chromosome) - : individual.getGenome().getInactiveAllele(chromosome); - } catch (NullPointerException npe) { - // just return and eat the power without eating the rest of it - LOG.warn( - "NPE occurred on unknown gene: name: " + chromosome.getName() - + " | ordinal: " - + chromosome.ordinal() - + " | is null? " - + (individual.getGenome().getChromosomes()[chromosome.ordinal()] == null ? "true" - : "false")); + + final IChromosome[] chromosomes = individual.getGenome().getChromosomes(); + if (Arrays.stream(chromosomes).allMatch(Objects::isNull)) { return; } + + IChromosomeType chromosome; + do { + chromosome = karyo[rand.nextInt(karyo.length)]; + } while (chromosomes[chromosome.ordinal()] == null); + + final IAllele allele = rand.nextBoolean() ? individual.getGenome().getActiveAllele(chromosome) + : individual.getGenome().getInactiveAllele(chromosome); final Gene gene = new Gene(allele, chromosome, root); ItemStack serum = ItemSequence.create(gene);