From 948e0e86ee376592fc0499b2942124a048765475 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sat, 16 Aug 2025 10:22:51 -0600 Subject: [PATCH 1/2] Fix maintenance not happening as often as intended --- .../multiblock/IMaintenanceMachine.java | 38 ++++++++----------- .../gtceu/config/ConfigHolder.java | 5 --- 2 files changed, 15 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java index ff70572889f..26fd6bf49fc 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java @@ -79,20 +79,6 @@ default boolean canShared() { return false; } - /** - * @param duration recipe progress time - * @return it's time for a new problem occurring; - */ - default boolean calculateTime(int duration) { - setTimeActive(duration + getTimeActive()); - var value = getTimeActive() - ConfigHolder.INSTANCE.machines.maintenanceTime; - if (value > 0) { - setTimeActive(value); - return true; - } - return false; - } - /** * Used to calculate whether a maintenance problem should happen based on machine time active * @@ -103,14 +89,23 @@ default void calculateMaintenance(IMaintenanceMachine maintenanceMachine, int du return; } - if (calculateTime((int) (duration * maintenanceMachine.getTimeMultiplier()))) { - if (GTValues.RNG.nextFloat() - 0.75f >= 0) { + setTimeActive(getTimeActive() + duration); + if (getTimeActive() >= 1000 / maintenanceMachine.getTimeMultiplier()) { + setTimeActive(0); + if (GTValues.RNG.nextInt(6000) == 0) { causeRandomMaintenanceProblems(); maintenanceMachine.setTaped(false); } } } + /** + * Used to calculate whether a maintenance problem should happen based on machine time active + */ + default void calculateMaintenance(IMaintenanceMachine maintenanceMachine) { + calculateMaintenance(maintenanceMachine, 1); + } + default int getNumMaintenanceProblems() { return ConfigHolder.INSTANCE.machines.enableMaintenance ? 6 - Integer.bitCount(getMaintenanceProblems()) : 0; } @@ -129,13 +124,10 @@ default void causeRandomMaintenanceProblems() { } @Override - default boolean afterWorking(IWorkableMultiController controller) { - if (ConfigHolder.INSTANCE.machines.enableMaintenance) { - calculateMaintenance(this, controller.getRecipeLogic().getProgress()); - if (hasMaintenanceProblems()) { - controller.getRecipeLogic().markLastRecipeDirty(); - return false; - } + default boolean onWorking(IWorkableMultiController controller) { + calculateMaintenance(this); + if (hasMaintenanceProblems()) { + controller.getRecipeLogic().markLastRecipeDirty(); } return true; } diff --git a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java index 59c88d95c64..de1460815d0 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -460,11 +460,6 @@ public static class MachineConfigs { @Configurable @Configurable.Comment({ "Whether to enable the Maintenance Hatch, required for Multiblocks.", "Default: true" }) public boolean enableMaintenance = true; - @Configurable - @Configurable.Comment({ - "Time in ticks between when Multiblocks can require Maintenance. By default, 48 hours.", - "Default: 3456000" }) - public int maintenanceTime = 3456000; @Configurable @Configurable.Comment({ From 8414b738923bdb6773dcf9ecaf7898dc82fada0f Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sat, 13 Sep 2025 21:58:18 -0600 Subject: [PATCH 2/2] config --- .../api/machine/feature/multiblock/IMaintenanceMachine.java | 3 ++- .../java/com/gregtechceu/gtceu/config/ConfigHolder.java | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java index 26fd6bf49fc..c97053ba47c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMaintenanceMachine.java @@ -90,7 +90,8 @@ default void calculateMaintenance(IMaintenanceMachine maintenanceMachine, int du } setTimeActive(getTimeActive() + duration); - if (getTimeActive() >= 1000 / maintenanceMachine.getTimeMultiplier()) { + float rate = ConfigHolder.INSTANCE.machines.maintenanceCheckRate / maintenanceMachine.getTimeMultiplier(); + if (getTimeActive() >= rate) { setTimeActive(0); if (GTValues.RNG.nextInt(6000) == 0) { causeRandomMaintenanceProblems(); diff --git a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java index de1460815d0..c10830f002a 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -460,6 +460,12 @@ public static class MachineConfigs { @Configurable @Configurable.Comment({ "Whether to enable the Maintenance Hatch, required for Multiblocks.", "Default: true" }) public boolean enableMaintenance = true; + @Configurable + @Configurable.Comment({ + "How often to check for maintenance, rolling a 1/6000 chance every X ticks (before secondary effects like Configurable Maintenance Hatch).", + "In default settings, this equates to a 5% chance every hour of a machine running.", + "Default: 1000 (ticks)" }) + public int maintenanceCheckRate = 1000; @Configurable @Configurable.Comment({