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 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/EventUtils.java b/src/main/java/cc/aabss/eventutils/EventUtils.java index b44bc52..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); @@ -128,8 +138,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("-"); + return isNPC(name, false); } @Contract(pure = true) diff --git a/src/main/java/cc/aabss/eventutils/KeybindManager.java b/src/main/java/cc/aabss/eventutils/KeybindManager.java index 175bd34..0232d61 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.translatable("eventutils.no_recent_event.message").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 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 62e979d..5f69363 100644 --- a/src/main/java/cc/aabss/eventutils/UpdateChecker.java +++ b/src/main/java/cc/aabss/eventutils/UpdateChecker.java @@ -30,13 +30,25 @@ private void notifyUpdate(@NotNull String latestVersion) { final MinecraftClient client = MinecraftClient.getInstance(); client.send(() -> { if (client.player == null) return; - 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 + //? if >=1.21.5 { + /*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( + 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")) .setStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/eventutils config")))), false); + //?} }); } 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..cd34724 --- /dev/null +++ b/src/main/java/cc/aabss/eventutils/commands/CountNameCmd.java @@ -0,0 +1,75 @@ +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.Style; +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", EventUtils.ERROR_MESSAGE_PREFIX, Text.literal(filter).formatted(Formatting.DARK_RED))); + 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", EventUtils.ERROR_MESSAGE_PREFIX, Text.literal(filter).formatted(Formatting.DARK_RED))); + return; + } + + 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))); + }); + } + + 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", EventUtils.ERROR_MESSAGE_PREFIX, Text.literal(filter).formatted(Formatting.DARK_RED))); + 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", EventUtils.ERROR_MESSAGE_PREFIX, Text.literal(filter).formatted(Formatting.DARK_RED))); + 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", 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 2f3f451..a74c938 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,27 +16,33 @@ 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", EventUtils.ERROR_MESSAGE_PREFIX)); return; } 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(); 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", EventUtils.MESSAGE_PREFIX, "§6#" + (namesSorted.indexOf(playerName) + 1))); + } else { + context.getSource().sendFeedback(Text.translatable("eventutils.command.priority.player", EventUtils.MESSAGE_PREFIX, Text.literal(playerName).formatted(Formatting.YELLOW), "§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 +52,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, true)) .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", EventUtils.ERROR_MESSAGE_PREFIX, "§f" + totalPages)); return; } @@ -67,14 +74,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", EventUtils.MESSAGE_PREFIX, "§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.fromRgb(0x9AED47)); + } + 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", EventUtils.MESSAGE_PREFIX, lastpage, nextpage)); + } }); } } 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/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/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/src/main/resources/assets/eventutils/lang/en_us.json b/src/main/resources/assets/eventutils/lang/en_us.json index ea52e8e..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", @@ -72,6 +74,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", @@ -88,5 +92,22 @@ "eventutils.sound.shakey": "Shakey", "eventutils.sound.time_of_war": "Time of War", - "eventutils.screen.settings": "Settings" + "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.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": "%s§e %s%s§7(Click)", + + "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 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..1ed86a5 --- /dev/null +++ b/versions/1.21.5/gradle.properties @@ -0,0 +1,6 @@ +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.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 new file mode 100644 index 0000000..d8a4d8f --- /dev/null +++ b/versions/1.21.6/gradle.properties @@ -0,0 +1,6 @@ +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.7.1+1.21.6-fabric +deps.modmenu=15.0.0-beta.3