diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java index 8ffedca5b37..1bc4e3cea70 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -219,4 +219,27 @@ public static void setBuilt(MachineDefinition state) { public static void clearBuilt() { STATE.remove(); } + + /** + * Gets the input size for a machine for the capability with the machine having the specified recipe types + */ + public int getInputSize(RecipeCapability cap, GTRecipeType... recipeTypes) { + int recipeTypeInputSize = 0; + for (var recipeType : recipeTypes) { + recipeTypeInputSize = Math.max(recipeType.getMaxInputs(cap), recipeTypeInputSize); + } + return recipeTypeInputSize; + } + + /** + * Gets the output size for a machine for the capability with the machine having the specified recipe types + */ + public int getOutputSize(RecipeCapability cap, GTRecipeType... recipeTypes) { + int recipeTypeOutputSize = 0; + for (var recipeType : recipeTypes) { + recipeTypeOutputSize = Math.max(recipeType.getMaxOutputs(cap), recipeTypeOutputSize); + } + int machineTypeOutputLimit = this.getRecipeOutputLimits().getOrDefault(cap, recipeTypeOutputSize); + return Math.min(recipeTypeOutputSize, machineTypeOutputLimit); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java index 212254817f0..b257a0d0e3a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java @@ -125,15 +125,17 @@ public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, boolean ene this.recipeLogic = attachTrait(new RecipeLogic()); this.recipeLogic.setKeepSubscribing(false); this.importItems = attachTrait( - new NotifiableItemStackHandler(getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), + new NotifiableItemStackHandler(getDefinition().getInputSize(ItemRecipeCapability.CAP, getRecipeTypes()), IO.IN, IO.BOTH)); this.exportItems = attachTrait( - new NotifiableItemStackHandler(getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), + new NotifiableItemStackHandler( + getDefinition().getOutputSize(ItemRecipeCapability.CAP, getRecipeTypes()), IO.OUT)); - this.importFluids = attachTrait(new NotifiableFluidTank(getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), - tankScalingFunction.applyAsInt(getTier()), IO.IN)); + this.importFluids = attachTrait( + new NotifiableFluidTank(getDefinition().getInputSize(FluidRecipeCapability.CAP, getRecipeTypes()), + tankScalingFunction.applyAsInt(getTier()), IO.IN)); this.exportFluids = attachTrait( - new NotifiableFluidTank(getRecipeType().getMaxOutputs(FluidRecipeCapability.CAP), + new NotifiableFluidTank(getDefinition().getOutputSize(FluidRecipeCapability.CAP, getRecipeTypes()), tankScalingFunction.applyAsInt(getTier()), IO.OUT)); this.importComputation = attachTrait(new NotifiableComputationContainer(IO.IN, true)); this.exportComputation = attachTrait(new NotifiableComputationContainer(IO.OUT, false)); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java index d9a6a5067ae..9345f8e0728 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java @@ -57,9 +57,12 @@ public SimpleSteamMachine(BlockEntityCreationInfo info, RecipeLogic recipeLogic, public SimpleSteamMachine(BlockEntityCreationInfo info, boolean isHighPressure) { super(info, isHighPressure); this.importItems = attachTrait( - new NotifiableItemStackHandler(getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN, IO.BOTH)); + new NotifiableItemStackHandler(getDefinition().getInputSize(ItemRecipeCapability.CAP, getRecipeTypes()), + IO.IN, IO.BOTH)); this.exportItems = attachTrait( - new NotifiableItemStackHandler(getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT)); + new NotifiableItemStackHandler( + getDefinition().getOutputSize(ItemRecipeCapability.CAP, getRecipeTypes()), + IO.OUT)); this.exhaustVentTrait = attachTrait(new ExhaustVentMachineTrait()); exhaustVentTrait.setVentingDamageAmount(isHighPressure() ? 12F : 6F); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java index 3f71b290289..8785df5554a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java @@ -70,13 +70,17 @@ public PrimitiveWorkableMachine(BlockEntityCreationInfo info, RecipeLogic recipe public PrimitiveWorkableMachine(BlockEntityCreationInfo info) { super(info); this.importItems = attachTrait( - new NotifiableItemStackHandler(getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN)); + new NotifiableItemStackHandler(getDefinition().getInputSize(ItemRecipeCapability.CAP, getRecipeTypes()), + IO.IN)); this.exportItems = attachTrait( - new NotifiableItemStackHandler(getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT)); - this.importFluids = attachTrait(new NotifiableFluidTank(getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), - 32 * FluidType.BUCKET_VOLUME, IO.IN)); + new NotifiableItemStackHandler( + getDefinition().getOutputSize(ItemRecipeCapability.CAP, getRecipeTypes()), + IO.OUT)); + this.importFluids = attachTrait( + new NotifiableFluidTank(getDefinition().getInputSize(FluidRecipeCapability.CAP, getRecipeTypes()), + 32 * FluidType.BUCKET_VOLUME, IO.IN)); this.exportFluids = attachTrait( - new NotifiableFluidTank(getRecipeType().getMaxOutputs(FluidRecipeCapability.CAP), + new NotifiableFluidTank(getDefinition().getOutputSize(FluidRecipeCapability.CAP, getRecipeTypes()), 32 * FluidType.BUCKET_VOLUME, IO.OUT)); this.hazardEmitter = attachTrait( new EnvironmentalHazardEmitterTrait(GTMedicalConditions.CARBON_MONOXIDE_POISONING,