diff --git a/gradle.properties b/gradle.properties index 10f9b5a860..e2c4b81ae9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -31,7 +31,7 @@ project.build.group=net.runelite project.build.version=1.12.12.1 glslang.path= -microbot.version=2.1.12 +microbot.version=2.1.13 microbot.commit.sha=nogit microbot.repo.url=http://138.201.81.246:8081/repository/microbot-snapshot/ microbot.repo.username= diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/AntibanPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/AntibanPlugin.java index cf6c3f7946..312ace8805 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/AntibanPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/AntibanPlugin.java @@ -13,6 +13,8 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.microbot.Microbot; import net.runelite.client.plugins.microbot.breakhandler.BreakHandlerPlugin; +import net.runelite.client.plugins.microbot.util.events.PluginPauseEvent; +import lombok.extern.slf4j.Slf4j; import net.runelite.client.plugins.microbot.util.antiban.enums.Activity; import net.runelite.client.plugins.microbot.util.antiban.enums.ActivityIntensity; import net.runelite.client.plugins.microbot.util.antiban.enums.CombatSkills; @@ -79,7 +81,7 @@ alwaysOn = true, hidden = true ) - +@Slf4j public class AntibanPlugin extends Plugin { private static final int COOK_TIMEOUT = 3; @@ -100,6 +102,16 @@ public class AntibanPlugin extends Plugin { private static final int MICRO_BREAK_DURATION_HIGH_MIN = 1; private static final int MICRO_BREAK_DURATION_HIGH_MAX = 30; + /** + * Avoid spamming the user if they keep micro breaks on while the break handler is disabled. + */ + private boolean warnedBreakHandlerDisabled; + + /** + * Remembers last micro-break state to detect transitions (start/end). + */ + private boolean lastMicroBreakActive; + @Inject private OverlayManager overlayManager; @@ -179,6 +191,8 @@ public void run() { protected void shutDown() { overlayManager.removeIf(overlay -> overlay instanceof AntibanOverlay); clientToolbar.removeNavigation(navButton); + + clearPauseFlags(); } @Subscribe @@ -242,18 +256,7 @@ public void onGameTick(GameTick event) { validateAndSetBreakDurations(); - if (Rs2AntibanSettings.takeMicroBreaks && !Microbot.isPluginEnabled(BreakHandlerPlugin.class)) { - if (Rs2AntibanSettings.devDebug) - Microbot.showMessage("Micro breaks depend on the BreakHandlerPlugin, enabling it now."); - - Microbot.log("BreakHandlerPlugin not enabled, enabling it now."); - String name = BreakHandlerPlugin.class.getName(); - Plugin breakHandlerPlugin = Microbot.getPluginManager().getPlugins().stream() - .filter(x -> x.getClass().getName().equals(name)) - .findFirst() - .orElse(null); - Microbot.startPlugin(breakHandlerPlugin); - } + handleMicroBreakIntegration(); if (Rs2Antiban.isMining()) { updateLastMiningAction(); @@ -274,6 +277,57 @@ public void onGameTick(GameTick event) { } } + /** + * Micro-break / BreakHandler integration logic that respects the user's manual BreakHandler toggle. + * + * Behaviour: + * - If user has micro-breaks on and BreakHandler is disabled, we warn once and do NOT auto-start. + * - When micro-breaks end, we clear pause flags so scripts resume even if BreakHandler stays disabled. + */ + private void handleMicroBreakIntegration() { + boolean microBreaksEnabled = Rs2AntibanSettings.takeMicroBreaks; + + // Detect end of micro-break to clear flags even if BreakHandler stays enabled. + if (lastMicroBreakActive && !Rs2AntibanSettings.microBreakActive) { + clearPauseFlags(); + } + lastMicroBreakActive = Rs2AntibanSettings.microBreakActive; + + if (!microBreaksEnabled) { + // User turned off micro-breaks; ensure pause flags are released. + return; + } + + // Micro-breaks enabled: ensure BreakHandler is available, but respect manual disable. + if (Microbot.isPluginEnabled(BreakHandlerPlugin.class)) { + // Already on (user or us). Nothing else to do. + return; + } + + // BreakHandler is off. If user turned it off, warn once and skip auto-start. + if (warnedBreakHandlerDisabled) { + return; + } + + // If a micro-break was triggered while BreakHandler is disabled, cancel it and unpause to avoid getting stuck. + if (Rs2AntibanSettings.microBreakActive) { + Rs2AntibanSettings.microBreakActive = false; + clearPauseFlags(); + } + + warnedBreakHandlerDisabled = true; + Microbot.showMessage("Micro breaks need BreakHandler. Enable it to use micro breaks."); + log.debug("Micro breaks requested but BreakHandler is disabled; respecting user choice."); + } + + /** + * Clears global pause flags to guarantee scripts resume after micro-break. + */ + private void clearPauseFlags() { + PluginPauseEvent.setPaused(false); + Microbot.pauseAllScripts.compareAndSet(true, false); + } + @Subscribe public void onStatChanged(StatChanged statChanged) { if (!Rs2AntibanSettings.antibanEnabled) { @@ -374,4 +428,3 @@ public static void validateAndSetBreakDurations() { } } } -