diff --git a/DynmapCore/src/main/java/org/dynmap/DynmapCore.java b/DynmapCore/src/main/java/org/dynmap/DynmapCore.java index efbeed47..a04a38b1 100644 --- a/DynmapCore/src/main/java/org/dynmap/DynmapCore.java +++ b/DynmapCore/src/main/java/org/dynmap/DynmapCore.java @@ -27,9 +27,12 @@ import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Scanner; import java.util.Set; import java.util.TreeSet; import java.util.concurrent.LinkedBlockingQueue; +import java.util.function.Supplier; +import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -1117,6 +1120,11 @@ public class DynmapCore implements DynmapCommonAPI { /* Parse argument strings : handle quoted strings */ public static String[] parseArgs(String[] args, DynmapCommandSender snd) { + return parseArgs(args, snd, false); + } + + /* Parse argument strings : handle quoted strings */ + public static String[] parseArgs(String[] args, DynmapCommandSender snd, boolean allowUnclosedQuotes) { ArrayList rslt = new ArrayList(); /* Build command line, so we can parse our way - make sure there is trailing space */ String cmdline = ""; @@ -1146,9 +1154,15 @@ public class DynmapCore implements DynmapCommonAPI { sb.append(c); } } - if(inquote) { /* If still in quote, syntax error */ - snd.sendMessage("Error: unclosed doublequote"); - return null; + if(inquote) { // If still in quote + if(allowUnclosedQuotes) { + if(sb.length() > 1) { // Add remaining input without trailing space + rslt.add(sb.substring(0, sb.length() - 1)); + } + } else { // Syntax error + snd.sendMessage("Error: unclosed doublequote"); + return null; + } } return rslt.toArray(new String[rslt.size()]); } @@ -1251,7 +1265,7 @@ public class DynmapCore implements DynmapCommonAPI { new CommandInfo("dmarker", "movehere", "id:", "Move marker with ID to current location."), new CommandInfo("dmarker", "update", "