Split itemstack[] by commas correctly, fixes #434
This commit is contained in:
parent
3d38aad8d2
commit
eaf4e7eeef
@ -75,10 +75,9 @@ public class ParamInfoItemStackArray extends ParamInfoItemStack {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Replace this with better
|
String[] split = split(string);
|
||||||
String[] split = string.split(",", -1);
|
|
||||||
|
|
||||||
if (split.length != 4) {
|
if (split == null || split.length != 4) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,6 +91,57 @@ public class ParamInfoItemStackArray extends ParamInfoItemStack {
|
|||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String[] split(String string) {
|
||||||
|
String[] split = new String[4];
|
||||||
|
|
||||||
|
char[] chars = string.toCharArray();
|
||||||
|
boolean quote = false;
|
||||||
|
int depth = 0;
|
||||||
|
int splitNo = 0;
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
|
||||||
|
for (int i = 0; i < chars.length; i++) {
|
||||||
|
if (splitNo > 3 || depth < 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
char c = chars[i];
|
||||||
|
|
||||||
|
if (!quote && depth == 0 && c == ',') {
|
||||||
|
split[splitNo++] = builder.toString();
|
||||||
|
builder = new StringBuilder();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.append(c);
|
||||||
|
|
||||||
|
if (c == '\\' && i + 1 < chars.length) {
|
||||||
|
builder.append(chars[++i]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c == '"') {
|
||||||
|
quote = !quote;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!quote) {
|
||||||
|
if (c == '{' || c == '[') {
|
||||||
|
depth++;
|
||||||
|
} else if (c == '}' || c == ']') {
|
||||||
|
depth--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (splitNo != 3 || quote || depth != 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
split[splitNo] = builder.toString();
|
||||||
|
|
||||||
|
return split;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is the values it returns all it can do?
|
* Is the values it returns all it can do?
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user