Skip to content

Commit 6a57068

Browse files
committed
Extend ModelRequiresOverlayOverrideValidator with replacements
1 parent 997c1c1 commit 6a57068

File tree

3 files changed

+41
-5
lines changed

3 files changed

+41
-5
lines changed

doc/CONFIG.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,14 @@ Some validators may require additional data in order to work.
9494
"enabled": true,
9595
"required": [
9696
{
97-
"path": "glob:**/cosmetics/back/**",
98-
"overlays": [ "1_20_2" ]
97+
"path": "glob:**/minecraft/models/equipment/**",
98+
"overlays": [ "1_21_4" ],
99+
"replacements": [
100+
{
101+
"path": "/models/equipment/",
102+
"replacement": "/equipment/"
103+
}
104+
]
99105
}
100106
]
101107
}

src/main/java/dev/kinau/resourcepackvalidator/cache/AssetDictionary.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
import java.util.stream.Stream;
1818

1919
// On Update:
20+
//
21+
// There is a cmd line argument you can use to generate the assetscache
22+
//
2023
// 1. libraries/com/mojang/minecraft/%ver%/assets | find . -type f > files.txt
2124
// 2. ./minecraft » minecraft
2225
// 3. .mcassetsroot » deleted

src/main/java/dev/kinau/resourcepackvalidator/validator/models/ModelRequiresOverlayOverrideValidator.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,17 @@ private void loadRequirements() {
3737
if (element.getAsJsonObject().has("path") && element.getAsJsonObject().has("overlays")) {
3838
PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher(element.getAsJsonObject().get("path").getAsString());
3939
List<String> overlays = element.getAsJsonObject().getAsJsonArray("overlays").asList().stream().map(JsonElement::getAsString).toList();
40-
requirements.add(new Requirement(pathMatcher, overlays));
40+
List<ReplacementRule> replacementRules = new ArrayList<>();
41+
if (element.getAsJsonObject().has("replacements") && element.getAsJsonObject().get("replacements").isJsonArray()) {
42+
for (JsonElement ruleElement : element.getAsJsonObject().getAsJsonArray("replacements")) {
43+
if (!ruleElement.isJsonObject()) continue;
44+
JsonObject ruleObject = ruleElement.getAsJsonObject();
45+
if (!ruleObject.has("path") || !ruleObject.get("path").isJsonPrimitive()) continue;
46+
if (!ruleObject.has("replacement") || !ruleObject.get("replacement").isJsonPrimitive()) continue;
47+
replacementRules.add(new ReplacementRule(ruleObject.get("path").getAsString(), ruleObject.get("replacement").getAsString()));
48+
}
49+
}
50+
requirements.add(new Requirement(pathMatcher, overlays, replacementRules));
4151
}
4252
});
4353
}
@@ -49,7 +59,6 @@ protected boolean defaultEnabled() {
4959

5060
@Override
5161
protected ValidationResult<JsonObject> isValid(ValidationJob job, FileContext context, JsonObject data) {
52-
if (context.namespace().getOverlay() != null) return skip();
5362
boolean failed = false;
5463
for (Requirement requirement : requirements) {
5564
if (requirement.path.matches(context.value().toPath())) {
@@ -62,7 +71,8 @@ protected ValidationResult<JsonObject> isValid(ValidationJob job, FileContext co
6271
if (optNamespace.isEmpty())
6372
return failedError("Could not find overlay {} although it is required", requiredOverlay);
6473
OverlayNamespace namespace = optNamespace.get();
65-
File requiredFile = FileUtils.getFileInOverlay(namespace, context.value());
74+
File updatedFile = new File(requirement.applyRules(context.value()));
75+
File requiredFile = FileUtils.getFileInOverlay(namespace, updatedFile);
6676
if (requiredFile == null || !requiredFile.exists()) {
6777
failed = true;
6878
String path = requiredFile != null ? requiredFile.getPath() : "some unresolved location";
@@ -79,5 +89,22 @@ protected ValidationResult<JsonObject> isValid(ValidationJob job, FileContext co
7989
class Requirement {
8090
public final PathMatcher path;
8191
public final List<String> overlays;
92+
public final List<ReplacementRule> replacementRules;
93+
94+
public String applyRules(File file) {
95+
if (replacementRules == null) return file.getPath();
96+
String path = file.getPath();
97+
for (ReplacementRule replacementRule : replacementRules) {
98+
path = path.replace(replacementRule.path, replacementRule.replacement);
99+
}
100+
return path;
101+
}
102+
}
103+
104+
@RequiredArgsConstructor
105+
@ToString
106+
class ReplacementRule {
107+
public final String path;
108+
public final String replacement;
82109
}
83110
}

0 commit comments

Comments
 (0)