diff options
| author | Alexdoru <57050655+Alexdoru@users.noreply.github.com> | 2024-10-09 18:11:00 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-09 18:11:00 +0200 |
| commit | d2a9ed7be356fda78de11a5bceedec501a9f1ffc (patch) | |
| tree | 68e0141f05d6f52b53c2906c2a6deeacfac05d36 /src/main/java/gtPlusPlus/xmod/gregtech/common | |
| parent | b27b4c35fb01bdabe29abf780486475e2d758e9c (diff) | |
| download | GT5-Unofficial-d2a9ed7be356fda78de11a5bceedec501a9f1ffc.tar.gz GT5-Unofficial-d2a9ed7be356fda78de11a5bceedec501a9f1ffc.tar.bz2 GT5-Unofficial-d2a9ed7be356fda78de11a5bceedec501a9f1ffc.zip | |
Remove tremendous and useless RAM allocation from GT++ algae pond recipes (#3338)
Diffstat (limited to 'src/main/java/gtPlusPlus/xmod/gregtech/common')
| -rw-r--r-- | src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/MTEAlgaePondBase.java | 156 |
1 files changed, 141 insertions, 15 deletions
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/MTEAlgaePondBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/MTEAlgaePondBase.java index 6b266908ce..01369df1f3 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/MTEAlgaePondBase.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/MTEAlgaePondBase.java @@ -9,6 +9,7 @@ import static gregtech.api.enums.HatchElement.InputHatch; import static gregtech.api.enums.HatchElement.OutputBus; import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import java.util.ArrayList; import java.util.stream.Stream; import javax.annotation.Nonnull; @@ -30,6 +31,7 @@ import com.gtnewhorizon.structurelib.structure.StructureDefinition; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.enums.SoundResource; import gregtech.api.enums.TAE; import gregtech.api.interfaces.IIconContainer; @@ -51,17 +53,19 @@ import gtPlusPlus.core.block.ModBlocks; import gtPlusPlus.core.config.Configuration; import gtPlusPlus.core.item.chemistry.AgriculturalChem; import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoaderAlgaeFarm; import ic2.core.init.BlocksItems; import ic2.core.init.InternalName; import tectech.thing.casing.TTCasingsContainer; public class MTEAlgaePondBase extends GTPPMultiBlockBase<MTEAlgaePondBase> implements ISurvivalConstructable { + // TODO add a NEI handler for this machine + private int mLevel = -1; private int mCasing; private static IStructureDefinition<MTEAlgaePondBase> STRUCTURE_DEFINITION = null; @@ -336,8 +340,7 @@ public class MTEAlgaePondBase extends GTPPMultiBlockBase<MTEAlgaePondBase> imple @Nonnull @Override protected Stream<GTRecipe> findRecipeMatches(@Nullable RecipeMap<?> map) { - return GTStreamUtil - .ofNullable(RecipeLoaderAlgaeFarm.getTieredRecipeFromCache(mLevel, isUsingCompost(inputItems))); + return GTStreamUtil.ofNullable(getTieredRecipe(mLevel, inputItems)); } @NotNull @@ -352,18 +355,6 @@ public class MTEAlgaePondBase extends GTPPMultiBlockBase<MTEAlgaePondBase> imple .setMaxParallelSupplier(this::getMaxParallelRecipes); } - private boolean isUsingCompost(ItemStack[] aItemInputs) { - ItemStack aCompost = ItemUtils.getSimpleStack(AgriculturalChem.mCompost, 1); - for (ItemStack i : aItemInputs) { - if (GTUtility.areStacksEqual(aCompost, i)) { - if (i.stackSize >= RecipeLoaderAlgaeFarm.compostForTier(mLevel)) { - return true; - } - } - } - return false; - } - private int getCasingTier() { if (this.getBaseMetaTileEntity() .getWorld() == null) { @@ -398,4 +389,139 @@ public class MTEAlgaePondBase extends GTPPMultiBlockBase<MTEAlgaePondBase> imple protected SoundResource getActivitySoundLoop() { return SoundResource.GT_MACHINES_ALGAE_LOOP; } + + private static GTRecipe getTieredRecipe(int aTier, ItemStack[] aItemInputs) { + return generateBaseRecipe(aTier, isUsingCompost(aItemInputs, aTier)); + } + + private static boolean isUsingCompost(ItemStack[] aItemInputs, int aTier) { + ItemStack aCompost = ItemUtils.getSimpleStack(AgriculturalChem.mCompost, 1); + final int compostForTier = compostForTier(aTier); + int compostFound = 0; + for (ItemStack i : aItemInputs) { + if (GTUtility.areStacksEqual(aCompost, i)) { + compostFound += i.stackSize; + if (compostFound >= compostForTier) { + return true; + } + } + } + return false; + } + + private static int compostForTier(int aTier) { + return aTier > 1 ? (int) Math.min(64, Math.pow(2, aTier - 1)) : 1; + } + + private static GTRecipe generateBaseRecipe(int aTier, boolean isUsingCompost) { + + if (aTier < 0) return null; // Type Safety + + final ItemStack[] aInputs; + if (isUsingCompost) { + // Make it use 4 compost per tier if we have some available + // Compost consumption maxes out at 1 stack per cycle + ItemStack aCompost = ItemUtils.getSimpleStack(AgriculturalChem.mCompost, compostForTier(aTier)); + aInputs = new ItemStack[] { aCompost }; + // Boost Tier by one if using compost, so it gets a speed boost + aTier++; + } else { + aInputs = new ItemStack[] {}; + } + + ItemStack[] aOutputs = getOutputsForTier(aTier); + GTRecipe tRecipe = new GTRecipe( + false, + aInputs, + aOutputs, + null, + new int[] {}, + new FluidStack[] { GTValues.NF }, + new FluidStack[] { GTValues.NF }, + getRecipeDuration(aTier), + 0, + 0); + tRecipe.mSpecialValue = tRecipe.hashCode(); + return tRecipe; + } + + private static final int[] aDurations = new int[] { 2000, 1800, 1600, 1400, 1200, 1000, 512, 256, 128, 64, 32, 16, + 8, 4, 2, 1 }; + + private static int getRecipeDuration(int aTier) { + final float randFloat = GTPPCore.RANDOM.nextFloat(); + float randMult; + if (randFloat < 0.96237624) randMult = 1f; + else if (randFloat < 0.9912871) randMult = 2f; + else randMult = 3f; + return (int) (aDurations[aTier] * randMult / 2); + } + + private static ItemStack[] getOutputsForTier(int aTier) { + ArrayList<ItemStack> outputList = new ArrayList<>(); + + if (aTier >= 0) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 2)); + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 4)); + if (MathUtils.randInt(0, 10) > 9) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 2)); + } + } + if (aTier >= 1) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 4)); + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 2)); + if (MathUtils.randInt(0, 10) > 9) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 4)); + } + } + if (aTier >= 2) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 2)); + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 3)); + if (MathUtils.randInt(0, 10) > 9) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 8)); + } + } + if (aTier >= 3) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 4)); + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 1)); + if (MathUtils.randInt(0, 10) > 9) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 4)); + } + } + if (aTier >= 4) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 2)); + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 3)); + if (MathUtils.randInt(0, 10) > 9) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, 4)); + } + } + if (aTier >= 5) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 4)); + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, 2)); + if (MathUtils.randInt(0, 10) > 9) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, 4)); + } + } + if (aTier >= 6) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, 4)); + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, 2)); + if (MathUtils.randInt(0, 10) > 9) { + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, 8)); + } + // Iterate a special loop at higher tiers to provide more Red/Gold Algae. + for (int i = 0; i < 20; i++) { + if (aTier >= (6 + i)) { + int aMulti = i + 1; + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, aMulti * 4)); + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, aMulti * 3)); + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, aMulti * 2)); + outputList.add(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, aMulti)); + } else { + break; + } + } + } + + return outputList.toArray(new ItemStack[0]); + } } |
