From 7e0419e78454cd6b938f7f442176e35af683d5c8 Mon Sep 17 00:00:00 2001 From: vae <66442608+sylviameows@users.noreply.github.com> Date: Mon, 10 Jun 2024 11:52:55 -0500 Subject: [PATCH 1/4] added code search command --- .../dev/dfonline/codeclient/Commands.java | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/dfonline/codeclient/Commands.java b/src/main/java/dev/dfonline/codeclient/Commands.java index 708d657..c86c565 100644 --- a/src/main/java/dev/dfonline/codeclient/Commands.java +++ b/src/main/java/dev/dfonline/codeclient/Commands.java @@ -369,6 +369,48 @@ else if(field.getType().isEnum()) { return -1; }))); + dispatcher.register(literal("search") + .then(argument("query",greedyString()).suggests((context,builder) -> suggestJump(JumpType.ANY, context, builder)).executes(context -> { + if(CodeClient.location instanceof Dev dev) { + var query = context.getArgument("query", String.class); + var results = dev.scanForSigns(JumpType.ANY.pattern,Pattern.compile("^.*"+Pattern.quote(query)+".*$", Pattern.CASE_INSENSITIVE)); + + if (results == null || results.isEmpty()) { + Utility.sendMessage(Text.literal("No results."), ChatType.INFO); + return 0; + } + + var message = Text.empty().append("Search Results:"); + results.forEach((pos,text) -> { + var type = text.getMessage(0, false).getString(); + var name = text.getMessage(1, false).getString(); + + String sub = null; + if (JumpType.PLAYER_EVENT.pattern.matcher(type).matches()) sub = "player"; + else if (JumpType.ENTITY_EVENT.pattern.matcher(type).matches()) sub = "entity"; + else if (JumpType.FUNCTION.pattern.matcher(type).matches()) sub = "func"; + else if (JumpType.PROCESS.pattern.matcher(type).matches()) sub = "proc"; + else return; + + var action = Text.empty().append(" [⏼]").setStyle(Style.EMPTY + .withColor(Formatting.GREEN) + .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/jump "+sub+" "+name)) + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.of("Click to Teleport\nx: "+pos.getX()+", y: "+pos.getY()+", z: "+pos.getZ()))) + ); + var entry = Text.empty().append("\n • ").formatted(Formatting.GREEN) + .append(Text.empty().append(name).formatted(Formatting.WHITE)) + .append(action); + message.append(entry); + }); + + Utility.sendMessage(message, ChatType.SUCCESS); + } else { + Utility.sendMessage(Text.of("Could not execute search."), ChatType.FAIL); + } + return 0; + }) + )); + LiteralCommandNode jumpCommand = dispatcher.register(literal("jump") .then(literal("player").then(argument("name", greedyString()).suggests((context, builder) -> suggestJump(JumpType.PLAYER_EVENT, context, builder)).executes(context -> { var name = context.getArgument("name", String.class); @@ -613,7 +655,8 @@ private static enum JumpType { PLAYER_EVENT("PLAYER EVENT"), ENTITY_EVENT("ENTITY EVENT"), FUNCTION("FUNCTION"), - PROCESS("PROCESS"); + PROCESS("PROCESS"), + ANY("(((PLAYER)|(ENTITY)) EVENT)|(FUNCTION)|(PROCESS)"); public final Pattern pattern; JumpType(String scan) { From 3c0e0a4c5e477ad7c317982a314a4da48d2dac08 Mon Sep 17 00:00:00 2001 From: vae <66442608+sylviameows@users.noreply.github.com> Date: Tue, 11 Jun 2024 07:58:07 -0500 Subject: [PATCH 2/4] use String#format --- src/main/java/dev/dfonline/codeclient/Commands.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/dfonline/codeclient/Commands.java b/src/main/java/dev/dfonline/codeclient/Commands.java index c86c565..c9323bc 100644 --- a/src/main/java/dev/dfonline/codeclient/Commands.java +++ b/src/main/java/dev/dfonline/codeclient/Commands.java @@ -394,7 +394,7 @@ else if(field.getType().isEnum()) { var action = Text.empty().append(" [⏼]").setStyle(Style.EMPTY .withColor(Formatting.GREEN) - .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/jump "+sub+" "+name)) + .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/jump %s %s", sub, name))) .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.of("Click to Teleport\nx: "+pos.getX()+", y: "+pos.getY()+", z: "+pos.getZ()))) ); var entry = Text.empty().append("\n • ").formatted(Formatting.GREEN) From d8cd4eba6bac48509ecabc65600e8c057c9e0ace Mon Sep 17 00:00:00 2001 From: vae <66442608+sylviameows@users.noreply.github.com> Date: Tue, 11 Jun 2024 08:09:31 -0500 Subject: [PATCH 3/4] added translation keys for search --- src/main/java/dev/dfonline/codeclient/Commands.java | 8 ++++---- src/main/resources/assets/codeclient/lang/en_us.json | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/dev/dfonline/codeclient/Commands.java b/src/main/java/dev/dfonline/codeclient/Commands.java index c9323bc..0acb18e 100644 --- a/src/main/java/dev/dfonline/codeclient/Commands.java +++ b/src/main/java/dev/dfonline/codeclient/Commands.java @@ -376,11 +376,11 @@ else if(field.getType().isEnum()) { var results = dev.scanForSigns(JumpType.ANY.pattern,Pattern.compile("^.*"+Pattern.quote(query)+".*$", Pattern.CASE_INSENSITIVE)); if (results == null || results.isEmpty()) { - Utility.sendMessage(Text.literal("No results."), ChatType.INFO); + Utility.sendMessage(Text.translatable("codeclient.search.no_results"), ChatType.INFO); return 0; } - var message = Text.empty().append("Search Results:"); + var message = Text.translatable("codeclient.search.results"); results.forEach((pos,text) -> { var type = text.getMessage(0, false).getString(); var name = text.getMessage(1, false).getString(); @@ -395,7 +395,7 @@ else if(field.getType().isEnum()) { var action = Text.empty().append(" [⏼]").setStyle(Style.EMPTY .withColor(Formatting.GREEN) .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/jump %s %s", sub, name))) - .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.of("Click to Teleport\nx: "+pos.getX()+", y: "+pos.getY()+", z: "+pos.getZ()))) + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.translatable("codeclient.search.hover.teleport", String.format("x: %s, y: %s, z: %s", pos.getX(), pos.getY(), pos.getZ())))) ); var entry = Text.empty().append("\n • ").formatted(Formatting.GREEN) .append(Text.empty().append(name).formatted(Formatting.WHITE)) @@ -405,7 +405,7 @@ else if(field.getType().isEnum()) { Utility.sendMessage(message, ChatType.SUCCESS); } else { - Utility.sendMessage(Text.of("Could not execute search."), ChatType.FAIL); + Utility.sendMessage(Text.translatable("codeclient.warning.dev_mode"), ChatType.FAIL); } return 0; }) diff --git a/src/main/resources/assets/codeclient/lang/en_us.json b/src/main/resources/assets/codeclient/lang/en_us.json index 25fb4e8..dc6474f 100644 --- a/src/main/resources/assets/codeclient/lang/en_us.json +++ b/src/main/resources/assets/codeclient/lang/en_us.json @@ -67,6 +67,10 @@ "codeclient.warning.dev_mode": "You must be in dev mode!", "codeclient.warning.creative_mode": "You must be in creative mode!", + "codeclient.search.results": "Search Results:", + "codeclient.search.no_results": "No results.", + "codeclient.search.hover.teleport": "Click to teleport\n%s", + "codeclient.files.template_fail": "Couldn't load templates.", "codeclient.files.hold_template": "You need to hold a template to save.", "codeclient.files.empty_dir": "Please use an empty folder to save into.", From b60a10d6fd2539cd0fdd3cfd715324f557f7576a Mon Sep 17 00:00:00 2001 From: vae <66442608+sylviameows@users.noreply.github.com> Date: Tue, 11 Jun 2024 15:43:00 -0500 Subject: [PATCH 4/4] combine hover text and position formatting --- src/main/java/dev/dfonline/codeclient/Commands.java | 2 +- src/main/resources/assets/codeclient/lang/en_us.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/dfonline/codeclient/Commands.java b/src/main/java/dev/dfonline/codeclient/Commands.java index 0acb18e..a13e4b7 100644 --- a/src/main/java/dev/dfonline/codeclient/Commands.java +++ b/src/main/java/dev/dfonline/codeclient/Commands.java @@ -395,7 +395,7 @@ else if(field.getType().isEnum()) { var action = Text.empty().append(" [⏼]").setStyle(Style.EMPTY .withColor(Formatting.GREEN) .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/jump %s %s", sub, name))) - .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.translatable("codeclient.search.hover.teleport", String.format("x: %s, y: %s, z: %s", pos.getX(), pos.getY(), pos.getZ())))) + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.translatable("codeclient.search.hover.teleport", pos.getX(), pos.getY(), pos.getZ()))) ); var entry = Text.empty().append("\n • ").formatted(Formatting.GREEN) .append(Text.empty().append(name).formatted(Formatting.WHITE)) diff --git a/src/main/resources/assets/codeclient/lang/en_us.json b/src/main/resources/assets/codeclient/lang/en_us.json index dc6474f..2af3e53 100644 --- a/src/main/resources/assets/codeclient/lang/en_us.json +++ b/src/main/resources/assets/codeclient/lang/en_us.json @@ -69,7 +69,7 @@ "codeclient.search.results": "Search Results:", "codeclient.search.no_results": "No results.", - "codeclient.search.hover.teleport": "Click to teleport\n%s", + "codeclient.search.hover.teleport": "Click to teleport\nx: %s, y: %s, z: %s", "codeclient.files.template_fail": "Couldn't load templates.", "codeclient.files.hold_template": "You need to hold a template to save.",