From 5f05e7bf6c08880af5c3c00ae15c494ec5b87d9c Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 17 May 2023 23:11:15 -0400 Subject: Added docs to SkyblockerMod and Scheduler and refactored Scheduler --- .../me/xmrvizzy/skyblocker/utils/Scheduler.java | 45 ++++++++++++++++------ 1 file changed, 33 insertions(+), 12 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index 16e5b023..efba4995 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -1,27 +1,46 @@ package me.xmrvizzy.skyblocker.utils; +import me.xmrvizzy.skyblocker.SkyblockerMod; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.PriorityQueue; +/** + * A scheduler for running tasks at a later time. Tasks will be run synchronously on the main client thread. Use the instance stored in {@link SkyblockerMod#scheduler}. Do not instantiate this class. + */ public class Scheduler { private static final Logger LOGGER = LoggerFactory.getLogger(Scheduler.class); private int currentTick; private final PriorityQueue tasks; + /** + * Do not instantiate this class. Use {@link SkyblockerMod#scheduler} instead. + */ + @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 delay the delay in ticks + */ public void schedule(Runnable task, int delay) { if (delay < 0) LOGGER.warn("Scheduled a task with negative delay"); - ScheduledTask tmp = new ScheduledTask(currentTick + delay, task); + 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 period the period in ticks + */ public void scheduleCyclic(Runnable task, int period) { if (period <= 0) LOGGER.error("Attempted to schedule a cyclic task with period lower than 1"); @@ -38,23 +57,25 @@ public class Scheduler { } } - 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; - } - + /** + * 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 { @Override public void run() { - schedule(this, period); + SkyblockerMod.getInstance().scheduler.schedule(this, period); inner.run(); } } - private record ScheduledTask(int schedule, Runnable inner) implements Comparable, Runnable { + /** + * A task that runs at a specific tick, relative to {@link #currentTick}. + * @param inner the task to run + * @param schedule the tick to run at + */ + private record ScheduledTask(Runnable inner, int schedule) implements Comparable, Runnable { @Override public int compareTo(ScheduledTask o) { return schedule - o.schedule; -- cgit From 3391f91c985c9e34867b651cd3b0c34bd8950cc8 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 19 May 2023 23:19:10 -0400 Subject: Refactored Utils fields to use getters --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 532de0dd..e1de7b6e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -15,9 +15,21 @@ import java.util.Collections; import java.util.List; public class Utils { - public static boolean isOnSkyblock = false; - public static boolean isInDungeons = false; - public static boolean isInjected = false; + private static boolean isOnSkyblock = false; + private static boolean isInDungeons = false; + private static boolean isInjected = false; + + public static boolean isOnSkyblock() { + return isOnSkyblock; + } + + public static boolean isInDungeons() { + return isInDungeons; + } + + public static boolean isInjected() { + return isInjected; + } public static void sbChecker() { MinecraftClient client = MinecraftClient.getInstance(); -- cgit From 5c8a90cb61f97f710513aac3cd880e04472024a8 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 19 May 2023 23:21:49 -0400 Subject: Added docs to Utils --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index e1de7b6e..028386ab 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -14,6 +14,9 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +/** + * Utility variables and methods for retrieving Skyblock related information. + */ public class Utils { private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; -- cgit 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 From b28a20421348c3385022deeb3cb1ea0ea74928af Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Thu, 11 May 2023 01:54:39 -0400 Subject: 1.20 Port The game launches successfully without any crashes! --- .../java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java b/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java index 7a0ad754..919975b0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java @@ -3,11 +3,10 @@ package me.xmrvizzy.skyblocker.utils; import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.toast.Toast; import net.minecraft.client.toast.ToastManager; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; @Environment(value= EnvType.CLIENT) @@ -21,14 +20,13 @@ public class ToastBuilder implements Toast { } @Override - public Toast.Visibility draw(MatrixStack matrices, ToastManager manager, long startTime) { - RenderSystem.setShader(GameRenderer::getPositionTexProgram); - RenderSystem.setShaderTexture(0, TEXTURE); + public Toast.Visibility draw(DrawContext context, ToastManager manager, long startTime) { + TextRenderer textRenderer = manager.getClient().textRenderer; RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - DrawableHelper.drawTexture(matrices, 0, 0, 0, 0, this.getWidth(), this.getHeight()); - manager.getClient().textRenderer.draw(matrices, title, 7.0f, 7.0f, -11534256); - manager.getClient().textRenderer.draw(matrices, description, 7.0f, 18.0f, -16777216); + context.drawTexture(TEXTURE, 0, 0, 0, 0, this.getWidth(), this.getHeight()); + context.drawText(textRenderer, title, 7, 7, -11534256, false); + context.drawText(textRenderer, description, 7, 18, -16777216, false); return startTime >= 3000L ? Toast.Visibility.HIDE : Toast.Visibility.SHOW; } } -- cgit From 8a5abeaec788dd5d17d8ddfb548a16fd2e8c5e43 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 20 Jun 2023 12:08:38 +0800 Subject: Async DiscordRPC --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 028386ab..a4e403fc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -52,13 +52,13 @@ public class Utils { isInjected = true; ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip); } - SkyblockEvents.JOIN.invoker().onSkyblockJoin(); isOnSkyblock = true; + SkyblockEvents.JOIN.invoker().onSkyblockJoin(); } } else if (isOnSkyblock) { - SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); isOnSkyblock = false; isInDungeons = false; + SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); } -- cgit From 027426aacac048b85cd310e9e3d4101e0156a917 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 Fairy Souls Helper --- .../java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 90 +++++++++++++++++++++ .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 30 +++++++ .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 91 +++++++++++++++++++++- 3 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java new file mode 100644 index 00000000..027cfa7a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -0,0 +1,90 @@ +package me.xmrvizzy.skyblocker.utils; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.Text; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.errors.RepositoryNotFoundException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class NEURepo { + private static final Logger LOGGER = LoggerFactory.getLogger(NEURepo.class); + public static final String REMOTE_REPO_URL = "https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO.git"; + public static final Path LOCAL_REPO_DIR = SkyblockerMod.CONFIG_DIR.resolve("item-repo"); + private static final CompletableFuture REPO_INITIALIZED = initRepository(); + + /** + * Adds command to update repository manually from ingame. + *

+ * TODO A button could be added to the settings menu that will trigger this command. + */ + public static void init() { + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> + dispatcher.register(ClientCommandManager.literal(SkyblockerMod.NAMESPACE) + .then(ClientCommandManager.literal("updaterepository").executes(context -> { + deleteAndDownloadRepository(); + return 1; + })))); + } + + public static CompletableFuture initRepository() { + return CompletableFuture.runAsync(() -> { + try { + if (Files.isDirectory(NEURepo.LOCAL_REPO_DIR)) { + try (Git localRepo = Git.open(NEURepo.LOCAL_REPO_DIR.toFile())) { + localRepo.pull().setRebase(true).call(); + LOGGER.info("[Skyblocker] NEU Repository Updated"); + } + } else { + Git.cloneRepository().setURI(REMOTE_REPO_URL).setDirectory(NEURepo.LOCAL_REPO_DIR.toFile()).setBranchesToClone(List.of("refs/heads/master")).setBranch("refs/heads/master").call().close(); + LOGGER.info("[Skyblocker] NEU Repository Downloaded"); + } + } catch (RepositoryNotFoundException e) { + LOGGER.warn("Local NEU Repository not found or corrupted, downloading new one", e); + deleteAndDownloadRepository(); + } catch (Exception e) { + LOGGER.error("Encountered unknown exception while initializing NEU Repository", e); + } + }); + } + + public static void deleteAndDownloadRepository() { + CompletableFuture.runAsync(() -> { + try { + ItemRegistry.filesImported = false; + File dir = NEURepo.LOCAL_REPO_DIR.toFile(); + recursiveDelete(dir); + } catch (Exception ex) { + if (MinecraftClient.getInstance().player != null) + MinecraftClient.getInstance().player.sendMessage(Text.translatable("skyblocker.updaterepository.failed"), false); + return; + } + initRepository(); + }); + } + + @SuppressWarnings("ResultOfMethodCallIgnored") + private static void recursiveDelete(File dir) { + File[] children; + if (dir.isDirectory() && !Files.isSymbolicLink(dir.toPath()) && (children = dir.listFiles()) != null) { + for (File child : children) { + recursiveDelete(child); + } + } + dir.delete(); + } + + public static CompletableFuture runAsyncAfterLoad(Runnable runnable) { + return REPO_INITIALIZED.thenRunAsync(runnable); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java new file mode 100644 index 00000000..79308dc3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.utils; + +import me.x150.renderer.render.Renderer3d; +import me.xmrvizzy.skyblocker.mixin.accessor.BeaconBlockEntityRendererInvoker; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +import java.awt.*; + +public class RenderHelper { + public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + renderFilledThroughWalls(context, pos, colorComponents, alpha); + renderBeaconBeam(context, pos, colorComponents); + } + + public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + Renderer3d.renderThroughWalls(); + Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), new Vec3d(1, 1, 1)); + Renderer3d.stopRenderThroughWalls(); + } + + public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { + context.matrixStack().push(); + context.matrixStack().translate(pos.getX() - context.camera().getPos().x, pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); + BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); + context.matrixStack().pop(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index a4e403fc..40c96660 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -1,13 +1,21 @@ package me.xmrvizzy.skyblocker.utils; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; import net.minecraft.scoreboard.ScoreboardPlayerScore; import net.minecraft.scoreboard.Team; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; import java.util.ArrayList; @@ -21,6 +29,14 @@ public class Utils { private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; + private static String profile = ""; + private static String server = ""; + private static String gameType = ""; + private static String locationRaw = ""; + private static String map = ""; + private static long clientWorldJoinTime = 0; + private static boolean sentLocRaw = false; + private static long lastLocRaw = 0; public static boolean isOnSkyblock() { return isOnSkyblock; @@ -34,6 +50,31 @@ public class Utils { return isInjected; } + public static String getProfile() { + return profile; + } + + public static String getServer() { + return server; + } + + public static String getGameType() { + return gameType; + } + + public static String getLocationRaw() { + return locationRaw; + } + + public static String getMap() { + return map; + } + + public static void init() { + ClientPlayConnectionEvents.JOIN.register(Utils::onClientWorldJoin); + ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); + } + public static void sbChecker() { MinecraftClient client = MinecraftClient.getInstance(); List sidebar; @@ -61,13 +102,14 @@ public class Utils { SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); + updateLocRaw(); } public static String getLocation() { String location = null; List sidebarLines = getSidebar(); try { - if( sidebarLines != null) { + if (sidebarLines != null) { for (String sidebarLine : sidebarLines) { if (sidebarLine.contains("⏣")) location = sidebarLine; } @@ -149,4 +191,51 @@ public class Utils { return null; } } + + public static void onClientWorldJoin(ClientPlayNetworkHandler handler, PacketSender sender, MinecraftClient client) { + clientWorldJoinTime = System.currentTimeMillis(); + resetLocRawInfo(); + } + + private static void updateLocRaw() { + if (isOnSkyblock) { + long currentTime = System.currentTimeMillis(); + if (!sentLocRaw && currentTime > clientWorldJoinTime + 1000 && currentTime > lastLocRaw + 15000) { + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/locraw"); + sentLocRaw = true; + lastLocRaw = currentTime; + } + } else { + resetLocRawInfo(); + } + } + + public static boolean onChatMessage(Text text, boolean overlay) { + String message = text.getString(); + if (message.startsWith("{\"server\":") && message.endsWith("}")) { + JsonObject locRaw = JsonParser.parseString(message).getAsJsonObject(); + if (locRaw.has("server")) { + server = locRaw.get("server").getAsString(); + if (locRaw.has("gameType")) { + gameType = locRaw.get("gameType").getAsString(); + } + if (locRaw.has("mode")) { + locationRaw = locRaw.get("mode").getAsString(); + } + if (locRaw.has("map")) { + map = locRaw.get("map").getAsString(); + } + return !sentLocRaw; + } + } + return true; + } + + private static void resetLocRawInfo() { + sentLocRaw = false; + server = ""; + gameType = ""; + locationRaw = ""; + map = ""; + } } \ No newline at end of file -- cgit From 3ecd4afc187a69c174fa4dfa1622e705700f674c Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 17:58:00 -0400 Subject: Add profile updating from player list --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 40c96660..6f238b44 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -11,6 +11,7 @@ import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.network.PlayerListEntry; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; import net.minecraft.scoreboard.ScoreboardPlayerScore; @@ -26,6 +27,7 @@ import java.util.List; * Utility variables and methods for retrieving Skyblock related information. */ public class Utils { + private static final String PROFILE_PREFIX = "§r§e§lProfile: §r§a"; private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; @@ -102,6 +104,7 @@ public class Utils { SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); + updateFromPlayerList(client); updateLocRaw(); } @@ -192,6 +195,21 @@ public class Utils { } } + private static void updateFromPlayerList(MinecraftClient client) { + if (client.getNetworkHandler() == null) { + return; + } + for (PlayerListEntry playerListEntry : client.getNetworkHandler().getPlayerList()) { + if (playerListEntry.getDisplayName() == null) { + continue; + } + String name = playerListEntry.getDisplayName().getString(); + if (name.startsWith(PROFILE_PREFIX)) { + profile = name.substring(PROFILE_PREFIX.length()); + } + } + } + public static void onClientWorldJoin(ClientPlayNetworkHandler handler, PacketSender sender, MinecraftClient client) { clientWorldJoinTime = System.currentTimeMillis(); resetLocRawInfo(); -- cgit From 284518527393aa3363c15119c41d28f863122e37 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 18:03:56 -0400 Subject: Abstract different checking methods in Utils --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 6f238b44..887476f2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -77,8 +77,14 @@ public class Utils { ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); } - public static void sbChecker() { + public static void update() { MinecraftClient client = MinecraftClient.getInstance(); + updateFromScoreboard(client); + updateFromPlayerList(client); + updateLocRaw(); + } + + public static void updateFromScoreboard(MinecraftClient client) { List sidebar; if (client.world == null || client.isInSingleplayer() || (sidebar = getSidebar()) == null) { @@ -104,8 +110,6 @@ public class Utils { SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); - updateFromPlayerList(client); - updateLocRaw(); } public static String getLocation() { -- cgit From 08fa8669d4ff3ec098688a3e85b58ee8e9e0eea4 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 18:08:02 -0400 Subject: Add docs to Utils and NEURepo --- .../java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 8 ++++++ .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 33 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java index 027cfa7a..0de6cecd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -17,6 +17,9 @@ import java.nio.file.Path; import java.util.List; import java.util.concurrent.CompletableFuture; +/** + * Initializes the NEU repo, which contains item metadata and fairy souls location data. Clones the repo if it does not exist and checks for updates. Use {@link #runAsyncAfterLoad(Runnable)} to run code after the repo is initialized. + */ public class NEURepo { private static final Logger LOGGER = LoggerFactory.getLogger(NEURepo.class); public static final String REMOTE_REPO_URL = "https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO.git"; @@ -84,6 +87,11 @@ public class NEURepo { dir.delete(); } + /** + * Runs the given runnable after the NEU repo is initialized. + * @param runnable the runnable to run + * @return a completable future of the given runnable + */ public static CompletableFuture runAsyncAfterLoad(Runnable runnable) { return REPO_INITIALIZED.thenRunAsync(runnable); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 887476f2..1b5019a7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -31,6 +31,10 @@ public class Utils { private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; + /** + * The following fields store data returned from /locraw: {@link #profile}, {@link #server}, {@link #gameType}, {@link #locationRaw}, and {@link #map}. + */ + @SuppressWarnings("JavadocDeclaration") private static String profile = ""; private static String server = ""; private static String gameType = ""; @@ -52,22 +56,37 @@ public class Utils { return isInjected; } + /** + * @return the profile parsed from the player list. + */ public static String getProfile() { return profile; } + /** + * @return the server parsed from /locraw. + */ public static String getServer() { return server; } + /** + * @return the game type parsed from /locraw. + */ public static String getGameType() { return gameType; } + /** + * @return the location raw parsed from /locraw. + */ public static String getLocationRaw() { return locationRaw; } + /** + * @return the map parsed from /locraw. + */ public static String getMap() { return map; } @@ -77,6 +96,9 @@ public class Utils { ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); } + /** + * Updates all the fields stored in this class from the sidebar, player list, and /locraw. + */ public static void update() { MinecraftClient client = MinecraftClient.getInstance(); updateFromScoreboard(client); @@ -84,6 +106,9 @@ public class Utils { updateLocRaw(); } + /** + * Updates {@link #isOnSkyblock}, {@link #isInDungeons}, and {@link #isInjected} from the scoreboard. + */ public static void updateFromScoreboard(MinecraftClient client) { List sidebar; @@ -219,6 +244,9 @@ public class Utils { resetLocRawInfo(); } + /** + * Sends /locraw to the server if the player is on skyblock and on a new island. + */ private static void updateLocRaw() { if (isOnSkyblock) { long currentTime = System.currentTimeMillis(); @@ -232,6 +260,11 @@ public class Utils { } } + /** + * Parses the /locraw reply from the server + * + * @return not display the message in chat is the command is sent by the mod + */ public static boolean onChatMessage(Text text, boolean overlay) { String message = text.getString(); if (message.startsWith("{\"server\":") && message.endsWith("}")) { -- cgit From a0d504d9e2ffa95bbd2d9d99e546a44572417de9 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 31 May 2023 08:31:57 +0800 Subject: Updated NEU repo error handling --- src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java index 0de6cecd..5254feb1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -7,6 +7,7 @@ import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallba import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.TransportException; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,11 +53,13 @@ public class NEURepo { Git.cloneRepository().setURI(REMOTE_REPO_URL).setDirectory(NEURepo.LOCAL_REPO_DIR.toFile()).setBranchesToClone(List.of("refs/heads/master")).setBranch("refs/heads/master").call().close(); LOGGER.info("[Skyblocker] NEU Repository Downloaded"); } + } catch (TransportException e){ + LOGGER.error("[Skyblocker] Transport operation failed. Most likely unable to connect to the remote NEU repo on github", e); } catch (RepositoryNotFoundException e) { - LOGGER.warn("Local NEU Repository not found or corrupted, downloading new one", e); + LOGGER.warn("[Skyblocker] Local NEU Repository not found or corrupted, downloading new one", e); deleteAndDownloadRepository(); } catch (Exception e) { - LOGGER.error("Encountered unknown exception while initializing NEU Repository", e); + LOGGER.error("[Skyblocker] Encountered unknown exception while initializing NEU Repository", e); } }); } -- cgit From 5f8683ab480d9efadbe1b39c006bcc33ae68458e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 2 Jun 2023 15:51:19 +0800 Subject: Narrowed access to methods --- src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java index 5254feb1..29b39aa3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -41,7 +41,7 @@ public class NEURepo { })))); } - public static CompletableFuture initRepository() { + private static CompletableFuture initRepository() { return CompletableFuture.runAsync(() -> { try { if (Files.isDirectory(NEURepo.LOCAL_REPO_DIR)) { @@ -64,7 +64,7 @@ public class NEURepo { }); } - public static void deleteAndDownloadRepository() { + private static void deleteAndDownloadRepository() { CompletableFuture.runAsync(() -> { try { ItemRegistry.filesImported = false; -- cgit From 3f7d97daa8b531c6bbb2019106947575cbe0b89a Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 11:25:22 +0800 Subject: Fix profile detection --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 1b5019a7..94ead7c1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -27,7 +27,7 @@ import java.util.List; * Utility variables and methods for retrieving Skyblock related information. */ public class Utils { - private static final String PROFILE_PREFIX = "§r§e§lProfile: §r§a"; + private static final String PROFILE_PREFIX = "Profile: "; private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; -- cgit From 272131e0c082493e0df12b510012460f07a88694 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:39:09 +0800 Subject: Fix cancel game message incompatibility --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 1 + 1 file changed, 1 insertion(+) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 94ead7c1..90939fe8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -94,6 +94,7 @@ public class Utils { public static void init() { ClientPlayConnectionEvents.JOIN.register(Utils::onClientWorldJoin); ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); + ClientReceiveMessageEvents.GAME_CANCELED.register(Utils::onChatMessage); // Somehow this works even though onChatMessage returns a boolean } /** -- cgit From 0a3c3d61b749172464665634b392b1f68a32288e Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 23 Jun 2023 14:27:42 -0400 Subject: Added Rift Tab Hud + 1 Rift related fix --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 90939fe8..d961ba7e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -145,9 +145,10 @@ public class Utils { if (sidebarLines != null) { for (String sidebarLine : sidebarLines) { if (sidebarLine.contains("⏣")) location = sidebarLine; + if (sidebarLine.contains("ф")) location = sidebarLine; //Rift } if (location == null) location = "Unknown"; - location = location.replace('⏣', ' ').strip(); + location = location.strip(); } } catch (IndexOutOfBoundsException e) { e.printStackTrace(); -- cgit From 5764eed4cfd41e78a8cc1bb6ceb51fc0f5b84d9c Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 26 Jun 2023 19:39:18 +0800 Subject: Refactor MirrorverseWaypoints --- src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java | 5 +++++ src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java index 6973aa1e..9ea90c16 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.utils; import me.xmrvizzy.skyblocker.mixin.AccessorWorldRenderer; +import me.xmrvizzy.skyblocker.mixin.accessor.FrustumInvoker; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Frustum; import net.minecraft.util.math.Box; @@ -14,4 +15,8 @@ public class FrustumUtils { public static boolean isBoxVisible(Box box) { return getFrustum().isVisible(box); } + + public static boolean isVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) { + return ((FrustumInvoker) getFrustum()).isVisible(minX, minY, minZ, maxX, maxY, maxZ); + } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index 79308dc3..c843dc43 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -17,10 +17,20 @@ public class RenderHelper { public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { Renderer3d.renderThroughWalls(); - Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), new Vec3d(1, 1, 1)); + renderFilled(context, pos, colorComponents, alpha); Renderer3d.stopRenderThroughWalls(); } + public static void renderFilledIfVisible(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { + renderFilled(context, pos, colorComponents, alpha); + } + } + + public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), new Vec3d(1, 1, 1)); + } + public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { context.matrixStack().push(); context.matrixStack().translate(pos.getX() - context.camera().getPos().x, pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); -- cgit From 86189e6455662e25e3f8cc64cc3ebbffea201db2 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 26 Jun 2023 14:33:00 -0400 Subject: Reuse vector --- src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index c843dc43..b37d324d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -10,6 +10,8 @@ import net.minecraft.util.math.Vec3d; import java.awt.*; public class RenderHelper { + private static final Vec3d DIMENSIONS = new Vec3d(1, 1, 1); + public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { renderFilledThroughWalls(context, pos, colorComponents, alpha); renderBeaconBeam(context, pos, colorComponents); @@ -28,7 +30,7 @@ public class RenderHelper { } public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), new Vec3d(1, 1, 1)); + Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), DIMENSIONS); } public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { -- cgit From f941ae83603d242972567710021192f1a4dfdc02 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 26 Jun 2023 17:41:32 -0400 Subject: Format file --- .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 64 ++++++++++++---------- 1 file changed, 36 insertions(+), 28 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index b37d324d..3c3e30d1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -11,32 +11,40 @@ import java.awt.*; public class RenderHelper { private static final Vec3d DIMENSIONS = new Vec3d(1, 1, 1); - - public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - renderFilledThroughWalls(context, pos, colorComponents, alpha); - renderBeaconBeam(context, pos, colorComponents); - } - - public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - Renderer3d.renderThroughWalls(); - renderFilled(context, pos, colorComponents, alpha); - Renderer3d.stopRenderThroughWalls(); - } - - public static void renderFilledIfVisible(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { - renderFilled(context, pos, colorComponents, alpha); - } - } - - public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), DIMENSIONS); - } - - public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { - context.matrixStack().push(); - context.matrixStack().translate(pos.getX() - context.camera().getPos().x, pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); - BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); - context.matrixStack().pop(); - } + + public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, + float[] colorComponents, float alpha) { + renderFilledThroughWalls(context, pos, colorComponents, alpha); + renderBeaconBeam(context, pos, colorComponents); + } + + public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, + float alpha) { + Renderer3d.renderThroughWalls(); + renderFilled(context, pos, colorComponents, alpha); + Renderer3d.stopRenderThroughWalls(); + } + + public static void renderFilledIfVisible(WorldRenderContext context, BlockPos pos, float[] colorComponents, + float alpha) { + if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, + pos.getZ() + 1)) { + renderFilled(context, pos, colorComponents, alpha); + } + } + + public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + Renderer3d.renderFilled(context.matrixStack(), + new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), + DIMENSIONS); + } + + public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { + context.matrixStack().push(); + context.matrixStack().translate(pos.getX() - context.camera().getPos().x, + pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); + BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), + context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); + context.matrixStack().pop(); + } } -- cgit From fa6c260672468ed412e65a685f89cf2e09e2f1d7 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 27 Jun 2023 13:26:28 +0800 Subject: Refactor RenderHelper --- .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 66 ++++++++++------------ 1 file changed, 29 insertions(+), 37 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index 3c3e30d1..2e942905 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -10,41 +10,33 @@ import net.minecraft.util.math.Vec3d; import java.awt.*; public class RenderHelper { - private static final Vec3d DIMENSIONS = new Vec3d(1, 1, 1); - - public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, - float[] colorComponents, float alpha) { - renderFilledThroughWalls(context, pos, colorComponents, alpha); - renderBeaconBeam(context, pos, colorComponents); - } - - public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, - float alpha) { - Renderer3d.renderThroughWalls(); - renderFilled(context, pos, colorComponents, alpha); - Renderer3d.stopRenderThroughWalls(); - } - - public static void renderFilledIfVisible(WorldRenderContext context, BlockPos pos, float[] colorComponents, - float alpha) { - if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, - pos.getZ() + 1)) { - renderFilled(context, pos, colorComponents, alpha); - } - } - - public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - Renderer3d.renderFilled(context.matrixStack(), - new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), - DIMENSIONS); - } - - public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { - context.matrixStack().push(); - context.matrixStack().translate(pos.getX() - context.camera().getPos().x, - pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); - BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), - context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); - context.matrixStack().pop(); - } + private static final Vec3d ONE = new Vec3d(1, 1, 1); + + public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + renderFilledThroughWalls(context, pos, colorComponents, alpha); + renderBeaconBeam(context, pos, colorComponents); + } + + public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + Renderer3d.renderThroughWalls(); + renderFilled(context, pos, colorComponents, alpha); + Renderer3d.stopRenderThroughWalls(); + } +