# PackVariant
A single resource pack variant: URL, SHA-1 hash, and the protocols / version expressions it applies to.
---
## Source
```java
package gg.lode.paintingapi.api.model;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.List;
import java.util.Set;
public final class PackVariant {
private final String url;
private final String hash;
private final Set<Integer> protocols;
private final List<String> versionExpressions;
public PackVariant(@NotNull String url,
@NotNull String hash,
@NotNull Set<Integer> protocols,
@Nullable List<String> versionExpressions) {
this.url = url;
this.hash = hash;
this.protocols = Collections.unmodifiableSet(protocols);
this.versionExpressions = versionExpressions == null
? Collections.emptyList()
: Collections.unmodifiableList(versionExpressions);
}
public @NotNull String url() { return url; }
public @NotNull String hash() { return hash; }
public @NotNull Set<Integer> protocols() { return protocols; }
public @NotNull List<String> versionExpressions() { return versionExpressions; }
public boolean matches(int protocol) {
return protocols.contains(protocol);
}
}
```
---
## Related Pages
- [[Painting/API/PackDefinition]] — owns the variant list
- [[Painting/API/VersionExpression]] — parses the strings in `versionExpressions()`