diff options
author | ExternalTime <84183548+ExternalTime@users.noreply.github.com> | 2022-02-20 14:15:56 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-20 14:15:56 +0100 |
commit | 42017d856cd4306dcff58a54fc401d22b85e2441 (patch) | |
tree | 30971dede247ab76d88c162c161d335eb0a7aa84 /src/main/java/me/xmrvizzy/skyblocker/utils | |
parent | af48b7f7d1ddd4983f985a705c7daacf2db30b84 (diff) | |
download | Skyblocker-42017d856cd4306dcff58a54fc401d22b85e2441.tar.gz Skyblocker-42017d856cd4306dcff58a54fc401d22b85e2441.tar.bz2 Skyblocker-42017d856cd4306dcff58a54fc401d22b85e2441.zip |
Added simple scheduler for recurring and delayed tasks (#39)
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils')
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java | 60 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 33 |
2 files changed, 78 insertions, 15 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java new file mode 100644 index 00000000..0fdf4892 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -0,0 +1,60 @@ +package me.xmrvizzy.skyblocker.utils; + +import java.util.PriorityQueue; + +public class Scheduler { + private int currentTick; + private final PriorityQueue<ScheduledTask> tasks; + + public Scheduler() { + currentTick = 0; + tasks = new PriorityQueue<>(); + } + + public void schedule(Runnable task, int delay) { + assert delay > 0; + ScheduledTask tmp = new ScheduledTask(currentTick + delay, task); + tasks.add(tmp); + } + + public void scheduleCyclic(Runnable task, int period) { + new CyclicTask(task, period).run(); + } + + public void tick() { + currentTick += 1; + ScheduledTask task; + while ((task = tasks.peek()) != null && task.schedule <= currentTick) { + task.run(); + tasks.poll(); + } + } + + private class CyclicTask implements Runnable { + private final Runnable inner; + private final int period; + + public CyclicTask(Runnable task, int period) { + this.inner = task; + this.period = period; + } + + @Override + public void run() { + schedule(this, period); + inner.run(); + } + } + + private record ScheduledTask(int schedule, Runnable inner) implements Comparable<ScheduledTask>, Runnable { + @Override + public int compareTo(ScheduledTask o) { + return schedule - o.schedule; + } + + @Override + public void run() { + inner.run(); + } + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index e3623bb4..21c30ada 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -19,8 +19,9 @@ public class Utils { public static boolean isInjected = false; public static void sbChecker() { - List<String> sidebar = getSidebar(); - if (sidebar == null) { + MinecraftClient client = MinecraftClient.getInstance(); + List<String> sidebar; + if (client.world == null || client.isInSingleplayer() || (sidebar = getSidebar()) == null) { isOnSkyblock = false; isInDungeons = false; return; @@ -28,22 +29,22 @@ public class Utils { String string = sidebar.toString(); if (sidebar.isEmpty()) return; - if (sidebar.get(0).contains("SKYBLOCK") && !isOnSkyblock){ - if(!isInjected){ - isInjected = true; - ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip); - } - Events.onSkyblockJoin(); - + if (sidebar.get(0).contains("SKYBLOCK") && !isOnSkyblock) { + if (!isInjected) { + isInjected = true; + ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip); } - if (!sidebar.get(0).contains("SKYBLOCK") && isOnSkyblock) Events.onSkyblockDisconnect(); - isInDungeons = isOnSkyblock && string.contains("The Catacombs"); + Events.onSkyblockJoin(); + } + if (!sidebar.get(0).contains("SKYBLOCK") && isOnSkyblock) Events.onSkyblockDisconnect(); + isInDungeons = isOnSkyblock && string.contains("The Catacombs"); + } public static String getLocation() { String location = null; List<String> sidebarLines = getSidebar(); - try{ + try { assert sidebarLines != null; for (String sidebarLine : sidebarLines) { if (sidebarLine.contains("⏣")) location = sidebarLine; @@ -55,12 +56,13 @@ public class Utils { } return location; } + public static double getPurse() { String purseString = null; double purse = 0; List<String> sidebarLines = getSidebar(); - try{ + try { assert sidebarLines != null; for (String sidebarLine : sidebarLines) { if (sidebarLine.contains("Piggy:")) purseString = sidebarLine; @@ -74,16 +76,17 @@ public class Utils { } return purse; } + public static int getBits() { int bits = 0; String bitsString = null; List<String> sidebarLines = getSidebar(); - try{ + try { assert sidebarLines != null; for (String sidebarLine : sidebarLines) { if (sidebarLine.contains("Bits")) bitsString = sidebarLine; } - if (bitsString !=null) { + if (bitsString != null) { bits = Integer.parseInt(bitsString.replaceAll("[^0-9.]", "").strip()); } } catch (IndexOutOfBoundsException e) { |