minecraft-src/net/minecraft/server/dialog/action/ParsedTemplate.java
2025-09-18 12:27:44 +00:00

36 lines
1.4 KiB
Java

package net.minecraft.server.dialog.action;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import java.util.List;
import java.util.Map;
import net.minecraft.commands.functions.StringTemplate;
public class ParsedTemplate {
public static final Codec<ParsedTemplate> CODEC = Codec.STRING.comapFlatMap(ParsedTemplate::parse, parsedTemplate -> parsedTemplate.raw);
public static final Codec<String> VARIABLE_CODEC = Codec.STRING
.validate(string -> StringTemplate.isValidVariableName(string) ? DataResult.success(string) : DataResult.error(() -> string + " is not a valid input name"));
private final String raw;
private final StringTemplate parsed;
private ParsedTemplate(String raw, StringTemplate parsed) {
this.raw = raw;
this.parsed = parsed;
}
private static DataResult<ParsedTemplate> parse(String input) {
StringTemplate stringTemplate;
try {
stringTemplate = StringTemplate.fromString(input);
} catch (Exception var3) {
return DataResult.error(() -> "Failed to parse template " + input + ": " + var3.getMessage());
}
return DataResult.success(new ParsedTemplate(input, stringTemplate));
}
public String instantiate(Map<String, String> variables) {
List<String> list = this.parsed.variables().stream().map(string -> (String)variables.getOrDefault(string, "")).toList();
return this.parsed.substitute(list);
}
}