From 049f988c904e7bee85e4d0a03e2dbbcf0047d27e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 22 May 2023 20:30:12 -0400 Subject: Add Livid Color --- .../skyblocker/utils/MessageScheduler.java | 43 ++++++++++++++++++++++ .../me/xmrvizzy/skyblocker/utils/Scheduler.java | 13 ++++--- 2 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java new file mode 100644 index 00000000..85cc963d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java @@ -0,0 +1,43 @@ +package me.xmrvizzy.skyblocker.utils; + +import net.minecraft.client.MinecraftClient; + +/** + * A scheduler for sending chat messages or commands. Use the instance in {@link me.xmrvizzy.skyblocker.SkyblockerMod#messageScheduler SkyblockerMod.messageScheduler}. Do not instantiate this class. + */ +@SuppressWarnings("deprecation") +public class MessageScheduler extends Scheduler { + private long lastMessage = 0; + + public void sendMessageAfterCooldown(String message) { + if (lastMessage + 200 < System.currentTimeMillis()) { + sendMessage(message); + lastMessage = System.currentTimeMillis(); + } else { + tasks.add(new ScheduledTask(() -> sendMessage(message), 0)); + } + } + + private void sendMessage(String message) { + if (MinecraftClient.getInstance().player != null) { + MinecraftClient.getInstance().inGameHud.getChatHud().addToMessageHistory(message); + if (message.startsWith("/")) { + MinecraftClient.getInstance().player.networkHandler.sendCommand(message.substring(1)); + } else { + MinecraftClient.getInstance().player.networkHandler.sendChatMessage(message); + } + } + } + + public void queueMessage(String message, int delay) { + tasks.add(new ScheduledTask(() -> sendMessage(message), delay)); + } + + @Override + protected void runTask(Runnable task) { + if (lastMessage + 200 < System.currentTimeMillis()) { + task.run(); + lastMessage = System.currentTimeMillis(); + } + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index efba4995..09db3f93 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -12,7 +12,7 @@ import java.util.PriorityQueue; public class Scheduler { private static final Logger LOGGER = LoggerFactory.getLogger(Scheduler.class); private int currentTick; - private final PriorityQueue tasks; + protected final PriorityQueue tasks; /** * Do not instantiate this class. Use {@link SkyblockerMod#scheduler} instead. @@ -52,17 +52,20 @@ public class Scheduler { currentTick += 1; ScheduledTask task; while ((task = tasks.peek()) != null && task.schedule <= currentTick) { - tasks.poll(); - task.run(); + runTask(tasks.poll()); } } + protected void runTask(Runnable task){ + task.run(); + } + /** * A task that runs every period ticks. More specifically, this task reschedules itself to run again after period ticks every time it runs. * @param inner the task to run * @param period the period in ticks */ - private record CyclicTask(Runnable inner, int period) implements Runnable { + protected record CyclicTask(Runnable inner, int period) implements Runnable { @Override public void run() { SkyblockerMod.getInstance().scheduler.schedule(this, period); @@ -75,7 +78,7 @@ public class Scheduler { * @param inner the task to run * @param schedule the tick to run at */ - private record ScheduledTask(Runnable inner, int schedule) implements Comparable, Runnable { + protected record ScheduledTask(Runnable inner, int schedule) implements Comparable, Runnable { @Override public int compareTo(ScheduledTask o) { return schedule - o.schedule; -- cgit From 300fe03100274d0e4f75e1294d71542cd0cc8e0e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 30 May 2023 11:23:46 -0400 Subject: Fix MessageScheduler removing and not sending message tasks during cooldown --- src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java | 6 ++++-- src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java index 85cc963d..8aff5517 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java @@ -14,7 +14,7 @@ public class MessageScheduler extends Scheduler { sendMessage(message); lastMessage = System.currentTimeMillis(); } else { - tasks.add(new ScheduledTask(() -> sendMessage(message), 0)); + queueMessage(message, 0); } } @@ -34,10 +34,12 @@ public class MessageScheduler extends Scheduler { } @Override - protected void runTask(Runnable task) { + protected boolean runTask(Runnable task) { if (lastMessage + 200 < System.currentTimeMillis()) { task.run(); lastMessage = System.currentTimeMillis(); + return true; } + return false; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index 09db3f93..73c15efc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -51,13 +51,14 @@ public class Scheduler { public void tick() { currentTick += 1; ScheduledTask task; - while ((task = tasks.peek()) != null && task.schedule <= currentTick) { - runTask(tasks.poll()); + while ((task = tasks.peek()) != null && task.schedule <= currentTick && runTask(task)) { + tasks.poll(); } } - protected void runTask(Runnable task){ + protected boolean runTask(Runnable task) { task.run(); + return true; } /** -- cgit From d5bdb1ef2bf50084fb59029184224b84f0b99806 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 30 May 2023 11:35:48 -0400 Subject: Fix MessageScheduler not scheduling relative to current tick --- src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java | 2 +- src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java index 8aff5517..a46bb9f3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java @@ -30,7 +30,7 @@ public class MessageScheduler extends Scheduler { } public void queueMessage(String message, int delay) { - tasks.add(new ScheduledTask(() -> sendMessage(message), delay)); + schedule(() -> sendMessage(message), delay); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index 73c15efc..7313ec10 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -12,7 +12,7 @@ import java.util.PriorityQueue; public class Scheduler { private static final Logger LOGGER = LoggerFactory.getLogger(Scheduler.class); private int currentTick; - protected final PriorityQueue tasks; + private final PriorityQueue tasks; /** * Do not instantiate this class. Use {@link SkyblockerMod#scheduler} instead. -- cgit From 69e794ffcd06fe14f76f368b33d5af0e4bc60b3a Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 30 May 2023 11:43:13 -0400 Subject: Refactored schedulers and added docs --- .../skyblocker/utils/MessageScheduler.java | 22 +++++++++++++-- .../me/xmrvizzy/skyblocker/utils/Scheduler.java | 32 ++++++++++++++-------- 2 files changed, 41 insertions(+), 13 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java index a46bb9f3..ac6aa293 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/MessageScheduler.java @@ -7,10 +7,22 @@ import net.minecraft.client.MinecraftClient; */ @SuppressWarnings("deprecation") public class MessageScheduler extends Scheduler { + /** + * The minimum delay that the server will accept between chat messages. + */ + private static final int MIN_DELAY = 200; + /** + * The timestamp of the last message send, + */ private long lastMessage = 0; + /** + * Sends a chat message or command after the minimum cooldown. Prefer this method to send messages or commands to the server. + * + * @param message the message to send + */ public void sendMessageAfterCooldown(String message) { - if (lastMessage + 200 < System.currentTimeMillis()) { + if (lastMessage + MIN_DELAY < System.currentTimeMillis()) { sendMessage(message); lastMessage = System.currentTimeMillis(); } else { @@ -29,13 +41,19 @@ public class MessageScheduler extends Scheduler { } } + /** + * Queues a chat message or command to send in {@code delay} ticks. Use this method to send messages or commands a set time in the future. The minimum cooldown is still respected. + * + * @param message the message to send + * @param delay the delay before sending the message in ticks + */ public void queueMessage(String message, int delay) { schedule(() -> sendMessage(message), delay); } @Override protected boolean runTask(Runnable task) { - if (lastMessage + 200 < System.currentTimeMillis()) { + if (lastMessage + MIN_DELAY < System.currentTimeMillis()) { task.run(); lastMessage = System.currentTimeMillis(); return true; diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index 7313ec10..02162140 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -11,8 +11,8 @@ import java.util.PriorityQueue; */ public class Scheduler { private static final Logger LOGGER = LoggerFactory.getLogger(Scheduler.class); - private int currentTick; - private final PriorityQueue tasks; + private int currentTick = 0; + private final PriorityQueue tasks = new PriorityQueue<>(); /** * Do not instantiate this class. Use {@link SkyblockerMod#scheduler} instead. @@ -20,32 +20,34 @@ public class Scheduler { @SuppressWarnings("DeprecatedIsStillUsed") @Deprecated public Scheduler() { - currentTick = 0; - tasks = new PriorityQueue<>(); } /** * Schedules a task to run after a delay. - * @param task the task to run + * + * @param task the task to run * @param delay the delay in ticks */ public void schedule(Runnable task, int delay) { - if (delay < 0) + if (delay < 0) { LOGGER.warn("Scheduled a task with negative delay"); + } ScheduledTask tmp = new ScheduledTask(task, currentTick + delay); tasks.add(tmp); } /** * Schedules a task to run every period ticks. - * @param task the task to run + * + * @param task the task to run * @param period the period in ticks */ public void scheduleCyclic(Runnable task, int period) { - if (period <= 0) + if (period <= 0) { LOGGER.error("Attempted to schedule a cyclic task with period lower than 1"); - else + } else { new CyclicTask(task, period).run(); + } } public void tick() { @@ -56,6 +58,12 @@ public class Scheduler { } } + /** + * Runs the task if able. + * + * @param task the task to run + * @return {@code true} if the task is run, and {@link false} if task is not run. + */ protected boolean runTask(Runnable task) { task.run(); return true; @@ -63,7 +71,8 @@ public class Scheduler { /** * A task that runs every period ticks. More specifically, this task reschedules itself to run again after period ticks every time it runs. - * @param inner the task to run + * + * @param inner the task to run * @param period the period in ticks */ protected record CyclicTask(Runnable inner, int period) implements Runnable { @@ -76,7 +85,8 @@ public class Scheduler { /** * A task that runs at a specific tick, relative to {@link #currentTick}. - * @param inner the task to run + * + * @param inner the task to run * @param schedule the tick to run at */ protected record ScheduledTask(Runnable inner, int schedule) implements Comparable, Runnable { -- cgit