Skip to content

Commit

Permalink
feat: Allow multiple warp modifiers on one line to avoid repeating co…
Browse files Browse the repository at this point in the history
…nditions #959
  • Loading branch information
BlayTheNinth committed Feb 5, 2025
1 parent d48630e commit 6337ef0
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,9 @@ public WarpRequirement resolveRequirements(WaystoneTeleportContext context) {
}

RequirementModifierParser.parse(modifier)
.stream()
.filter(configuredModifier -> configuredModifier.requirement().modifier().isEnabled())
.ifPresent(requirementsContext::apply);
.forEach(requirementsContext::apply);
}

return requirementsContext.resolve();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,18 @@

public class RequirementModifierParser {

public static Optional<ConfiguredRequirementModifier<?, ?>> parse(String input) {
public static List<? extends ConfiguredRequirementModifier<?, ?>> parse(String input) {
try {
final var conditionsStart = input.indexOf('[');
final var conditionsEnd = input.indexOf(']');
final var conditionsPart = conditionsStart != -1 && conditionsEnd != -1 ? input.substring(conditionsStart + 1, conditionsEnd) : "";
final var functionPart = input.substring(conditionsEnd + 1).trim();
final var conditions = parseConditions(conditionsPart);
final var requirement = parseRequirement(functionPart);
return Optional.of(new ConfiguredRequirementModifier<>(requirement, conditions));
final var requirements = parseRequirements(functionPart);
return requirements.stream().map(requirement -> new ConfiguredRequirementModifier<>(requirement, conditions)).toList();
} catch (Exception e) {
Waystones.logger.error("Could not parse warp requirement: {}", input, e);
return Optional.empty();
return List.of();
}
}

Expand All @@ -49,6 +49,16 @@ private static <P> ConfiguredCondition<P> parseCondition(ConditionResolver<P> co
return new ConfiguredCondition<>(conditionResolver, parameters);
}

private static List<ConfiguredRequirement<?, ?>> parseRequirements(String functionPart) {
final var requirements = new ArrayList<ConfiguredRequirement<?, ?>>();
final var requirementPattern = Pattern.compile("(\\w+)\\((.*?)\\)");
final var requirementMatcher = requirementPattern.matcher(functionPart);
while (requirementMatcher.find()) {
requirements.add(parseRequirement(requirementMatcher.group(0)));
}
return requirements;
}

private static ConfiguredRequirement<?, ?> parseRequirement(String functionPart) {
final var functionPattern = Pattern.compile("(\\w+)\\((.*?)\\)");
final var functionMatcher = functionPattern.matcher(functionPart);
Expand Down

0 comments on commit 6337ef0

Please sign in to comment.