StringTemplate.java
net.minecraft.commands.functions.StringTemplate
信息
- 全限定名:net.minecraft.commands.functions.StringTemplate
- 类型:public record
- 包:net.minecraft.commands.functions
- 源码路径:src/main/java/net/minecraft/commands/functions/StringTemplate.java
- 起始行号:L7
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static StringTemplate fromString(String input) @ L8
- 方法名:fromString
- 源码定位:L8
- 返回类型:StringTemplate
- 修饰符:public static
参数:
- input: String
说明:
TODO
public static boolean isValidVariableName(String variable) @ L47
- 方法名:isValidVariableName
- 源码定位:L47
- 返回类型:boolean
- 修饰符:public static
参数:
- variable: String
说明:
TODO
public String substitute(List<String> arguments) @ L58
- 方法名:substitute
- 源码定位:L58
- 返回类型:String
- 修饰符:public
参数:
- arguments: List
说明:
TODO
代码
public record StringTemplate(List<String> segments, List<String> variables) {
public static StringTemplate fromString(String input) {
Builder<String> segments = ImmutableList.builder();
Builder<String> variables = ImmutableList.builder();
int length = input.length();
int start = 0;
int index = input.indexOf(36);
while (index != -1) {
if (index != length - 1 && input.charAt(index + 1) == '(') {
segments.add(input.substring(start, index));
int variableEnd = input.indexOf(41, index + 1);
if (variableEnd == -1) {
throw new IllegalArgumentException("Unterminated macro variable");
}
String variable = input.substring(index + 2, variableEnd);
if (!isValidVariableName(variable)) {
throw new IllegalArgumentException("Invalid macro variable name '" + variable + "'");
}
variables.add(variable);
start = variableEnd + 1;
index = input.indexOf(36, start);
} else {
index = input.indexOf(36, index + 1);
}
}
if (start == 0) {
throw new IllegalArgumentException("No variables in macro");
} else {
if (start != length) {
segments.add(input.substring(start));
}
return new StringTemplate(segments.build(), variables.build());
}
}
public static boolean isValidVariableName(String variable) {
for (int i = 0; i < variable.length(); i++) {
char character = variable.charAt(i);
if (!Character.isLetterOrDigit(character) && character != '_') {
return false;
}
}
return true;
}
public String substitute(List<String> arguments) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < this.variables.size(); i++) {
builder.append(this.segments.get(i)).append(arguments.get(i));
CommandFunction.checkCommandLineLength(builder);
}
if (this.segments.size() > this.variables.size()) {
builder.append(this.segments.getLast());
}
CommandFunction.checkCommandLineLength(builder);
return builder.toString();
}
}引用的其他类
- CommandFunction
- 引用位置:
方法调用 - 关联成员:
CommandFunction.checkCommandLineLength()
- 引用位置: