diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/Zulrah.java b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/Zulrah.java index 5e3be0aaa2..275f7d587e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/Zulrah.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/Zulrah.java @@ -45,6 +45,7 @@ import net.runelite.client.plugins.zulrah.patterns.ZulrahPatternB; import net.runelite.client.plugins.zulrah.patterns.ZulrahPatternC; import net.runelite.client.plugins.zulrah.patterns.ZulrahPatternD; import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.util.RunnableExceptionLogger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -81,7 +82,7 @@ public class Zulrah extends Plugin protected void startUp() throws Exception { ScheduledExecutorService executor = RuneLite.getRunelite().getExecutor(); - future = executor.scheduleAtFixedRate(this::update, 100, 100, TimeUnit.MILLISECONDS); + future = executor.scheduleAtFixedRate(RunnableExceptionLogger.wrap(this::update), 100, 100, TimeUnit.MILLISECONDS); } @Override @@ -97,88 +98,79 @@ public class Zulrah extends Plugin return; } - try + NPC zulrah = findZulrah(); + + if (zulrah == null) { - NPC zulrah = findZulrah(); - - if (zulrah == null) + if (fight != null) { - if (fight != null) - { - logger.debug("Fight has ended!"); + logger.debug("Fight has ended!"); - fight = null; - } - return; + fight = null; } - - if (fight == null) - { - Point startTile = zulrah.getLocalLocation(); - startTile = Perspective.localToWorld(client, startTile); - - fight = new Fight(startTile); - - logger.debug("Fight has begun!"); - } - - ZulrahInstance currentZulrah = ZulrahInstance.of(zulrah, fight.getStartLocationWorld()); - - if (fight.getZulrah() == null) - { - fight.setZulrah(currentZulrah); - } - else if (!fight.getZulrah().equals(currentZulrah)) - { - ZulrahInstance previousInstance = fight.getZulrah(); - fight.setZulrah(currentZulrah); - fight.nextStage(); - - logger.debug("Zulrah has moved from {} -> {}, index now {}", - previousInstance, currentZulrah, fight.getStage()); - } - - ZulrahPattern pattern = fight.getPattern(); - if (pattern == null) - { - int potential = 0; - ZulrahPattern potentialPattern = null; - - for (ZulrahPattern p : patterns) - { - if (p.stageMatches(fight.getStage(), fight.getZulrah())) - { - potential++; - potentialPattern = p; - } - } - - if (potential == 1) - { - logger.debug("Zulrah pattern identified: {}", potentialPattern); - - fight.setPattern(potentialPattern); - } - } - else - { - if (pattern.canReset(fight.getStage())) - { - if (fight.getZulrah().equals(pattern.get(0))) - { - logger.debug("Fight has reset"); - - fight.reset(); - } - } - } - - } - catch (Exception ex) - { - logger.debug(null, ex); + return; } + if (fight == null) + { + Point startTile = zulrah.getLocalLocation(); + startTile = Perspective.localToWorld(client, startTile); + + fight = new Fight(startTile); + + logger.debug("Fight has begun!"); + } + + ZulrahInstance currentZulrah = ZulrahInstance.of(zulrah, fight.getStartLocationWorld()); + + if (fight.getZulrah() == null) + { + fight.setZulrah(currentZulrah); + } + else if (!fight.getZulrah().equals(currentZulrah)) + { + ZulrahInstance previousInstance = fight.getZulrah(); + fight.setZulrah(currentZulrah); + fight.nextStage(); + + logger.debug("Zulrah has moved from {} -> {}, index now {}", + previousInstance, currentZulrah, fight.getStage()); + } + + ZulrahPattern pattern = fight.getPattern(); + if (pattern == null) + { + int potential = 0; + ZulrahPattern potentialPattern = null; + + for (ZulrahPattern p : patterns) + { + if (p.stageMatches(fight.getStage(), fight.getZulrah())) + { + potential++; + potentialPattern = p; + } + } + + if (potential == 1) + { + logger.debug("Zulrah pattern identified: {}", potentialPattern); + + fight.setPattern(potentialPattern); + } + } + else + { + if (pattern.canReset(fight.getStage())) + { + if (fight.getZulrah().equals(pattern.get(0))) + { + logger.debug("Fight has reset"); + + fight.reset(); + } + } + } } private NPC findZulrah() diff --git a/runelite-client/src/main/java/net/runelite/client/util/RunnableExceptionLogger.java b/runelite-client/src/main/java/net/runelite/client/util/RunnableExceptionLogger.java new file mode 100644 index 0000000000..752d38e3ab --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/util/RunnableExceptionLogger.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RunnableExceptionLogger implements Runnable +{ + private static final Logger logger = LoggerFactory.getLogger(RunnableExceptionLogger.class); + + private final Runnable runnable; + + private RunnableExceptionLogger(Runnable runnable) + { + this.runnable = runnable; + } + + @Override + public void run() + { + try + { + runnable.run(); + } + catch (Throwable ex) + { + logger.warn("Uncaught exception in runnable {}", runnable, ex); + } + } + + public static RunnableExceptionLogger wrap(Runnable runnable) + { + return new RunnableExceptionLogger(runnable); + } +}