Skip to content

Commit 6c63feb

Browse files
authored
Merge pull request #77 from sylviameows/main
code search command
2 parents f0b6890 + b60a10d commit 6c63feb

2 files changed

Lines changed: 48 additions & 1 deletion

File tree

src/main/java/dev/dfonline/codeclient/Commands.java

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,48 @@ else if(field.getType().isEnum()) {
369369
return -1;
370370
})));
371371

372+
dispatcher.register(literal("search")
373+
.then(argument("query",greedyString()).suggests((context,builder) -> suggestJump(JumpType.ANY, context, builder)).executes(context -> {
374+
if(CodeClient.location instanceof Dev dev) {
375+
var query = context.getArgument("query", String.class);
376+
var results = dev.scanForSigns(JumpType.ANY.pattern,Pattern.compile("^.*"+Pattern.quote(query)+".*$", Pattern.CASE_INSENSITIVE));
377+
378+
if (results == null || results.isEmpty()) {
379+
Utility.sendMessage(Text.translatable("codeclient.search.no_results"), ChatType.INFO);
380+
return 0;
381+
}
382+
383+
var message = Text.translatable("codeclient.search.results");
384+
results.forEach((pos,text) -> {
385+
var type = text.getMessage(0, false).getString();
386+
var name = text.getMessage(1, false).getString();
387+
388+
String sub = null;
389+
if (JumpType.PLAYER_EVENT.pattern.matcher(type).matches()) sub = "player";
390+
else if (JumpType.ENTITY_EVENT.pattern.matcher(type).matches()) sub = "entity";
391+
else if (JumpType.FUNCTION.pattern.matcher(type).matches()) sub = "func";
392+
else if (JumpType.PROCESS.pattern.matcher(type).matches()) sub = "proc";
393+
else return;
394+
395+
var action = Text.empty().append(" [⏼]").setStyle(Style.EMPTY
396+
.withColor(Formatting.GREEN)
397+
.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/jump %s %s", sub, name)))
398+
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.translatable("codeclient.search.hover.teleport", pos.getX(), pos.getY(), pos.getZ())))
399+
);
400+
var entry = Text.empty().append("\n • ").formatted(Formatting.GREEN)
401+
.append(Text.empty().append(name).formatted(Formatting.WHITE))
402+
.append(action);
403+
message.append(entry);
404+
});
405+
406+
Utility.sendMessage(message, ChatType.SUCCESS);
407+
} else {
408+
Utility.sendMessage(Text.translatable("codeclient.warning.dev_mode"), ChatType.FAIL);
409+
}
410+
return 0;
411+
})
412+
));
413+
372414
LiteralCommandNode<FabricClientCommandSource> jumpCommand = dispatcher.register(literal("jump")
373415
.then(literal("player").then(argument("name", greedyString()).suggests((context, builder) -> suggestJump(JumpType.PLAYER_EVENT, context, builder)).executes(context -> {
374416
var name = context.getArgument("name", String.class);
@@ -613,7 +655,8 @@ private static enum JumpType {
613655
PLAYER_EVENT("PLAYER EVENT"),
614656
ENTITY_EVENT("ENTITY EVENT"),
615657
FUNCTION("FUNCTION"),
616-
PROCESS("PROCESS");
658+
PROCESS("PROCESS"),
659+
ANY("(((PLAYER)|(ENTITY)) EVENT)|(FUNCTION)|(PROCESS)");
617660

618661
public final Pattern pattern;
619662
JumpType(String scan) {

src/main/resources/assets/codeclient/lang/en_us.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@
6767
"codeclient.warning.dev_mode": "You must be in dev mode!",
6868
"codeclient.warning.creative_mode": "You must be in creative mode!",
6969

70+
"codeclient.search.results": "Search Results:",
71+
"codeclient.search.no_results": "No results.",
72+
"codeclient.search.hover.teleport": "Click to teleport\nx: %s, y: %s, z: %s",
73+
7074
"codeclient.files.template_fail": "Couldn't load templates.",
7175
"codeclient.files.hold_template": "You need to hold a template to save.",
7276
"codeclient.files.empty_dir": "Please use an empty folder to save into.",

0 commit comments

Comments
 (0)