From 0778f2438eb95e15eecfdd2dcb878068bc7a28c6 Mon Sep 17 00:00:00 2001 From: mrquentin <32539717+mrquentin@users.noreply.github.com> Date: Mon, 24 Apr 2023 09:58:36 -0400 Subject: [PATCH] Add Continuous Recipe for Multiblock (#41) * Create Continuous Multiblock logic * Finish Continuous Multiblock recipe and convert Fluidized bed reactor to use it --- .../impl/ContinuousMultiblockRecipeLogic.java | 39 +++++++++++++++++++ .../SuSyMetaTileEntities.java | 5 +-- .../MetaTileEntityFluidizedBedReactor.java | 4 +- 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 src/main/java/supersymmetry/api/capability/impl/ContinuousMultiblockRecipeLogic.java diff --git a/src/main/java/supersymmetry/api/capability/impl/ContinuousMultiblockRecipeLogic.java b/src/main/java/supersymmetry/api/capability/impl/ContinuousMultiblockRecipeLogic.java new file mode 100644 index 000000000..5c4a4e5c8 --- /dev/null +++ b/src/main/java/supersymmetry/api/capability/impl/ContinuousMultiblockRecipeLogic.java @@ -0,0 +1,39 @@ +package supersymmetry.api.capability.impl; + +import gregtech.api.capability.impl.MultiblockRecipeLogic; +import gregtech.api.metatileentity.multiblock.RecipeMapMultiblockController; +import gregtech.api.recipes.Recipe; +import gregtech.api.util.GTUtility; + +public class ContinuousMultiblockRecipeLogic extends MultiblockRecipeLogic { + public ContinuousMultiblockRecipeLogic(RecipeMapMultiblockController tileEntity) { + super(tileEntity); + } + + public ContinuousMultiblockRecipeLogic(RecipeMapMultiblockController tileEntity, boolean hasPerfectOC) { + super(tileEntity, hasPerfectOC); + } + + @Override + protected boolean prepareRecipe(Recipe recipe) { + recipe = Recipe.trimRecipeOutputs(recipe, this.getRecipeMap(), this.metaTileEntity.getItemOutputLimit(), this.metaTileEntity.getFluidOutputLimit()); + + int recipeTier = GTUtility.getTierByVoltage(recipe.getEUt()); + int maximumTier = getOverclockForTier(getMaximumOverclockVoltage()); + int numberOfOCs = maximumTier - recipeTier; + double parallelLimitDouble = Math.pow(this.getOverclockingDurationDivisor(), numberOfOCs) / recipe.getDuration(); + int parallelLimit = parallelLimitDouble <= 1 ? 1 : (int) parallelLimitDouble; + + recipe = findParallelRecipe(this, recipe, + getInputInventory(), getInputTank(), + getOutputInventory(), getOutputTank(), + getMaxParallelVoltage(), parallelLimit); + + if (recipe != null && this.setupAndConsumeRecipeInputs(recipe, this.getInputInventory())) { + this.setupRecipe(recipe); + return true; + } + + return false; + } +} diff --git a/src/main/java/supersymmetry/common/metatileentities/SuSyMetaTileEntities.java b/src/main/java/supersymmetry/common/metatileentities/SuSyMetaTileEntities.java index b4132993e..e10640530 100644 --- a/src/main/java/supersymmetry/common/metatileentities/SuSyMetaTileEntities.java +++ b/src/main/java/supersymmetry/common/metatileentities/SuSyMetaTileEntities.java @@ -16,11 +16,8 @@ import supersymmetry.api.metatileentity.steam.SuSySteamProgressIndicators; import supersymmetry.api.recipes.SuSyRecipeMaps; import supersymmetry.client.renderer.textures.SusyTextures; -import supersymmetry.common.metatileentities.multi.electric.MetaTileEntityFluidizedBedReactor; -import supersymmetry.common.metatileentities.multi.electric.MetaTileEntityPolmyerizationTank; +import supersymmetry.common.metatileentities.multi.electric.*; import supersymmetry.common.metatileentities.multi.primitive.MetaTileEntityCoagulationTank; -import supersymmetry.common.metatileentities.multi.electric.MetaTileEntityMagneticRefrigerator; -import supersymmetry.common.metatileentities.multi.electric.MetaTileEntitySinteringOven; import supersymmetry.common.metatileentities.single.electric.MetaTileEntityLatexCollector; import supersymmetry.common.metatileentities.single.steam.*; diff --git a/src/main/java/supersymmetry/common/metatileentities/multi/electric/MetaTileEntityFluidizedBedReactor.java b/src/main/java/supersymmetry/common/metatileentities/multi/electric/MetaTileEntityFluidizedBedReactor.java index d6293e38d..b8a53a4a5 100644 --- a/src/main/java/supersymmetry/common/metatileentities/multi/electric/MetaTileEntityFluidizedBedReactor.java +++ b/src/main/java/supersymmetry/common/metatileentities/multi/electric/MetaTileEntityFluidizedBedReactor.java @@ -1,6 +1,5 @@ package supersymmetry.common.metatileentities.multi.electric; -import gregtech.api.capability.impl.MultiblockRecipeLogic; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; import gregtech.api.metatileentity.multiblock.IMultiblockPart; @@ -23,12 +22,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; +import supersymmetry.api.capability.impl.ContinuousMultiblockRecipeLogic; import supersymmetry.api.recipes.SuSyRecipeMaps; public class MetaTileEntityFluidizedBedReactor extends RecipeMapMultiblockController { public MetaTileEntityFluidizedBedReactor(ResourceLocation metaTileEntityId) { super(metaTileEntityId, SuSyRecipeMaps.FLUIDIZED_BED_REACTOR_RECIPES); - this.recipeMapWorkable = new MultiblockRecipeLogic(this, true); + this.recipeMapWorkable = new ContinuousMultiblockRecipeLogic(this, true); } public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) {