From f4e27ca55eb83b6be8a50ec491cae0b922176711 Mon Sep 17 00:00:00 2001 From: htmlcsjs <46023024+htmlcsjs@users.noreply.github.com> Date: Sat, 11 Jul 2026 20:59:46 +0100 Subject: [PATCH 1/4] Fix machine type limits not being applied --- .../gtceu/api/machine/WorkableTieredMachine.java | 12 +++++++++--- .../gtceu/api/machine/steam/SimpleSteamMachine.java | 5 ++++- 2 files changed, 13 insertions(+), 4 deletions(-) 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..c26a8175e22 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java @@ -128,12 +128,11 @@ public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, boolean ene new NotifiableItemStackHandler(getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN, IO.BOTH)); this.exportItems = attachTrait( - new NotifiableItemStackHandler(getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), - IO.OUT)); + new NotifiableItemStackHandler(getMaxOutputSize(ItemRecipeCapability.CAP), IO.OUT)); this.importFluids = attachTrait(new NotifiableFluidTank(getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), tankScalingFunction.applyAsInt(getTier()), IO.IN)); this.exportFluids = attachTrait( - new NotifiableFluidTank(getRecipeType().getMaxOutputs(FluidRecipeCapability.CAP), + new NotifiableFluidTank(getMaxOutputSize(FluidRecipeCapability.CAP), tankScalingFunction.applyAsInt(getTier()), IO.OUT)); this.importComputation = attachTrait(new NotifiableComputationContainer(IO.IN, true)); this.exportComputation = attachTrait(new NotifiableComputationContainer(IO.OUT, false)); @@ -178,6 +177,13 @@ public void setMuffled(boolean muffled) { syncDataHolder.markClientSyncFieldDirty("isMuffled"); } + private int getMaxOutputSize(RecipeCapability cap) { + int recipeTypeOutputSize = getRecipeType().getMaxOutputs(cap); + int machineTypeOutputLimit = this.getDefinition().getRecipeOutputLimits().getOrDefault(cap, + recipeTypeOutputSize); + return Math.min(recipeTypeOutputSize, machineTypeOutputLimit); + } + ////////////////////////////////////// // ******** OVERCLOCK *********// ////////////////////////////////////// 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..046ea669f31 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 @@ -58,8 +58,11 @@ public SimpleSteamMachine(BlockEntityCreationInfo info, boolean isHighPressure) super(info, isHighPressure); this.importItems = attachTrait( new NotifiableItemStackHandler(getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN, IO.BOTH)); + int recipeTypeOutputSize = getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP); + int machineTypeOutputLimit = this.getDefinition().getRecipeOutputLimits().getOrDefault(ItemRecipeCapability.CAP, + recipeTypeOutputSize); this.exportItems = attachTrait( - new NotifiableItemStackHandler(getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT)); + new NotifiableItemStackHandler(Math.min(recipeTypeOutputSize, machineTypeOutputLimit), IO.OUT)); this.exhaustVentTrait = attachTrait(new ExhaustVentMachineTrait()); exhaustVentTrait.setVentingDamageAmount(isHighPressure() ? 12F : 6F); From 2a1816417e3d8e86672925c16d2b5e494c5aeec3 Mon Sep 17 00:00:00 2001 From: htmlcsjs <46023024+htmlcsjs@users.noreply.github.com> Date: Sat, 11 Jul 2026 21:30:47 +0100 Subject: [PATCH 2/4] Review stuff: moved to helper to machine definition added fix to primitive workables --- .../gtceu/api/machine/MachineDefinition.java | 12 ++++++++++++ .../gtceu/api/machine/WorkableTieredMachine.java | 12 +++--------- .../gtceu/api/machine/steam/SimpleSteamMachine.java | 6 ++---- .../primitive/PrimitiveWorkableMachine.java | 5 +++-- 4 files changed, 20 insertions(+), 15 deletions(-) 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..fc4f1228dc1 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,16 @@ public static void setBuilt(MachineDefinition state) { public static void clearBuilt() { STATE.remove(); } + + /** + * 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 c26a8175e22..5322eeccd31 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java @@ -128,11 +128,12 @@ public WorkableTieredMachine(BlockEntityCreationInfo info, int tier, boolean ene new NotifiableItemStackHandler(getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN, IO.BOTH)); this.exportItems = attachTrait( - new NotifiableItemStackHandler(getMaxOutputSize(ItemRecipeCapability.CAP), IO.OUT)); + new NotifiableItemStackHandler( + getDefinition().getOutputSize(ItemRecipeCapability.CAP, getRecipeTypes()), IO.OUT)); this.importFluids = attachTrait(new NotifiableFluidTank(getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), tankScalingFunction.applyAsInt(getTier()), IO.IN)); this.exportFluids = attachTrait( - new NotifiableFluidTank(getMaxOutputSize(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)); @@ -177,13 +178,6 @@ public void setMuffled(boolean muffled) { syncDataHolder.markClientSyncFieldDirty("isMuffled"); } - private int getMaxOutputSize(RecipeCapability cap) { - int recipeTypeOutputSize = getRecipeType().getMaxOutputs(cap); - int machineTypeOutputLimit = this.getDefinition().getRecipeOutputLimits().getOrDefault(cap, - recipeTypeOutputSize); - return Math.min(recipeTypeOutputSize, machineTypeOutputLimit); - } - ////////////////////////////////////// // ******** OVERCLOCK *********// ////////////////////////////////////// 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 046ea669f31..9828a5b50b0 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 @@ -58,11 +58,9 @@ public SimpleSteamMachine(BlockEntityCreationInfo info, boolean isHighPressure) super(info, isHighPressure); this.importItems = attachTrait( new NotifiableItemStackHandler(getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN, IO.BOTH)); - int recipeTypeOutputSize = getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP); - int machineTypeOutputLimit = this.getDefinition().getRecipeOutputLimits().getOrDefault(ItemRecipeCapability.CAP, - recipeTypeOutputSize); this.exportItems = attachTrait( - new NotifiableItemStackHandler(Math.min(recipeTypeOutputSize, machineTypeOutputLimit), 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..34a0707c64a 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 @@ -72,11 +72,12 @@ public PrimitiveWorkableMachine(BlockEntityCreationInfo info) { this.importItems = attachTrait( new NotifiableItemStackHandler(getRecipeType().getMaxInputs(ItemRecipeCapability.CAP), IO.IN)); this.exportItems = attachTrait( - new NotifiableItemStackHandler(getRecipeType().getMaxOutputs(ItemRecipeCapability.CAP), IO.OUT)); + new NotifiableItemStackHandler( + getDefinition().getOutputSize(ItemRecipeCapability.CAP, getRecipeTypes()), IO.OUT)); this.importFluids = attachTrait(new NotifiableFluidTank(getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), 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, From 4f7fcc453fb2e58a5f7225f3a71b7d0fb24ce7a1 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:58:19 -0600 Subject: [PATCH 3/4] input size determining if recipe types differ --- .../gtceu/api/machine/MachineDefinition.java | 11 +++++++++++ .../gtceu/api/machine/WorkableTieredMachine.java | 10 ++++++---- .../gtceu/api/machine/steam/SimpleSteamMachine.java | 6 ++++-- 3 files changed, 21 insertions(+), 6 deletions(-) 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 fc4f1228dc1..1bc4e3cea70 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -220,6 +220,17 @@ 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 */ 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 5322eeccd31..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,13 +125,15 @@ 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( - getDefinition().getOutputSize(ItemRecipeCapability.CAP, getRecipeTypes()), IO.OUT)); - this.importFluids = attachTrait(new NotifiableFluidTank(getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), - tankScalingFunction.applyAsInt(getTier()), IO.IN)); + getDefinition().getOutputSize(ItemRecipeCapability.CAP, getRecipeTypes()), + IO.OUT)); + this.importFluids = attachTrait( + new NotifiableFluidTank(getDefinition().getInputSize(FluidRecipeCapability.CAP, getRecipeTypes()), + tankScalingFunction.applyAsInt(getTier()), IO.IN)); this.exportFluids = attachTrait( new NotifiableFluidTank(getDefinition().getOutputSize(FluidRecipeCapability.CAP, getRecipeTypes()), tankScalingFunction.applyAsInt(getTier()), IO.OUT)); 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 9828a5b50b0..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,10 +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( - getDefinition().getOutputSize(ItemRecipeCapability.CAP, getRecipeTypes()), IO.OUT)); + getDefinition().getOutputSize(ItemRecipeCapability.CAP, getRecipeTypes()), + IO.OUT)); this.exhaustVentTrait = attachTrait(new ExhaustVentMachineTrait()); exhaustVentTrait.setVentingDamageAmount(isHighPressure() ? 12F : 6F); From df5c3a030d284123435c9d67e2f9d5285c848717 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sun, 12 Jul 2026 01:04:37 -0600 Subject: [PATCH 4/4] primitive :) --- .../primitive/PrimitiveWorkableMachine.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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 34a0707c64a..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,12 +70,15 @@ 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( - getDefinition().getOutputSize(ItemRecipeCapability.CAP, getRecipeTypes()), IO.OUT)); - this.importFluids = attachTrait(new NotifiableFluidTank(getRecipeType().getMaxInputs(FluidRecipeCapability.CAP), - 32 * FluidType.BUCKET_VOLUME, IO.IN)); + 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(getDefinition().getOutputSize(FluidRecipeCapability.CAP, getRecipeTypes()), 32 * FluidType.BUCKET_VOLUME, IO.OUT));