aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/utils
diff options
context:
space:
mode:
authorExternalTime <84183548+ExternalTime@users.noreply.github.com>2022-02-20 14:15:56 +0100
committerGitHub <noreply@github.com>2022-02-20 14:15:56 +0100
commit42017d856cd4306dcff58a54fc401d22b85e2441 (patch)
tree30971dede247ab76d88c162c161d335eb0a7aa84 /src/main/java/me/xmrvizzy/skyblocker/utils
parentaf48b7f7d1ddd4983f985a705c7daacf2db30b84 (diff)
downloadSkyblocker-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.java60
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java33
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) {