blob: bfda1c95506fbb0a089cd59ae1eb22b235111240 [file] [log] [blame] [raw]
package net.querz.nbt;
import net.querz.nbt.util.Array;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NBTUtil {
public static Pattern noNeedToEscapePattern = Pattern.compile("[a-zA-Z0-9_\\-+]*");
/**
* gets the {@code Number} value of any tag
* @param tag The tag to get the {@code Number} value from
* @return the value of {@code tag} or 0 if {@code} tag is not an instance of {@code NumberTag}
*/
public static Number toNumber(Tag tag) {
if (tag != null && tag instanceof NumberTag)
return (Number) tag.getValue();
return 0;
}
/**
* checks if tag is a {@code Number} and interprets it as a boolean.
* @param tag the Tag instance to be turned into a boolean
* @return true if the Number is > 0
*/
public static boolean toBoolean(Tag tag) {
return toNumber(tag).byteValue() > 0;
}
public static String joinTagString(String delimiter, Object array) {
return joinTagString(delimiter, array, 0);
}
public static String joinTagString(String delimiter, Object array, int depth) {
boolean first = true;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < Array.getLength(array); i++) {
sb.append(first ? "" : delimiter).append(((Tag) Array.get(array, i)).toTagString(depth));
first = false;
}
return sb.toString();
}
public static String joinArray(String delimiter, Object array) {
return NBTUtil.joinArray(delimiter, array, "", 0, true);
}
public static String joinArray(String delimiter, Object array, int depth) {
return NBTUtil.joinArray(delimiter, array, "", depth, true);
}
public static String joinArray(String delimiter, Object array, String typeSuffix) {
return NBTUtil.joinArray(delimiter, array, typeSuffix, 0, true);
}
public static String joinArray(String delimiter, Object array, String typeSuffix, int depth, boolean useToTagString) {
boolean first = true;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < Array.getLength(array); i++) {
if (Array.get(array, i) instanceof Tag) {
if (useToTagString) {
sb.append(first ? "" : delimiter).append(((Tag) Array.get(array, i)).toTagString(depth));
} else {
sb.append(first ? "" : delimiter).append(((Tag) Array.get(array, i)).toString(depth));
}
} else {
sb.append(first ? "" : delimiter).append(Array.get(array, i)).append(typeSuffix);
}
first = false;
}
return sb.toString();
}
public static String createNamePrefix(Tag tag) {
return tag.getName().equals("") ? "" : (createPossiblyEscapedString(tag.getName()) + ":");
}
public static String createPossiblyEscapedString(String input) {
Matcher matcher = noNeedToEscapePattern.matcher(input);
if (matcher.matches()) {
return input;
}
return "\"" + input
.replace("\\", "\\\\")
.replace("\"", "\\\"")
.replace("\n", "\\n") + "\"";
}
}