diff --git a/src/api/java/baritone/api/utils/Helper.java b/src/api/java/baritone/api/utils/Helper.java index f423c4f4..336b410e 100755 --- a/src/api/java/baritone/api/utils/Helper.java +++ b/src/api/java/baritone/api/utils/Helper.java @@ -19,6 +19,7 @@ package baritone.api.utils; import baritone.api.BaritoneAPI; import baritone.api.utils.gui.BaritoneToast; +import baritone.api.utils.NotificationHelper; import net.minecraft.client.Minecraft; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; @@ -93,6 +94,48 @@ public interface Helper { logToast(Helper.getPrefix(), new TextComponentString(message)); } + /** + * Send a message as a desktop notification + * + * @param message The message to display in the notification + */ + default void logNotification(String message) { + logNotification(message, false); + } + + /** + * Send a message as a desktop notification + * + * @param message The message to display in the notification + * @param error Whether to log as an error + */ + default void logNotification(String message, boolean error) { + if (BaritoneAPI.getSettings().desktopNotifications.value) { + logNotificationDirect(message, error); + } + } + + /** + * Send a message as a desktop notification regardless of desktopNotifications + * (should only be used for critically important messages) + * + * @param message The message to display in the notification + */ + default void logNotificationDirect(String message) { + logNotificationDirect(message, false); + } + + /** + * Send a message as a desktop notification regardless of desktopNotifications + * (should only be used for critically important messages) + * + * @param message The message to display in the notification + * @param error Whether to log as an error + */ + default void logNotificationDirect(String message, boolean error) { + NotificationHelper.notify(message, error); + } + /** * Send a message to chat only if chatDebug is on * diff --git a/src/main/java/baritone/utils/NotificationHelper.java b/src/api/java/baritone/api/utils/NotificationHelper.java similarity index 99% rename from src/main/java/baritone/utils/NotificationHelper.java rename to src/api/java/baritone/api/utils/NotificationHelper.java index 54abbf87..f0ec336d 100644 --- a/src/main/java/baritone/utils/NotificationHelper.java +++ b/src/api/java/baritone/api/utils/NotificationHelper.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.utils; +package baritone.api.utils; import org.apache.commons.lang3.SystemUtils; diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index c5421656..d20b519d 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -25,7 +25,6 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Helper; import baritone.api.utils.PathCalculationResult; import baritone.pathing.movement.CalculationContext; -import baritone.utils.NotificationHelper; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import java.util.Optional; @@ -217,9 +216,7 @@ public abstract class AbstractNodeCostSearch implements IPathFinder, Helper { if (logInfo) { logDebug("Even with a cost coefficient of " + COEFFICIENTS[COEFFICIENTS.length - 1] + ", I couldn't get more than " + Math.sqrt(bestDist) + " blocks"); logDebug("No path found =("); - if (Baritone.settings().desktopNotifications.value) { - NotificationHelper.notify("No path found =(", true); - } + logNotification("No path found =(", true); } return Optional.empty(); } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index ca8ca534..7d1affea 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -40,7 +40,6 @@ import baritone.pathing.movement.Movement; import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; -import baritone.utils.NotificationHelper; import baritone.utils.PathingCommandContext; import baritone.utils.schematic.MapArtSchematic; import baritone.utils.schematic.SchematicSystem; @@ -424,8 +423,8 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil numRepeats++; if (repeat.equals(new Vec3i(0, 0, 0)) || (max != -1 && numRepeats >= max)) { logDirect("Done building"); - if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnBuildFinished.value) { - NotificationHelper.notify("Done building", false); + if (Baritone.settings().notificationOnBuildFinished.value) { + logNotification("Done building", false); } onLostControl(); return null; diff --git a/src/main/java/baritone/process/CustomGoalProcess.java b/src/main/java/baritone/process/CustomGoalProcess.java index f925bec7..ea9ff209 100644 --- a/src/main/java/baritone/process/CustomGoalProcess.java +++ b/src/main/java/baritone/process/CustomGoalProcess.java @@ -23,7 +23,6 @@ import baritone.api.process.ICustomGoalProcess; import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; import baritone.utils.BaritoneProcessHelper; -import baritone.utils.NotificationHelper; /** * As set by ExampleBaritoneControl or something idk @@ -94,8 +93,8 @@ public final class CustomGoalProcess extends BaritoneProcessHelper implements IC if (Baritone.settings().disconnectOnArrival.value) { ctx.world().sendQuittingDisconnectingPacket(); } - if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnPathComplete.value) { - NotificationHelper.notify("Pathing complete", false); + if (Baritone.settings().notificationOnPathComplete.value) { + logNotification("Pathing complete", false); } return new PathingCommand(this.goal, PathingCommandType.CANCEL_AND_SET_GOAL); } diff --git a/src/main/java/baritone/process/ExploreProcess.java b/src/main/java/baritone/process/ExploreProcess.java index c42ece0e..3664d418 100644 --- a/src/main/java/baritone/process/ExploreProcess.java +++ b/src/main/java/baritone/process/ExploreProcess.java @@ -29,7 +29,6 @@ import baritone.api.process.PathingCommandType; import baritone.api.utils.MyChunkPos; import baritone.cache.CachedWorld; import baritone.utils.BaritoneProcessHelper; -import baritone.utils.NotificationHelper; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; @@ -84,8 +83,8 @@ public final class ExploreProcess extends BaritoneProcessHelper implements IExpl public PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (calcFailed) { logDirect("Failed"); - if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnExploreFinished.value) { - NotificationHelper.notify("Exploration failed", true); + if (Baritone.settings().notificationOnExploreFinished.value) { + logNotification("Exploration failed", true); } onLostControl(); return null; @@ -93,8 +92,8 @@ public final class ExploreProcess extends BaritoneProcessHelper implements IExpl IChunkFilter filter = calcFilter(); if (!Baritone.settings().disableCompletionCheck.value && filter.countRemain() == 0) { logDirect("Explored all chunks"); - if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnExploreFinished.value) { - NotificationHelper.notify("Explored all chunks", false); + if (Baritone.settings().notificationOnExploreFinished.value) { + logNotification("Explored all chunks", false); } onLostControl(); return null; diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index a8806d2b..0ef85f07 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -31,7 +31,6 @@ import baritone.api.utils.input.Input; import baritone.cache.WorldScanner; import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; -import baritone.utils.NotificationHelper; import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; @@ -272,8 +271,8 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro if (calcFailed) { logDirect("Farm failed"); - if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnFarmFail.value) { - NotificationHelper.notify("Farm failed", true); + if (Baritone.settings().notificationOnFarmFail.value) { + logNotification("Farm failed", true); } onLostControl(); return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 8b0b5bac..6d938e9d 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -30,7 +30,6 @@ import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.MovementHelper; import baritone.utils.BaritoneProcessHelper; import baritone.utils.BlockStateInterface; -import baritone.utils.NotificationHelper; import net.minecraft.block.Block; import net.minecraft.block.BlockAir; import net.minecraft.block.BlockFalling; @@ -89,15 +88,15 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro if (calcFailed) { if (!knownOreLocations.isEmpty() && Baritone.settings().blacklistClosestOnFailure.value) { logDirect("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance..."); - if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnMineFail.value) { - NotificationHelper.notify("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", blacklisting presumably unreachable closest instance...", true); } knownOreLocations.stream().min(Comparator.comparingDouble(ctx.player()::getDistanceSq)).ifPresent(blacklist::add); knownOreLocations.removeIf(blacklist::contains); } else { logDirect("Unable to find any path to " + filter + ", canceling mine"); - if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnMineFail.value) { - NotificationHelper.notify("Unable to find any path to " + filter + ", canceling mine", true); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("Unable to find any path to " + filter + ", canceling mine", true); } cancel(); return null; @@ -232,8 +231,8 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro locs.addAll(dropped); if (locs.isEmpty()) { logDirect("No locations for " + filter + " known, cancelling"); - if (Baritone.settings().desktopNotifications.value && Baritone.settings().notificationOnMineFail.value) { - NotificationHelper.notify("No locations for " + filter + " known, cancelling", true); + if (Baritone.settings().notificationOnMineFail.value) { + logNotification("No locations for " + filter + " known, cancelling", true); } cancel(); return;