diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java index 66d053af0e..48c5e0578d 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/SchematicCommands.java @@ -311,6 +311,8 @@ public void formats(Actor actor) { public void list(Actor actor, @ArgFlag(name = 'p', desc = "Page to view.", def = "1") int page, + @ArgFlag(name = 'f', desc = "Filter", def = "") + String filter, @Switch(name = 'd', desc = "Sort by date, oldest first") boolean oldFirst, @Switch(name = 'n', desc = "Sort by date, newest first") @@ -330,11 +332,14 @@ public void list(Actor actor, pathComparator = Comparator.naturalOrder(); flag = ""; } + if (filter != null && !filter.isEmpty()) { + flag += " -f \"" + filter + "\""; + } final String pageCommand = actor.isPlayer() ? "//schem list -p %page%" + flag : null; WorldEditAsyncCommandBuilder.createAndSendMessage(actor, - new SchematicListTask(pathComparator, page, pageCommand), + new SchematicListTask(pathComparator, page, filter, pageCommand), SubtleFormat.wrap("(Please wait... gathering schematic list.)")); } @@ -443,11 +448,13 @@ public Consumer call() throws Exception { private static class SchematicListTask implements Callable { private final Comparator pathComparator; private final int page; + private final String filter; private final String pageCommand; - SchematicListTask(Comparator pathComparator, int page, String pageCommand) { + SchematicListTask(Comparator pathComparator, int page, String filter, String pageCommand) { this.pathComparator = pathComparator; this.page = page; + this.filter = filter; this.pageCommand = pageCommand; } @@ -456,6 +463,10 @@ public Component call() throws Exception { SchematicsManager schematicsManager = WorldEdit.getInstance().getSchematicsManager(); // Copy this to a mutable list, we're sorting it below. List fileList = new ArrayList<>(schematicsManager.getSchematicPaths()); + if (filter != null && !filter.isEmpty()) { + Path schematicsRoot = WorldEdit.getInstance().getSchematicsManager().getRoot(); + fileList.removeIf(f -> !schematicsRoot.relativize(f).toString().contains(filter)); + } if (fileList.isEmpty()) { return ErrorFormat.wrap("No schematics found.");