aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
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
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')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java74
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java11
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java50
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java1
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java60
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java33
7 files changed, 121 insertions, 113 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
index e33e9c2d..6ebaa5b2 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
@@ -1,86 +1,30 @@
package me.xmrvizzy.skyblocker;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.container.ContainerSolverManager;
import me.xmrvizzy.skyblocker.discord.DiscordRPCManager;
import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze;
+import me.xmrvizzy.skyblocker.utils.Scheduler;
import me.xmrvizzy.skyblocker.utils.Utils;
-import net.minecraft.client.MinecraftClient;
-
-import java.util.Objects;
public class SkyblockerMod {
public static final String NAMESPACE = "skyblocker";
private static final SkyblockerMod instance = new SkyblockerMod();
+
+ public final Scheduler scheduler = new Scheduler();
public final ContainerSolverManager containerSolverManager = new ContainerSolverManager();
- public DiscordRPCManager discordRPCManager = new DiscordRPCManager();
+ public final DiscordRPCManager discordRPCManager = new DiscordRPCManager();
private SkyblockerMod() {
+ scheduler.scheduleCyclic(Utils::sbChecker, 20);
+ scheduler.scheduleCyclic(discordRPCManager::update, 100);
+ scheduler.scheduleCyclic(DungeonBlaze::update, 4);
}
public static SkyblockerMod getInstance() {
return instance;
}
- private int ticks = 0;
- private int rpTimer = 0;
-
public void onTick() {
- MinecraftClient client = MinecraftClient.getInstance();
- if (client == null) return;
- ticks++;
- if(onHypxiel()) {
- if (ticks % 4 == 0)
- try {
- if (Utils.isInDungeons) {
- DungeonBlaze.DungeonBlaze();
- }
- } catch (Exception e) {
- //System.out.println("Blazesolver: " + e);
- }
- if (ticks % 20 == 0) {
- rpTimer++;
- if (rpTimer == 5) {
- if (discordRPCManager.isConnected && Utils.isOnSkyblock && SkyblockerConfig.get().richPresence.enableRichPresence) {
- discordRPCManager.updatePresence();
- }
- if (discordRPCManager.isConnected && Utils.isOnSkyblock && SkyblockerConfig.get().richPresence.cycleMode) {
- discordRPCManager.cycleCount++;
- if (discordRPCManager.cycleCount == 3) discordRPCManager.cycleCount = 0;
- }
- rpTimer = 0;
- }
- if (client.world != null && !client.isInSingleplayer())
- Utils.sbChecker();
- if (!discordRPCManager.isConnected && Utils.isOnSkyblock && SkyblockerConfig.get().richPresence.enableRichPresence)
- discordRPCManager.start();
- if (discordRPCManager.isConnected && !SkyblockerConfig.get().richPresence.enableRichPresence)
- discordRPCManager.stop();
- ticks = 0;
- }
- } else {
- if (ticks % 20 == 0) {
- if (discordRPCManager.isConnected) {
- discordRPCManager.stop();
- }
- Utils.sbChecker();
- ticks = 0;
- }
- }
- }
- public static MinecraftClient client() {
- try {
- return MinecraftClient.getInstance();
- }
- catch(NullPointerException e) {
- return null;
- }
- }
- public static boolean onHypxiel() {
- try {
- return client() != null && !client().isInSingleplayer() && Objects.requireNonNull(client().getCurrentServerEntry()).address != null && client().getCurrentServerEntry().address.contains("hypixel.net");
- } catch (NullPointerException exception) {
- return false;
- }
+ scheduler.tick();
}
-} \ No newline at end of file
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java
index 96da1198..d537b3d0 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java
@@ -20,6 +20,17 @@ public class DiscordRPCManager implements IPCListener{
public static DecimalFormat dFormat = new DecimalFormat("###,###.##");
public int cycleCount = 0;
+ public void update() {
+ if (!SkyblockerConfig.get().richPresence.enableRichPresence || !Utils.isOnSkyblock) {
+ if (isConnected) stop();
+ return;
+ }
+ if (!isConnected) start();
+ if (SkyblockerConfig.get().richPresence.cycleMode)
+ cycleCount = (cycleCount + 1) % 3;
+ updatePresence();
+ }
+
public void start(){
try {
logger.info("Starting...");
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
index ab81cd75..d4f7fec5 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
@@ -1,6 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.color.QuadColor;
import me.xmrvizzy.skyblocker.utils.RenderUtils;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
@@ -14,13 +15,15 @@ public class DungeonBlaze {
static Entity lowestBlaze = null;
static boolean renderHooked = false;
- public static void DungeonBlaze() {
+ public static void update() {
+ if (!Utils.isInDungeons) return;
MinecraftClient client = MinecraftClient.getInstance();
if(!renderHooked){
WorldRenderEvents.END.register(DungeonBlaze::blazeRenderer);
renderHooked = true;
}
+ assert client.world != null;
Iterable<Entity> entities = client.world.getEntities();
int highestHealth = 0;
int lowestHealth = 99999999;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
index d4dd7fb0..65b9648f 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
@@ -1,5 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
+import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.chat.ChatListener;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.command.v1.ClientCommandManager;
@@ -11,8 +12,9 @@ import java.util.regex.Pattern;
public class Reparty extends ChatListener {
private static final MinecraftClient client = MinecraftClient.getInstance();
+ private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance();
public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●");
- private static final int SLEEP_TIME = 600;
+ private static final int BASE_DELAY = 20;
private String[] players;
private int playersSoFar;
@@ -53,45 +55,31 @@ public class Reparty extends ChatListener {
return false;
}
if (playersSoFar == players.length)
- new Thread(this::reparty).start();
+ reparty();
return false;
}
private void reparty() {
ClientPlayerEntity playerEntity = client.player;
assert playerEntity != null;
- StringBuilder sb = new StringBuilder("/p disband");
- for (int i = 0; i < players.length; i++) {
- if (i % 5 == 0) {
- sleep();
- playerEntity.sendChatMessage(sb.toString());
- sb.setLength(0);
- sb.append("/p invite");
+ sendCommand(playerEntity, "/p disband", 1);
+ StringBuilder sb = new StringBuilder();
+ int invites = (players.length - 1) / 5 + 1;
+ for(int i = 0; i < invites; i++) {
+ sb.setLength(0);
+ sb.append("/p invite");
+ for(int j = 0; j < 5 && i * 5 + j < players.length; j++) {
+ sb.append(' ');
+ sb.append(players[i * 5 + j]);
}
- sb.append(' ');
- sb.append(players[i]);
+ sendCommand(playerEntity, sb.toString(), i + 2);
}
- if (players.length % 5 != 0) {
- sleep();
- playerEntity.sendChatMessage(sb.toString());
- }
- repartying = false;
+ skyblocker.scheduler.schedule(() -> repartying = false, invites + 2);
}
- private void sleep() {
- long sleepStart = System.currentTimeMillis();
- boolean interrupted = false;
- long sleepLeft = SLEEP_TIME;
- do {
- if (interrupted) {
- sleepLeft = sleepStart + SLEEP_TIME - System.currentTimeMillis();
- interrupted = false;
- }
- try {
- Thread.sleep(sleepLeft);
- } catch (InterruptedException e) {
- interrupted = true;
- }
- } while (interrupted);
+ private void sendCommand(ClientPlayerEntity player, String command, int delay) {
+ skyblocker.scheduler.schedule(() ->
+ player.sendChatMessage(command), delay * BASE_DELAY
+ );
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java
index e95a7507..3e117955 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java
@@ -21,7 +21,6 @@ public class Puzzler extends ChatListener {
public boolean onMessage(String[] groups) {
int x = 181;
int z = 135;
- System.out.println(groups[1]);
for (char c : groups[1].toCharArray()) {
if (c == '▲') z++;
else if (c == '▼') z--;
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) {