From 001e52d189cec4a17a9f3829d3b2075b53d01c7d Mon Sep 17 00:00:00 2001 From: Mia Date: Wed, 20 Aug 2025 18:37:22 -0400 Subject: [PATCH 01/12] fix: prevent GL Invalid key -1 error from flooding logs --- .../java/cc/aabss/eventutils/KeybindManager.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/cc/aabss/eventutils/KeybindManager.java b/src/main/java/cc/aabss/eventutils/KeybindManager.java index 175bd34..30b848a 100644 --- a/src/main/java/cc/aabss/eventutils/KeybindManager.java +++ b/src/main/java/cc/aabss/eventutils/KeybindManager.java @@ -52,14 +52,16 @@ public KeybindManager(@NotNull EventUtils mod) { if (windowHandle == null) windowHandle = client.getWindow().getHandle(); // Event info key - if (GLFW.glfwGetKey(windowHandle, ((KeyBindingMixin) eventInfoKey).getBoundKey().getCode()) == GLFW.GLFW_PRESS) { - if (canNotPress(eventInfoKey)) return; - EventUtils.LOGGER.info("Event info key pressed"); - if (SocketEndpoint.LAST_EVENT != null) { - client.setScreen(new EventInfoScreen(SocketEndpoint.LAST_EVENT)); - return; + if (!eventInfoKey.isUnbound()) { + if (GLFW.glfwGetKey(windowHandle, ((KeyBindingMixin) eventInfoKey).getBoundKey().getCode()) == GLFW.GLFW_PRESS) { + if (canNotPress(eventInfoKey)) return; + EventUtils.LOGGER.info("Event info key pressed"); + if (SocketEndpoint.LAST_EVENT != null) { + client.setScreen(new EventInfoScreen(SocketEndpoint.LAST_EVENT)); + return; + } + if (client.player != null) client.player.sendMessage(Text.literal("No event has happened recently!").formatted(Formatting.RED), true); } - if (client.player != null) client.player.sendMessage(Text.literal("No event has happened recently!").formatted(Formatting.RED), true); } // DEV: Uncomment to force test event From 08dd4d11e82d1385b2c5302b07feb27099a7fe47 Mon Sep 17 00:00:00 2001 From: Mia Date: Wed, 20 Aug 2025 18:52:19 -0400 Subject: [PATCH 02/12] update: remove old MC versions, add 1.21.5/1.21.6 as per requested by Oiiink --- versions/1.20.6/gradle.properties | 6 ------ versions/1.21.3/gradle.properties | 6 ------ versions/1.21.5/gradle.properties | 6 ++++++ versions/1.21.6/gradle.properties | 6 ++++++ 4 files changed, 12 insertions(+), 12 deletions(-) delete mode 100644 versions/1.20.6/gradle.properties delete mode 100644 versions/1.21.3/gradle.properties create mode 100644 versions/1.21.5/gradle.properties create mode 100644 versions/1.21.6/gradle.properties diff --git a/versions/1.20.6/gradle.properties b/versions/1.20.6/gradle.properties deleted file mode 100644 index 836c32c..0000000 --- a/versions/1.20.6/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -deps.minecraft=1.20.6 -deps.yarn_mappings=1.20.6+build.3 -deps.fabric_api=0.100.8+1.20.6 - -deps.yacl=3.6.0+1.20.6-fabric -deps.modmenu=10.0.0 diff --git a/versions/1.21.3/gradle.properties b/versions/1.21.3/gradle.properties deleted file mode 100644 index 9ed81d4..0000000 --- a/versions/1.21.3/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -deps.minecraft=1.21.3 -deps.yarn_mappings=1.21.3+build.2 -deps.fabric_api=0.114.0+1.21.3 - -deps.yacl=3.6.0+1.21.2-fabric -deps.modmenu=12.0.0 diff --git a/versions/1.21.5/gradle.properties b/versions/1.21.5/gradle.properties new file mode 100644 index 0000000..6f6affe --- /dev/null +++ b/versions/1.21.5/gradle.properties @@ -0,0 +1,6 @@ +deps.minecraft=1.21.4 +deps.yarn_mappings=1.21.4+build.7 +deps.fabric_api=0.114.0+1.21.4 + +deps.yacl=3.6.2+1.21.4-fabric +deps.modmenu=13.0.0-beta.1 diff --git a/versions/1.21.6/gradle.properties b/versions/1.21.6/gradle.properties new file mode 100644 index 0000000..6f6affe --- /dev/null +++ b/versions/1.21.6/gradle.properties @@ -0,0 +1,6 @@ +deps.minecraft=1.21.4 +deps.yarn_mappings=1.21.4+build.7 +deps.fabric_api=0.114.0+1.21.4 + +deps.yacl=3.6.2+1.21.4-fabric +deps.modmenu=13.0.0-beta.1 From 4299503acbaf4eb4e9f82aa031ce549884ea0681 Mon Sep 17 00:00:00 2001 From: Mia Date: Wed, 20 Aug 2025 18:55:46 -0400 Subject: [PATCH 03/12] update: consolidate confirm disconnect mixin & multiversion support --- settings.gradle.kts | 4 +- .../cc/aabss/eventutils/UpdateChecker.java | 12 +++++- .../eventutils/mixin/ButtonWidgetMixin.java | 37 +++---------------- stonecutter.gradle.kts | 2 +- versions/1.21.5/gradle.properties | 10 ++--- versions/1.21.6/gradle.properties | 10 ++--- 6 files changed, 29 insertions(+), 46 deletions(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 865d1b7..d0b80aa 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -10,11 +10,11 @@ stonecutter { centralScript = "build.gradle.kts" shared { versions( // Make sure to update .github/workflows/publish.yml when changing versions! + "1.21.6", + "1.21.5", "1.21.4", - "1.21.3", "1.21.1", "1.21", - "1.20.6", "1.20.4") } create(rootProject) diff --git a/src/main/java/cc/aabss/eventutils/UpdateChecker.java b/src/main/java/cc/aabss/eventutils/UpdateChecker.java index 62e979d..ee6e0eb 100644 --- a/src/main/java/cc/aabss/eventutils/UpdateChecker.java +++ b/src/main/java/cc/aabss/eventutils/UpdateChecker.java @@ -30,13 +30,23 @@ private void notifyUpdate(@NotNull String latestVersion) { final MinecraftClient client = MinecraftClient.getInstance(); client.send(() -> { if (client.player == null) return; + //? if >=1.21.5 { client.player.sendMessage(Text.literal("§6[EVENTUTILS]§r §e" + EventUtils.translate("eventutils.updatechecker.new")+"§r §7(v" + Versions.EU_VERSION + " -> v" + latestVersion.replace(Versions.MC_VERSION + "-", "") + ")" + "\n") + .setStyle(Style.EMPTY + .withHoverEvent(new HoverEvent.ShowText(translatable("eventutils.updatechecker.hover"))) + .withClickEvent(new ClickEvent.OpenUrl(URI.create("https://modrinth.com/mod/alerts/version/" + latestVersion)))) + .append(Text.literal("§7§o" + EventUtils.translate("eventutils.updatechecker.config")) + .setStyle(Style.EMPTY.withClickEvent(new ClickEvent.RunCommand("/event utils")))), + false); + //?} else { + /*client.player.sendMessage(Text.literal("§6[EVENTUTILS]§r §e" + EventUtils.translate("eventutils.updatechecker.new")+"§r §7(v" + Versions.EU_VERSION + " -> v" + latestVersion.replace(Versions.MC_VERSION + "-", "") + ")" + "\n") .setStyle(Style.EMPTY .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, translatable("eventutils.updatechecker.hover"))) .withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://modrinth.com/mod/alerts/version/" + latestVersion))) .append(Text.literal("§7§o" + EventUtils.translate("eventutils.updatechecker.config")) .setStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/eventutils config")))), - false); + false);*/ + //?} }); } diff --git a/src/main/java/cc/aabss/eventutils/mixin/ButtonWidgetMixin.java b/src/main/java/cc/aabss/eventutils/mixin/ButtonWidgetMixin.java index 6098290..b748716 100644 --- a/src/main/java/cc/aabss/eventutils/mixin/ButtonWidgetMixin.java +++ b/src/main/java/cc/aabss/eventutils/mixin/ButtonWidgetMixin.java @@ -4,15 +4,12 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.*; -import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.PressableWidget; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.client.realms.gui.screen.RealmsMainScreen; import net.minecraft.text.Text; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -22,6 +19,8 @@ @Mixin(ButtonWidget.class) public abstract class ButtonWidgetMixin extends PressableWidget { + @Shadow public abstract void onPress(); + public ButtonWidgetMixin(int i, int j, int k, int l, Text text) { super(i, j, k, l, text); } @@ -36,36 +35,10 @@ private void onPress(CallbackInfo ci) { final Screen current = client.currentScreen; client.setScreen(new ConfirmScreen(yes -> { if (yes) { - disconnect(); + this.onPress(); return; } client.setScreen(current); }, translatable("eventutils.confirm_disconnect.title"), translatable("eventutils.confirm_disconnect.message"))); } - - @Unique - private void disconnect() { - final MinecraftClient client = MinecraftClient.getInstance(); - if (client == null || client.world == null) return; - final TitleScreen titleScreen = new TitleScreen(); - client.world.disconnect(); - - // Singleplayer - if (client.isInSingleplayer()) { - client.disconnect(new MessageScreen(translatable("menu.savingLevel"))); - client.setScreen(titleScreen); - return; - } - client.disconnect(); - - // Realms - final ServerInfo serverInfo = MinecraftClient.getInstance().getCurrentServerEntry(); - if (serverInfo != null && serverInfo.isRealm()) { - client.setScreen(new RealmsMainScreen(titleScreen)); - return; - } - - // Multiplayer - client.setScreen(new MultiplayerScreen(titleScreen)); - } -} +} \ No newline at end of file diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 10efe16..71f12d2 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -1,6 +1,6 @@ plugins { id("dev.kikugie.stonecutter") } -stonecutter active "1.21.4" /* [SC] DO NOT EDIT */ +stonecutter active "1.21.5" /* [SC] DO NOT EDIT */ stonecutter.registerChiseled(tasks.register("chiseledBuild", stonecutter.chiseled) { group = "project" diff --git a/versions/1.21.5/gradle.properties b/versions/1.21.5/gradle.properties index 6f6affe..1ed86a5 100644 --- a/versions/1.21.5/gradle.properties +++ b/versions/1.21.5/gradle.properties @@ -1,6 +1,6 @@ -deps.minecraft=1.21.4 -deps.yarn_mappings=1.21.4+build.7 -deps.fabric_api=0.114.0+1.21.4 +deps.minecraft=1.21.5 +deps.yarn_mappings=1.21.5+build.1 +deps.fabric_api=0.128.2+1.21.5 -deps.yacl=3.6.2+1.21.4-fabric -deps.modmenu=13.0.0-beta.1 +deps.yacl=3.7.1+1.21.5-fabric +deps.modmenu=14.0.0-rc.2 diff --git a/versions/1.21.6/gradle.properties b/versions/1.21.6/gradle.properties index 6f6affe..d8a4d8f 100644 --- a/versions/1.21.6/gradle.properties +++ b/versions/1.21.6/gradle.properties @@ -1,6 +1,6 @@ -deps.minecraft=1.21.4 -deps.yarn_mappings=1.21.4+build.7 -deps.fabric_api=0.114.0+1.21.4 +deps.minecraft=1.21.6 +deps.yarn_mappings=1.21.6+build.1 +deps.fabric_api=0.128.2+1.21.6 -deps.yacl=3.6.2+1.21.4-fabric -deps.modmenu=13.0.0-beta.1 +deps.yacl=3.7.1+1.21.6-fabric +deps.modmenu=15.0.0-beta.3 From 361843d63f64dba82367d6f75665faa00aa40ea3 Mon Sep 17 00:00:00 2001 From: Mia Date: Wed, 20 Aug 2025 19:24:53 -0400 Subject: [PATCH 04/12] update: multiversion for 1.21.5 and 1.21.6 --- .../aabss/eventutils/NotificationToast.java | 31 +++++++++++++++---- .../cc/aabss/eventutils/UpdateChecker.java | 8 ++--- .../eventutils/utility/ConnectUtility.java | 7 +++++ stonecutter.gradle.kts | 2 +- 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/main/java/cc/aabss/eventutils/NotificationToast.java b/src/main/java/cc/aabss/eventutils/NotificationToast.java index 922e2f4..c08e372 100644 --- a/src/main/java/cc/aabss/eventutils/NotificationToast.java +++ b/src/main/java/cc/aabss/eventutils/NotificationToast.java @@ -5,14 +5,20 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.toast.Toast; import net.minecraft.client.toast.ToastManager; import net.minecraft.text.OrderedText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +//? if >=1.21.6 { + +/*import net.minecraft.client.gl.RenderPipelines; + +*///?} + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -80,15 +86,20 @@ public int getHeight() { @Override //? if <1.21.2 { - /*public Toast.Visibility draw(DrawContext drawContext, ToastManager manager, long startTime) {*/ - //?} else { + /*public Toast.Visibility draw(DrawContext drawContext, ToastManager manager, long startTime) { + *///?} else { public void draw(DrawContext drawContext, TextRenderer textRenderer, long startTime) { //?} if (width == 160 && lines.size() <= 1) { //? if <1.21.2 { - /*drawContext.drawGuiTexture(TEXTURE, 0, 0, width, height);*/ - //?} else { - drawContext.drawGuiTexture(RenderLayer::getGuiTextured, TEXTURE, 0, 0, width, height); + /*drawContext.drawGuiTexture(TEXTURE, 0, 0, width, height); + *///?} else { + //? if >=1.21.6 { + /*drawContext.drawGuiTexture(RenderPipelines.GUI_TEXTURED, TEXTURE, 0, 0, width, height); // work on 1.21.4 and 1.21.5 + *///?} else { + drawContext.drawGuiTexture(RenderLayer::getGuiTextured, TEXTURE, 0, 0, width, height); // work on 1.21.4 and 1.21.5 + + //?} //?} } else { int minHeight = Math.min(4, height - 28); @@ -119,9 +130,17 @@ private void drawPart(@NotNull DrawContext context, int j, int k, int l) { for (int o = m; o < widthN; o += 64) context.drawGuiTexture(TEXTURE, 160, 32, 32, j, o, k, Math.min(64, widthN - o), l); context.drawGuiTexture(TEXTURE, 160, 32, 160 - n, j, widthN, k, n, l); *///?} else { + //? if >=1.21.6 { + /*context.drawGuiTexture(RenderPipelines.GUI_TEXTURED, TEXTURE, 160, 32, 0, j, 0, k, m, l); + for (int o = m; o < widthN; o += 64) context.drawGuiTexture(RenderPipelines.GUI_TEXTURED, TEXTURE, 160, 32, 32, j, o, k, Math.min(64, widthN - o), l); + context.drawGuiTexture(RenderPipelines.GUI_TEXTURED, TEXTURE, 160, 32, 160 - n, j, widthN, k, n, l); + *///?} else { + context.drawGuiTexture(RenderLayer::getGuiTextured, TEXTURE, 160, 32, 0, j, 0, k, m, l); for (int o = m; o < widthN; o += 64) context.drawGuiTexture(RenderLayer::getGuiTextured, TEXTURE, 160, 32, 32, j, o, k, Math.min(64, widthN - o), l); context.drawGuiTexture(RenderLayer::getGuiTextured, TEXTURE, 160, 32, 160 - n, j, widthN, k, n, l); + + //?} //?} } diff --git a/src/main/java/cc/aabss/eventutils/UpdateChecker.java b/src/main/java/cc/aabss/eventutils/UpdateChecker.java index ee6e0eb..0df5493 100644 --- a/src/main/java/cc/aabss/eventutils/UpdateChecker.java +++ b/src/main/java/cc/aabss/eventutils/UpdateChecker.java @@ -31,21 +31,21 @@ private void notifyUpdate(@NotNull String latestVersion) { client.send(() -> { if (client.player == null) return; //? if >=1.21.5 { - client.player.sendMessage(Text.literal("§6[EVENTUTILS]§r §e" + EventUtils.translate("eventutils.updatechecker.new")+"§r §7(v" + Versions.EU_VERSION + " -> v" + latestVersion.replace(Versions.MC_VERSION + "-", "") + ")" + "\n") + /*client.player.sendMessage(Text.literal("§6[EVENTUTILS]§r §e" + EventUtils.translate("eventutils.updatechecker.new")+"§r §7(v" + Versions.EU_VERSION + " -> v" + latestVersion.replace(Versions.MC_VERSION + "-", "") + ")" + "\n") .setStyle(Style.EMPTY .withHoverEvent(new HoverEvent.ShowText(translatable("eventutils.updatechecker.hover"))) .withClickEvent(new ClickEvent.OpenUrl(URI.create("https://modrinth.com/mod/alerts/version/" + latestVersion)))) .append(Text.literal("§7§o" + EventUtils.translate("eventutils.updatechecker.config")) .setStyle(Style.EMPTY.withClickEvent(new ClickEvent.RunCommand("/event utils")))), false); - //?} else { - /*client.player.sendMessage(Text.literal("§6[EVENTUTILS]§r §e" + EventUtils.translate("eventutils.updatechecker.new")+"§r §7(v" + Versions.EU_VERSION + " -> v" + latestVersion.replace(Versions.MC_VERSION + "-", "") + ")" + "\n") + *///?} else { + client.player.sendMessage(Text.literal("§6[EVENTUTILS]§r §e" + EventUtils.translate("eventutils.updatechecker.new")+"§r §7(v" + Versions.EU_VERSION + " -> v" + latestVersion.replace(Versions.MC_VERSION + "-", "") + ")" + "\n") .setStyle(Style.EMPTY .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, translatable("eventutils.updatechecker.hover"))) .withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://modrinth.com/mod/alerts/version/" + latestVersion))) .append(Text.literal("§7§o" + EventUtils.translate("eventutils.updatechecker.config")) .setStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/eventutils config")))), - false);*/ + false); //?} }); } diff --git a/src/main/java/cc/aabss/eventutils/utility/ConnectUtility.java b/src/main/java/cc/aabss/eventutils/utility/ConnectUtility.java index 5f66012..081bdf5 100644 --- a/src/main/java/cc/aabss/eventutils/utility/ConnectUtility.java +++ b/src/main/java/cc/aabss/eventutils/utility/ConnectUtility.java @@ -5,6 +5,7 @@ import com.google.gson.JsonObject; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.MessageScreen; import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.client.gui.screen.multiplayer.ConnectScreen; import net.minecraft.client.network.ServerAddress; @@ -22,6 +23,8 @@ import java.util.List; import java.util.concurrent.ExecutionException; +import static net.minecraft.text.Text.translatable; + public class ConnectUtility { public static void connect(@NotNull String ip) { @@ -34,7 +37,11 @@ public static void connect(@NotNull String ip) { final ServerAddress address = ServerAddress.parse(ip); client.execute(() -> { try { + //? if >=1.21.6 { + /*client.disconnect(new MessageScreen(translatable("multiplayer.disconnect.generic")), false); + *///?} else { client.disconnect(); + //?} //? if <=1.20.4 { /*ConnectScreen.connect(screen, client, address, new ServerInfo("EventUtils Event Server", ip, ServerInfo.ServerType.OTHER), true); diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 71f12d2..10efe16 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -1,6 +1,6 @@ plugins { id("dev.kikugie.stonecutter") } -stonecutter active "1.21.5" /* [SC] DO NOT EDIT */ +stonecutter active "1.21.4" /* [SC] DO NOT EDIT */ stonecutter.registerChiseled(tasks.register("chiseledBuild", stonecutter.chiseled) { group = "project" From e23cb403ec9f7b3659c22777f115571482b89aa9 Mon Sep 17 00:00:00 2001 From: Mia Date: Thu, 21 Aug 2025 07:25:54 -0400 Subject: [PATCH 05/12] feature: redesign & modify prioritytop and priority command with locale keys --- .../eventutils/commands/PriorityCmd.java | 91 ++++++++++++++++--- .../assets/eventutils/lang/en_us.json | 13 ++- 2 files changed, 91 insertions(+), 13 deletions(-) diff --git a/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java b/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java index 2f3f451..a14d980 100644 --- a/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java +++ b/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java @@ -1,12 +1,12 @@ package cc.aabss.eventutils.commands; +import cc.aabss.eventutils.EventUtils; import com.mojang.brigadier.context.CommandContext; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; +import net.minecraft.text.*; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; @@ -16,14 +16,14 @@ public class PriorityCmd { - private static final int PLAYERS_PER_PAGE = 17; // maybe can change later + private static final int PLAYERS_PER_PAGE = 10; public static void priority(@NotNull CommandContext context, String name) { final MinecraftClient client = context.getSource().getClient(); client.send(() -> { // Get names - if (client.world == null) { - context.getSource().sendFeedback(Text.literal("Player not found!!").formatted(Formatting.RED)); + if (client.world == null || client.player == null) { + context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.noplayer")); return; } final List namesSorted = client.world.getPlayers().stream() @@ -33,10 +33,15 @@ public static void priority(@NotNull CommandContext c final String nameLower = name.toLowerCase(); for (final String playerName : namesSorted) if (nameLower.equals(playerName.toLowerCase())) { - context.getSource().sendFeedback(Text.literal(name + " has pickup priority #" + (namesSorted.indexOf(name) + 1) + " (based on people around you)")); + if (playerName.equalsIgnoreCase(client.player.getName().getString())) { + context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.self", "§6#" + (namesSorted.indexOf(playerName) + 1))); + } else { + context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.player", playerName, "§6#" + (namesSorted.indexOf(playerName) + 1))); + } + return; } - context.getSource().sendFeedback(Text.literal("Player not found!!").formatted(Formatting.RED)); + context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.noplayer")); }); } @@ -46,19 +51,20 @@ public static void priority(@NotNull CommandContext c client.send(() -> { // Get names if (client.world == null || client.player == null) { - source.sendFeedback(Text.literal("No players found!").formatted(Formatting.RED)); + source.sendFeedback(Text.translatable("eventutils.command.prioritytop.emptypage")); return; } final List namesSorted = client.world.getPlayers().stream() .sorted(Comparator.comparingInt(AbstractClientPlayerEntity::getId)) .map(player -> player.getName().getString()) + .filter(str -> !EventUtils.isNPC(str)) .toList(); // Check page bounds final int totalPlayers = namesSorted.size(); final int totalPages = (int) Math.ceil((double) totalPlayers / PLAYERS_PER_PAGE); if (page > totalPages || page < 1) { - source.sendFeedback(Text.literal("No page exists (limit: " + totalPages + ")!").formatted(Formatting.RED)); + source.sendFeedback(Text.translatable("eventutils.command.prioritytop.notapage", "§f" + totalPages)); return; } @@ -67,14 +73,75 @@ public static void priority(@NotNull CommandContext c final int start = pageIndex * PLAYERS_PER_PAGE; final int end = Math.min(start + PLAYERS_PER_PAGE, totalPlayers); final String clientName = client.player.getName().getString().toLowerCase(); - final MutableText text = Text.literal("\nPage " + page + " of " + totalPages + ":\n"); + final MutableText text = Text.translatable("eventutils.command.prioritytop.page", "§6" + page, "§6" + totalPages); for (int i = start; i < end; i++) { final String name = namesSorted.get(i); - final MutableText item = Text.literal((i + 1) + ". " + name + "\n"); - if (name.toLowerCase().equals(clientName)) item.formatted(Formatting.YELLOW); + final boolean isLocalPlayer = name.equalsIgnoreCase(clientName); + final String boldModifier = isLocalPlayer ? "§l" : ""; + Style colorModifier; + int placement = i + 1; + + colorModifier = switch (placement) { + case 1 -> Style.EMPTY.withColor(TextColor.fromRgb(0xFFEA5C)); + case 2 -> Style.EMPTY.withColor(TextColor.fromRgb(0xC0C0C0)); + case 3 -> Style.EMPTY.withColor(TextColor.fromRgb(0xA97142)); + default -> { + if (isLocalPlayer) { + yield Style.EMPTY.withColor(TextColor.fromFormatting(Formatting.YELLOW)); + } + yield Style.EMPTY.withColor(TextColor.fromFormatting(Formatting.WHITE)); + } + }; + + final MutableText item = Text.literal(String.format("%s%d - %s\n", boldModifier, placement, isLocalPlayer ? name + " (You)" : name)).fillStyle(colorModifier); text.append(item); } source.sendFeedback(text); + + MutableText lastpage = Text.literal(""); + MutableText nextpage = Text.literal(""); + + if (page > 1) { + lastpage = Text.translatable( + "eventutils.command.prioritytop.lastpage", + page - 1 + ).setStyle( + //? if <=1.21.4 { + Style.EMPTY.withClickEvent( + new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/eventutils prioritytop " + (page - 1)) + ) + //?} else { + + /*Style.EMPTY.withClickEvent( + new ClickEvent.RunCommand("/eventutils prioritytop " + (page - 1)) + ) + + *///?} + ); + } + + if (page + 1 <= totalPages) { + nextpage = Text.translatable( + "eventutils.command.prioritytop.nextpage", + page + 1 + ).setStyle( + //? if <=1.21.4 { + Style.EMPTY.withClickEvent( + new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/eventutils prioritytop " + (page + 1)) + ) + //?} else { + + /*Style.EMPTY.withClickEvent( + new ClickEvent.RunCommand("/eventutils prioritytop " + (page + 1)) + ) + + *///?} + ); + } + + if (!lastpage.getString().isEmpty() || !nextpage.getString().isEmpty()) { + source.sendFeedback(Text.translatable("eventutils.command.prioritytop.pagebutton", lastpage, nextpage)); + } }); } } diff --git a/src/main/resources/assets/eventutils/lang/en_us.json b/src/main/resources/assets/eventutils/lang/en_us.json index ea52e8e..5d685b7 100644 --- a/src/main/resources/assets/eventutils/lang/en_us.json +++ b/src/main/resources/assets/eventutils/lang/en_us.json @@ -88,5 +88,16 @@ "eventutils.sound.shakey": "Shakey", "eventutils.sound.time_of_war": "Time of War", - "eventutils.screen.settings": "Settings" + "eventutils.screen.settings": "Settings", + + "eventutils.command.priority.self": "§e[EU] You have pickup priority %s §ebased on the people around you.", + "eventutils.command.priority.player": "§e[EU] %s§e has pickup priority %s §ebased on the people around you.", + "eventutils.command.priority.noplayer": "§c[EU] Player not found!", + + "eventutils.command.prioritytop.emptypage": "§c[EU] No players found!", + "eventutils.command.prioritytop.notapage": "§c[EU] That page wasn't found! (Highest page is Page %s§c)", + "eventutils.command.prioritytop.nextpage": "§6[§7>%s§6 Next Page] ", + "eventutils.command.prioritytop.lastpage": "§6[§7%s<§6 Last Page] ", + "eventutils.command.prioritytop.pagebutton": "§e[EU] %s%s§7(Click)", + "eventutils.command.prioritytop.page": "§e[EU] Page %s §eof %s\n\n" } \ No newline at end of file From 46a1249a56372eebb7cf35b5aea8a754891c51c4 Mon Sep 17 00:00:00 2001 From: Mia Date: Thu, 21 Aug 2025 07:28:35 -0400 Subject: [PATCH 06/12] fix: update NPC name detection --- src/main/java/cc/aabss/eventutils/EventUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cc/aabss/eventutils/EventUtils.java b/src/main/java/cc/aabss/eventutils/EventUtils.java index b44bc52..207539f 100644 --- a/src/main/java/cc/aabss/eventutils/EventUtils.java +++ b/src/main/java/cc/aabss/eventutils/EventUtils.java @@ -129,7 +129,7 @@ public String getIpAndConnect(@NotNull EventType eventType, @NotNull JsonObject } public static boolean isNPC(@NotNull String name) { - return name.contains("[") || name.contains("]") || name.contains(" ") || name.contains("-"); + return name.contains("[") || name.contains("]") || name.contains(" ") || name.contains("-") || name.equals("§z"); } @Contract(pure = true) From 0760ad7bc1ae7aaa00a76767c0c4fd7bb18d0f2c Mon Sep 17 00:00:00 2001 From: Mia Date: Thu, 21 Aug 2025 07:46:51 -0400 Subject: [PATCH 07/12] feature: hide NPC option & change priority self indicator --- src/main/java/cc/aabss/eventutils/EventUtils.java | 6 +++++- .../java/cc/aabss/eventutils/commands/PriorityCmd.java | 4 ++-- .../java/cc/aabss/eventutils/config/ConfigScreen.java | 8 ++++++++ src/main/java/cc/aabss/eventutils/config/EventConfig.java | 3 +++ src/main/resources/assets/eventutils/lang/en_us.json | 2 ++ 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/cc/aabss/eventutils/EventUtils.java b/src/main/java/cc/aabss/eventutils/EventUtils.java index 207539f..1e6db33 100644 --- a/src/main/java/cc/aabss/eventutils/EventUtils.java +++ b/src/main/java/cc/aabss/eventutils/EventUtils.java @@ -128,8 +128,12 @@ public String getIpAndConnect(@NotNull EventType eventType, @NotNull JsonObject return ip; } + public static boolean isNPC(@NotNull String name, boolean bypass) { + return (!MOD.config.hideNPCs || bypass) && (name.contains("[") || name.contains("]") || name.contains(" ") || name.contains("-") || name.equals("§z")); + } + public static boolean isNPC(@NotNull String name) { - return name.contains("[") || name.contains("]") || name.contains(" ") || name.contains("-") || name.equals("§z"); + return isNPC(name, false); } @Contract(pure = true) diff --git a/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java b/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java index a14d980..73915ec 100644 --- a/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java +++ b/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java @@ -57,7 +57,7 @@ public static void priority(@NotNull CommandContext c final List namesSorted = client.world.getPlayers().stream() .sorted(Comparator.comparingInt(AbstractClientPlayerEntity::getId)) .map(player -> player.getName().getString()) - .filter(str -> !EventUtils.isNPC(str)) + .filter(str -> !EventUtils.isNPC(str, true)) .toList(); // Check page bounds @@ -87,7 +87,7 @@ public static void priority(@NotNull CommandContext c case 3 -> Style.EMPTY.withColor(TextColor.fromRgb(0xA97142)); default -> { if (isLocalPlayer) { - yield Style.EMPTY.withColor(TextColor.fromFormatting(Formatting.YELLOW)); + yield Style.EMPTY.withColor(TextColor.fromRgb(0x9AED47)); } yield Style.EMPTY.withColor(TextColor.fromFormatting(Formatting.WHITE)); } diff --git a/src/main/java/cc/aabss/eventutils/config/ConfigScreen.java b/src/main/java/cc/aabss/eventutils/config/ConfigScreen.java index 71d8e69..ced5eac 100644 --- a/src/main/java/cc/aabss/eventutils/config/ConfigScreen.java +++ b/src/main/java/cc/aabss/eventutils/config/ConfigScreen.java @@ -80,6 +80,14 @@ public static Screen getConfigScreen(@Nullable Screen parent) { config.setSave("default_famous_ip", config.defaultFamousIp); }) .controller(StringControllerBuilder::create).build()) + .option(Option.createBuilder() + .name(translatable("eventutils.config.npchide.title")) + .description(OptionDescription.of(translatable("eventutils.config.npchide.description"))) + .binding(EventConfig.Defaults.HIDE_NPCS, () -> config.hideNPCs, newValue -> { + config.hideNPCs = newValue; + config.setSave("hide_npcs", config.hideNPCs); + }) + .controller(ConfigScreen::getBooleanBuilder).build()) .option(Option.createBuilder() .name(translatable("eventutils.config.radius.title")) .description(OptionDescription.of(translatable("eventutils.config.radius.description"))) diff --git a/src/main/java/cc/aabss/eventutils/config/EventConfig.java b/src/main/java/cc/aabss/eventutils/config/EventConfig.java index db21cb1..13a2431 100644 --- a/src/main/java/cc/aabss/eventutils/config/EventConfig.java +++ b/src/main/java/cc/aabss/eventutils/config/EventConfig.java @@ -28,6 +28,7 @@ public class EventConfig extends FileLoader { public boolean updateChecker; public boolean confirmWindowClose; public boolean confirmDisconnect; + public boolean hideNPCs; public int hidePlayersRadius; @NotNull public String defaultFamousIp; @NotNull public List> hiddenEntityTypes; @@ -59,6 +60,7 @@ public EventConfig() { confirmDisconnect = get("confirm_disconnect", Defaults.CONFIRM_DISCONNECT); defaultFamousIp = get("default_famous_ip", Defaults.DEFAULT_FAMOUS_IP); hidePlayersRadius = get("hide_players_radius", Defaults.HIDE_PLAYERS_RADIUS); + hideNPCs = get("hide_npcs", Defaults.HIDE_NPCS); hiddenEntityTypes = get("hidden_entity_types", Defaults.hiddenEntityTypes(), new TypeToken>>(){}.getType()); whitelistedPlayers = get("whitelisted_players", Defaults.whitelistedPlayers(), new TypeToken>(){}.getType()); useTestingApi = get("use_testing_api", Defaults.USE_TESTING_API); @@ -138,6 +140,7 @@ public static class Defaults { public static final boolean UPDATE_CHECKER = true; public static final boolean CONFIRM_WINDOW_CLOSE = true; public static final boolean CONFIRM_DISCONNECT = true; + public static final boolean HIDE_NPCS = true; public static final int HIDE_PLAYERS_RADIUS = 0; @NotNull public static final String DEFAULT_FAMOUS_IP = "play.invadedlands.net"; @NotNull private static final List> HIDDEN_ENTITY_TYPES = List.of(EntityType.GLOW_ITEM_FRAME); diff --git a/src/main/resources/assets/eventutils/lang/en_us.json b/src/main/resources/assets/eventutils/lang/en_us.json index 5d685b7..752d3d2 100644 --- a/src/main/resources/assets/eventutils/lang/en_us.json +++ b/src/main/resources/assets/eventutils/lang/en_us.json @@ -72,6 +72,8 @@ "eventutils.config.entity.description": "The types of entities that will be hidden", "eventutils.config.players.title": "Whitelisted Players", "eventutils.config.players.description": "The names of the players you can see when players are hidden", + "eventutils.config.npchide.title": "Hide NPCs", + "eventutils.config.npchide.description": "Whether the mod will hide NPCs", "eventutils.config.radius.title": "Hide Players in Radius", "eventutils.config.radius.description": "Hides all the players in the specified radius, set to 0 to ignore distance", "eventutils.config.use_testing_api.title": "Use Testing API", From 52e682336b48dbe52d372a1a2629cd6097070248 Mon Sep 17 00:00:00 2001 From: Mia Date: Thu, 21 Aug 2025 08:05:11 -0400 Subject: [PATCH 08/12] feature: count name list and count command it also changes one thing in priority cmd that i forgot to do earlier its ok --- .../eventutils/commands/CommandRegister.java | 20 +++++ .../eventutils/commands/CountNameCmd.java | 74 +++++++++++++++++++ .../eventutils/commands/PriorityCmd.java | 2 +- .../assets/eventutils/lang/en_us.json | 9 ++- 4 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java diff --git a/src/main/java/cc/aabss/eventutils/commands/CommandRegister.java b/src/main/java/cc/aabss/eventutils/commands/CommandRegister.java index 437bb79..1c85e2a 100644 --- a/src/main/java/cc/aabss/eventutils/commands/CommandRegister.java +++ b/src/main/java/cc/aabss/eventutils/commands/CommandRegister.java @@ -77,11 +77,31 @@ public static void register(@NotNull CommandDispatcher countName = ClientCommandManager + .literal("countname") + .then(ClientCommandManager.literal("count") + .then(ClientCommandManager.argument("filter", StringArgumentType.string()) + .executes((context) -> { + CountNameCmd.count(context, StringArgumentType.getString(context, "filter")); + return 0; + }))) + .then(ClientCommandManager.literal("list") + .then(ClientCommandManager.argument("filter", StringArgumentType.string()) + .executes((context) -> { + CountNameCmd.list(context, StringArgumentType.getString(context, "filter")); + return 0; + }))) + .executes(context -> { + CountNameCmd.list(context, ""); + return 0; + }).build(); + // Build command tree dispatcher.getRoot().addChild(main); main.addChild(config); main.addChild(teleport); main.addChild(priority); main.addChild(priorityTop); + main.addChild(countName); } } diff --git a/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java b/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java new file mode 100644 index 0000000..95b20b6 --- /dev/null +++ b/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java @@ -0,0 +1,74 @@ +package cc.aabss.eventutils.commands; + +import cc.aabss.eventutils.EventUtils; +import com.mojang.brigadier.context.CommandContext; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class CountNameCmd { + public static void count(@NotNull CommandContext context, String filter) { + final MinecraftClient client = context.getSource().getClient(); + client.send(() -> { + if (client.world == null || client.player == null || client.getNetworkHandler() == null) { + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers")); + return; + } + + final List namesFiltered = client.getNetworkHandler().getPlayerList().stream() + .map(entry -> entry.getProfile().getName()) + .filter(name -> name.toLowerCase().contains(filter.toLowerCase())) + .filter(name -> !EventUtils.isNPC(name, true)) + .toList(); + + if (namesFiltered.isEmpty()) { + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers")); + return; + } + + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.count", "§6" + namesFiltered.size(), namesFiltered.size() != 1 ? Text.translatable("eventutils.word.plural").formatted(Formatting.YELLOW) : "")); + }); + } + + public static void list(@NotNull CommandContext context, String filter) { + final MinecraftClient client = context.getSource().getClient(); + client.send(() -> { + if (client.world == null || client.player == null || client.getNetworkHandler() == null) { + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers")); + return; + } + + final List namesFiltered = client.getNetworkHandler().getPlayerList().stream() + .map(entry -> entry.getProfile().getName()) + .filter(name -> name.toLowerCase().contains(filter.toLowerCase())) + .filter(name -> !EventUtils.isNPC(name, true)) + .toList(); + + if (namesFiltered.isEmpty()) { + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers")); + return; + } + + MutableText playerList = Text.literal(""); + for (int i = 0; i < namesFiltered.size(); i++) { + String name = namesFiltered.get(i); + playerList.append( + Text.literal(name).formatted(Formatting.GOLD) + ); + + if (i < namesFiltered.size() - 1) { + playerList.append( + Text.literal(", ").formatted(Formatting.YELLOW) + ); + } + } + + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.list", "§6" + namesFiltered.size(), namesFiltered.size() != 1 ? Text.translatable("eventutils.word.plural").formatted(Formatting.YELLOW) : "", playerList)); + }); + } +} \ No newline at end of file diff --git a/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java b/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java index 73915ec..125aa72 100644 --- a/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java +++ b/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java @@ -36,7 +36,7 @@ public static void priority(@NotNull CommandContext c if (playerName.equalsIgnoreCase(client.player.getName().getString())) { context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.self", "§6#" + (namesSorted.indexOf(playerName) + 1))); } else { - context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.player", playerName, "§6#" + (namesSorted.indexOf(playerName) + 1))); + context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.player", Text.literal(playerName).formatted(Formatting.YELLOW), "§6#" + (namesSorted.indexOf(playerName) + 1))); } return; diff --git a/src/main/resources/assets/eventutils/lang/en_us.json b/src/main/resources/assets/eventutils/lang/en_us.json index 752d3d2..a3c8975 100644 --- a/src/main/resources/assets/eventutils/lang/en_us.json +++ b/src/main/resources/assets/eventutils/lang/en_us.json @@ -92,14 +92,21 @@ "eventutils.screen.settings": "Settings", + "eventutils.command.priority.self": "§e[EU] You have pickup priority %s §ebased on the people around you.", "eventutils.command.priority.player": "§e[EU] %s§e has pickup priority %s §ebased on the people around you.", "eventutils.command.priority.noplayer": "§c[EU] Player not found!", + "eventutils.command.prioritytop.page": "§e[EU] Page %s §eof %s\n\n", "eventutils.command.prioritytop.emptypage": "§c[EU] No players found!", "eventutils.command.prioritytop.notapage": "§c[EU] That page wasn't found! (Highest page is Page %s§c)", "eventutils.command.prioritytop.nextpage": "§6[§7>%s§6 Next Page] ", "eventutils.command.prioritytop.lastpage": "§6[§7%s<§6 Last Page] ", "eventutils.command.prioritytop.pagebutton": "§e[EU] %s%s§7(Click)", - "eventutils.command.prioritytop.page": "§e[EU] Page %s §eof %s\n\n" + + "eventutils.command.countname.noplayers": "§c[EU] No players found!", + "eventutils.command.countname.count": "§e[EU] Found %s §eplayer%s §ewith that in their name.", + "eventutils.command.countname.list": "§e[EU] Found %s §eplayer%s§e: %s", + + "eventutils.word.plural": "s" } \ No newline at end of file From 9347161922f2393c34e60c83a2d3358f08cfbf92 Mon Sep 17 00:00:00 2001 From: Mia Date: Thu, 21 Aug 2025 08:06:15 -0400 Subject: [PATCH 09/12] chore: bump version to v2.3.0 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d011f61..49be338 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod.id=eventutils mod.name=EventUtils -mod.version=2.2.0 +mod.version=2.3.0 deps.fabric_loader=0.16.9 From 20d08a60fb071c0763915d622229f068d57baec2 Mon Sep 17 00:00:00 2001 From: Mia Date: Wed, 27 Aug 2025 12:37:07 -0400 Subject: [PATCH 10/12] fix: priority oversight innacurate placements --- src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java b/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java index 125aa72..d0a57f2 100644 --- a/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java +++ b/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java @@ -29,6 +29,7 @@ public static void priority(@NotNull CommandContext c final List namesSorted = client.world.getPlayers().stream() .sorted(Comparator.comparingInt(AbstractClientPlayerEntity::getId)) .map(player -> player.getName().getString()) + .filter(str -> !EventUtils.isNPC(str, true)) .toList(); final String nameLower = name.toLowerCase(); From 55aab3ffd72a960940333aa60a0766aa77fda368 Mon Sep 17 00:00:00 2001 From: Mia Date: Thu, 28 Aug 2025 00:24:26 -0400 Subject: [PATCH 11/12] update: make countname show query string --- .../cc/aabss/eventutils/commands/CountNameCmd.java | 12 ++++++------ src/main/resources/assets/eventutils/lang/en_us.json | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java b/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java index 95b20b6..599f608 100644 --- a/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java +++ b/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java @@ -16,7 +16,7 @@ public static void count(@NotNull CommandContext cont final MinecraftClient client = context.getSource().getClient(); client.send(() -> { if (client.world == null || client.player == null || client.getNetworkHandler() == null) { - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers")); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", Text.literal(filter).formatted(Formatting.DARK_RED))); return; } @@ -27,11 +27,11 @@ public static void count(@NotNull CommandContext cont .toList(); if (namesFiltered.isEmpty()) { - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers")); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", Text.literal(filter).formatted(Formatting.DARK_RED))); return; } - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.count", "§6" + namesFiltered.size(), namesFiltered.size() != 1 ? Text.translatable("eventutils.word.plural").formatted(Formatting.YELLOW) : "")); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.count", "§6" + namesFiltered.size(), namesFiltered.size() != 1 ? Text.translatable("eventutils.word.plural").formatted(Formatting.YELLOW) : "", Text.literal(filter).formatted(Formatting.GOLD))); }); } @@ -39,7 +39,7 @@ public static void list(@NotNull CommandContext conte final MinecraftClient client = context.getSource().getClient(); client.send(() -> { if (client.world == null || client.player == null || client.getNetworkHandler() == null) { - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers")); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", Text.literal(filter).formatted(Formatting.DARK_RED))); return; } @@ -50,7 +50,7 @@ public static void list(@NotNull CommandContext conte .toList(); if (namesFiltered.isEmpty()) { - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers")); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", Text.literal(filter).formatted(Formatting.DARK_RED))); return; } @@ -68,7 +68,7 @@ public static void list(@NotNull CommandContext conte } } - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.list", "§6" + namesFiltered.size(), namesFiltered.size() != 1 ? Text.translatable("eventutils.word.plural").formatted(Formatting.YELLOW) : "", playerList)); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.list", "§6" + namesFiltered.size(), namesFiltered.size() != 1 ? Text.translatable("eventutils.word.plural").formatted(Formatting.YELLOW) : "", Text.literal(filter).formatted(Formatting.GOLD), playerList)); }); } } \ No newline at end of file diff --git a/src/main/resources/assets/eventutils/lang/en_us.json b/src/main/resources/assets/eventutils/lang/en_us.json index a3c8975..c15a0ab 100644 --- a/src/main/resources/assets/eventutils/lang/en_us.json +++ b/src/main/resources/assets/eventutils/lang/en_us.json @@ -104,9 +104,9 @@ "eventutils.command.prioritytop.lastpage": "§6[§7%s<§6 Last Page] ", "eventutils.command.prioritytop.pagebutton": "§e[EU] %s%s§7(Click)", - "eventutils.command.countname.noplayers": "§c[EU] No players found!", - "eventutils.command.countname.count": "§e[EU] Found %s §eplayer%s §ewith that in their name.", - "eventutils.command.countname.list": "§e[EU] Found %s §eplayer%s§e: %s", + "eventutils.command.countname.noplayers": "§c[EU] No players found with '%s§c' in their name!", + "eventutils.command.countname.count": "§e[EU] Found %s §eplayer%s §ewith '%s§e' in their name.", + "eventutils.command.countname.list": "§e[EU] Found %s §eplayer%s §ewith '%s§e' in their name§e: %s", "eventutils.word.plural": "s" } \ No newline at end of file From 485d0a5d5e7db4aa8c2f6c23abb47faeef63f2a1 Mon Sep 17 00:00:00 2001 From: Mia Date: Thu, 28 Aug 2025 03:01:11 -0400 Subject: [PATCH 12/12] update: improve feedback prefix & for consistency --- .../java/cc/aabss/eventutils/EventUtils.java | 10 ++++++++ .../cc/aabss/eventutils/KeybindManager.java | 2 +- .../cc/aabss/eventutils/UpdateChecker.java | 10 ++++---- .../eventutils/commands/CountNameCmd.java | 13 ++++++----- .../eventutils/commands/PriorityCmd.java | 12 +++++----- .../assets/eventutils/lang/en_us.json | 23 ++++++++++--------- 6 files changed, 42 insertions(+), 28 deletions(-) diff --git a/src/main/java/cc/aabss/eventutils/EventUtils.java b/src/main/java/cc/aabss/eventutils/EventUtils.java index 1e6db33..d01906b 100644 --- a/src/main/java/cc/aabss/eventutils/EventUtils.java +++ b/src/main/java/cc/aabss/eventutils/EventUtils.java @@ -41,6 +41,16 @@ public class EventUtils implements ClientModInitializer { public static EventUtils MOD; @NotNull public static final Logger LOGGER = LogManager.getLogger(EventUtils.class, new PrefixMessageFactory()); @NotNull public static final String QUEUE_TEXT = "\n\n Per-server ranks get a higher priority in their respective queues. To receive such a rank, purchase one at\n store.invadedlands.net.\n\nTo leave a queue, use the command: /leavequeue.\n"; + @NotNull public static final MutableText MESSAGE_PREFIX = Text.literal("EventUtils") + .formatted(Formatting.BOLD) + .fillStyle(Style.EMPTY.withColor(TextColor.fromRgb(0xF5AA42))) + .append(Text.literal("§r »") + .fillStyle(Style.EMPTY.withBold(false).withColor(TextColor.fromRgb(0xB57C2F)))); + @NotNull public static final MutableText ERROR_MESSAGE_PREFIX = Text.literal("EventUtils") + .formatted(Formatting.BOLD) + .formatted(Formatting.RED) + .append(Text.literal("§r§4 »") + .fillStyle(Style.EMPTY.withBold(false))); @NotNull public final EventConfig config = new EventConfig(); @NotNull public final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(3); diff --git a/src/main/java/cc/aabss/eventutils/KeybindManager.java b/src/main/java/cc/aabss/eventutils/KeybindManager.java index 30b848a..0232d61 100644 --- a/src/main/java/cc/aabss/eventutils/KeybindManager.java +++ b/src/main/java/cc/aabss/eventutils/KeybindManager.java @@ -60,7 +60,7 @@ public KeybindManager(@NotNull EventUtils mod) { client.setScreen(new EventInfoScreen(SocketEndpoint.LAST_EVENT)); return; } - if (client.player != null) client.player.sendMessage(Text.literal("No event has happened recently!").formatted(Formatting.RED), true); + if (client.player != null) client.player.sendMessage(Text.translatable("eventutils.no_recent_event.message").formatted(Formatting.RED), true); } } diff --git a/src/main/java/cc/aabss/eventutils/UpdateChecker.java b/src/main/java/cc/aabss/eventutils/UpdateChecker.java index 0df5493..5f69363 100644 --- a/src/main/java/cc/aabss/eventutils/UpdateChecker.java +++ b/src/main/java/cc/aabss/eventutils/UpdateChecker.java @@ -31,16 +31,18 @@ private void notifyUpdate(@NotNull String latestVersion) { client.send(() -> { if (client.player == null) return; //? if >=1.21.5 { - /*client.player.sendMessage(Text.literal("§6[EVENTUTILS]§r §e" + EventUtils.translate("eventutils.updatechecker.new")+"§r §7(v" + Versions.EU_VERSION + " -> v" + latestVersion.replace(Versions.MC_VERSION + "-", "") + ")" + "\n") - .setStyle(Style.EMPTY + /*client.player.sendMessage( + EventUtils.MESSAGE_PREFIX.copy().append(" §e" + EventUtils.translate("eventutils.updatechecker.new")+"§r §7(v" + Versions.EU_VERSION + " -> v" + latestVersion.replace(Versions.MC_VERSION + "-", "") + ")" + "\n") + .setStyle(EventUtils.MESSAGE_PREFIX.getStyle() .withHoverEvent(new HoverEvent.ShowText(translatable("eventutils.updatechecker.hover"))) .withClickEvent(new ClickEvent.OpenUrl(URI.create("https://modrinth.com/mod/alerts/version/" + latestVersion)))) .append(Text.literal("§7§o" + EventUtils.translate("eventutils.updatechecker.config")) .setStyle(Style.EMPTY.withClickEvent(new ClickEvent.RunCommand("/event utils")))), false); *///?} else { - client.player.sendMessage(Text.literal("§6[EVENTUTILS]§r §e" + EventUtils.translate("eventutils.updatechecker.new")+"§r §7(v" + Versions.EU_VERSION + " -> v" + latestVersion.replace(Versions.MC_VERSION + "-", "") + ")" + "\n") - .setStyle(Style.EMPTY + client.player.sendMessage( + EventUtils.MESSAGE_PREFIX.copy().append(" §e" + EventUtils.translate("eventutils.updatechecker.new")+"§r §7(v" + Versions.EU_VERSION + " -> v" + latestVersion.replace(Versions.MC_VERSION + "-", "") + ")" + "\n") + .setStyle(EventUtils.MESSAGE_PREFIX.getStyle() .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, translatable("eventutils.updatechecker.hover"))) .withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://modrinth.com/mod/alerts/version/" + latestVersion))) .append(Text.literal("§7§o" + EventUtils.translate("eventutils.updatechecker.config")) diff --git a/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java b/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java index 599f608..cd34724 100644 --- a/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java +++ b/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java @@ -5,6 +5,7 @@ import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.client.MinecraftClient; import net.minecraft.text.MutableText; +import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; @@ -16,7 +17,7 @@ public static void count(@NotNull CommandContext cont final MinecraftClient client = context.getSource().getClient(); client.send(() -> { if (client.world == null || client.player == null || client.getNetworkHandler() == null) { - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", Text.literal(filter).formatted(Formatting.DARK_RED))); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", EventUtils.ERROR_MESSAGE_PREFIX, Text.literal(filter).formatted(Formatting.DARK_RED))); return; } @@ -27,11 +28,11 @@ public static void count(@NotNull CommandContext cont .toList(); if (namesFiltered.isEmpty()) { - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", Text.literal(filter).formatted(Formatting.DARK_RED))); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", EventUtils.ERROR_MESSAGE_PREFIX, Text.literal(filter).formatted(Formatting.DARK_RED))); return; } - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.count", "§6" + namesFiltered.size(), namesFiltered.size() != 1 ? Text.translatable("eventutils.word.plural").formatted(Formatting.YELLOW) : "", Text.literal(filter).formatted(Formatting.GOLD))); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.count", EventUtils.MESSAGE_PREFIX, "§6" + namesFiltered.size(), namesFiltered.size() != 1 ? Text.translatable("eventutils.word.plural").formatted(Formatting.YELLOW) : "", Text.literal(filter).formatted(Formatting.GOLD))); }); } @@ -39,7 +40,7 @@ public static void list(@NotNull CommandContext conte final MinecraftClient client = context.getSource().getClient(); client.send(() -> { if (client.world == null || client.player == null || client.getNetworkHandler() == null) { - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", Text.literal(filter).formatted(Formatting.DARK_RED))); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", EventUtils.ERROR_MESSAGE_PREFIX, Text.literal(filter).formatted(Formatting.DARK_RED))); return; } @@ -50,7 +51,7 @@ public static void list(@NotNull CommandContext conte .toList(); if (namesFiltered.isEmpty()) { - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", Text.literal(filter).formatted(Formatting.DARK_RED))); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.noplayers", EventUtils.ERROR_MESSAGE_PREFIX, Text.literal(filter).formatted(Formatting.DARK_RED))); return; } @@ -68,7 +69,7 @@ public static void list(@NotNull CommandContext conte } } - context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.list", "§6" + namesFiltered.size(), namesFiltered.size() != 1 ? Text.translatable("eventutils.word.plural").formatted(Formatting.YELLOW) : "", Text.literal(filter).formatted(Formatting.GOLD), playerList)); + context.getSource().sendFeedback(Text.translatable("eventutils.command.countname.list", EventUtils.MESSAGE_PREFIX, "§6" + namesFiltered.size(), namesFiltered.size() != 1 ? Text.translatable("eventutils.word.plural").formatted(Formatting.YELLOW) : "", Text.literal(filter).formatted(Formatting.GOLD), playerList)); }); } } \ No newline at end of file diff --git a/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java b/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java index d0a57f2..a74c938 100644 --- a/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java +++ b/src/main/java/cc/aabss/eventutils/commands/PriorityCmd.java @@ -23,7 +23,7 @@ public static void priority(@NotNull CommandContext c client.send(() -> { // Get names if (client.world == null || client.player == null) { - context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.noplayer")); + context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.noplayer", EventUtils.ERROR_MESSAGE_PREFIX)); return; } final List namesSorted = client.world.getPlayers().stream() @@ -35,9 +35,9 @@ public static void priority(@NotNull CommandContext c final String nameLower = name.toLowerCase(); for (final String playerName : namesSorted) if (nameLower.equals(playerName.toLowerCase())) { if (playerName.equalsIgnoreCase(client.player.getName().getString())) { - context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.self", "§6#" + (namesSorted.indexOf(playerName) + 1))); + context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.self", EventUtils.MESSAGE_PREFIX, "§6#" + (namesSorted.indexOf(playerName) + 1))); } else { - context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.player", Text.literal(playerName).formatted(Formatting.YELLOW), "§6#" + (namesSorted.indexOf(playerName) + 1))); + context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.player", EventUtils.MESSAGE_PREFIX, Text.literal(playerName).formatted(Formatting.YELLOW), "§6#" + (namesSorted.indexOf(playerName) + 1))); } return; @@ -65,7 +65,7 @@ public static void priority(@NotNull CommandContext c final int totalPlayers = namesSorted.size(); final int totalPages = (int) Math.ceil((double) totalPlayers / PLAYERS_PER_PAGE); if (page > totalPages || page < 1) { - source.sendFeedback(Text.translatable("eventutils.command.prioritytop.notapage", "§f" + totalPages)); + source.sendFeedback(Text.translatable("eventutils.command.prioritytop.notapage", EventUtils.ERROR_MESSAGE_PREFIX, "§f" + totalPages)); return; } @@ -74,7 +74,7 @@ public static void priority(@NotNull CommandContext c final int start = pageIndex * PLAYERS_PER_PAGE; final int end = Math.min(start + PLAYERS_PER_PAGE, totalPlayers); final String clientName = client.player.getName().getString().toLowerCase(); - final MutableText text = Text.translatable("eventutils.command.prioritytop.page", "§6" + page, "§6" + totalPages); + final MutableText text = Text.translatable("eventutils.command.prioritytop.page", EventUtils.MESSAGE_PREFIX, "§6" + page, "§6" + totalPages); for (int i = start; i < end; i++) { final String name = namesSorted.get(i); final boolean isLocalPlayer = name.equalsIgnoreCase(clientName); @@ -141,7 +141,7 @@ public static void priority(@NotNull CommandContext c } if (!lastpage.getString().isEmpty() || !nextpage.getString().isEmpty()) { - source.sendFeedback(Text.translatable("eventutils.command.prioritytop.pagebutton", lastpage, nextpage)); + source.sendFeedback(Text.translatable("eventutils.command.prioritytop.pagebutton", EventUtils.MESSAGE_PREFIX, lastpage, nextpage)); } }); } diff --git a/src/main/resources/assets/eventutils/lang/en_us.json b/src/main/resources/assets/eventutils/lang/en_us.json index c15a0ab..89abe08 100644 --- a/src/main/resources/assets/eventutils/lang/en_us.json +++ b/src/main/resources/assets/eventutils/lang/en_us.json @@ -47,6 +47,8 @@ "eventutils.confirm_disconnect.title": "Confirm Disconnect", "eventutils.confirm_disconnect.message": "Are you sure you want to disconnect?", + "eventutils.no_recent_event.message": "No event has happened recently!", + "eventutils.config.title": "EventUtils Mod Config", "eventutils.config.general": "General", "eventutils.config.alerts": "Alerts", @@ -92,21 +94,20 @@ "eventutils.screen.settings": "Settings", + "eventutils.command.priority.self": "%s§e You have pickup priority %s §ebased on the people around you.", + "eventutils.command.priority.player": "%s§e %s§e has pickup priority %s §ebased on the people around you.", + "eventutils.command.priority.noplayer": "%s§c Player not found!", - "eventutils.command.priority.self": "§e[EU] You have pickup priority %s §ebased on the people around you.", - "eventutils.command.priority.player": "§e[EU] %s§e has pickup priority %s §ebased on the people around you.", - "eventutils.command.priority.noplayer": "§c[EU] Player not found!", - - "eventutils.command.prioritytop.page": "§e[EU] Page %s §eof %s\n\n", - "eventutils.command.prioritytop.emptypage": "§c[EU] No players found!", - "eventutils.command.prioritytop.notapage": "§c[EU] That page wasn't found! (Highest page is Page %s§c)", + "eventutils.command.prioritytop.page": "%s§e Page %s §eof %s\n\n", + "eventutils.command.prioritytop.emptypage": "%s§c No players found!", + "eventutils.command.prioritytop.notapage": "%s§c That page wasn't found! (Highest page is Page %s§c)", "eventutils.command.prioritytop.nextpage": "§6[§7>%s§6 Next Page] ", "eventutils.command.prioritytop.lastpage": "§6[§7%s<§6 Last Page] ", - "eventutils.command.prioritytop.pagebutton": "§e[EU] %s%s§7(Click)", + "eventutils.command.prioritytop.pagebutton": "%s§e %s%s§7(Click)", - "eventutils.command.countname.noplayers": "§c[EU] No players found with '%s§c' in their name!", - "eventutils.command.countname.count": "§e[EU] Found %s §eplayer%s §ewith '%s§e' in their name.", - "eventutils.command.countname.list": "§e[EU] Found %s §eplayer%s §ewith '%s§e' in their name§e: %s", + "eventutils.command.countname.noplayers": "%s§c No players found with '%s§c' in their name!", + "eventutils.command.countname.count": "%s§e Found %s §eplayer%s §ewith '%s§e' in their name.", + "eventutils.command.countname.list": "%s§e Found %s §eplayer%s §ewith '%s§e' in their name§e: %s", "eventutils.word.plural": "s" } \ No newline at end of file