# VersionExpression Parsed comparison form of a single version expression. Recognises `>=`, `<=`, `>`, `<`, trailing `+` (alias for `>=`), or a bare version (`EQ`). --- ## Source ```java package gg.lode.paintingapi.api.version; import org.jetbrains.annotations.NotNull; public final class VersionExpression { public enum Operator { EQ, GT, GTE, LT, LTE } private final Operator operator; private final String version; private VersionExpression(@NotNull Operator operator, @NotNull String version) { this.operator = operator; this.version = version; } public @NotNull Operator operator() { return operator; } public @NotNull String version() { return version; } public static @NotNull VersionExpression parse(@NotNull String raw) { String s = raw.trim(); if (s.isEmpty()) { throw new IllegalArgumentException("Empty version expression"); } if (s.startsWith(">=")) return new VersionExpression(Operator.GTE, s.substring(2).trim()); if (s.startsWith("<=")) return new VersionExpression(Operator.LTE, s.substring(2).trim()); if (s.startsWith(">")) return new VersionExpression(Operator.GT, s.substring(1).trim()); if (s.startsWith("<")) return new VersionExpression(Operator.LT, s.substring(1).trim()); if (s.endsWith("+")) return new VersionExpression(Operator.GTE, s.substring(0, s.length() - 1).trim()); return new VersionExpression(Operator.EQ, s); } public boolean evaluate(int playerProtocol, int referenceProtocol) { return switch (operator) { case EQ -> playerProtocol == referenceProtocol; case GT -> playerProtocol > referenceProtocol; case GTE -> playerProtocol >= referenceProtocol; case LT -> playerProtocol < referenceProtocol; case LTE -> playerProtocol <= referenceProtocol; }; } } ``` --- ## Related Pages - [[Painting/API/VersionResolver]] — evaluates compound expressions using this class - [[Painting/API/PackVariant]] — stores the raw expression strings