soiz1's picture
Upload folder using huggingface_hub
d46f4a3 verified
package net.minecraft.commands.functions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import java.util.List;
public record StringTemplate(List<String> segments, List<String> variables) {
public static StringTemplate fromString(String p_311822_, int p_311237_) {
Builder<String> builder = ImmutableList.builder();
Builder<String> builder1 = ImmutableList.builder();
int i = p_311822_.length();
int j = 0;
int k = p_311822_.indexOf(36);
while (k != -1) {
if (k != i - 1 && p_311822_.charAt(k + 1) == '(') {
builder.add(p_311822_.substring(j, k));
int l = p_311822_.indexOf(41, k + 1);
if (l == -1) {
throw new IllegalArgumentException("Unterminated macro variable in macro '" + p_311822_ + "' on line " + p_311237_);
}
String s = p_311822_.substring(k + 2, l);
if (!isValidVariableName(s)) {
throw new IllegalArgumentException("Invalid macro variable name '" + s + "' on line " + p_311237_);
}
builder1.add(s);
j = l + 1;
k = p_311822_.indexOf(36, j);
} else {
k = p_311822_.indexOf(36, k + 1);
}
}
if (j == 0) {
throw new IllegalArgumentException("Macro without variables on line " + p_311237_);
} else {
if (j != i) {
builder.add(p_311822_.substring(j));
}
return new StringTemplate(builder.build(), builder1.build());
}
}
private static boolean isValidVariableName(String p_312174_) {
for (int i = 0; i < p_312174_.length(); i++) {
char c0 = p_312174_.charAt(i);
if (!Character.isLetterOrDigit(c0) && c0 != '_') {
return false;
}
}
return true;
}
public String substitute(List<String> p_310551_) {
StringBuilder stringbuilder = new StringBuilder();
for (int i = 0; i < this.variables.size(); i++) {
stringbuilder.append(this.segments.get(i)).append(p_310551_.get(i));
CommandFunction.checkCommandLineLength(stringbuilder);
}
if (this.segments.size() > this.variables.size()) {
stringbuilder.append(this.segments.get(this.segments.size() - 1));
}
CommandFunction.checkCommandLineLength(stringbuilder);
return stringbuilder.toString();
}
}