feat(validation): add diagnostic data model — GlbDiagnostic, GlbValidationResult, GlbDiagnosticRegistry

This commit is contained in:
NotEvil
2026-04-17 01:41:02 +02:00
parent 8af58b5dd5
commit eb759fefff
3 changed files with 95 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
package com.tiedup.remake.client.gltf.diagnostic;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.jetbrains.annotations.Nullable;
/**
* A single diagnostic finding from GLB validation.
*/
@OnlyIn(Dist.CLIENT)
public record GlbDiagnostic(
ResourceLocation source,
@Nullable ResourceLocation itemDef,
Severity severity,
String code,
String message
) {
public enum Severity { ERROR, WARNING, INFO }
}

View File

@@ -0,0 +1,49 @@
package com.tiedup.remake.client.gltf.diagnostic;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
/**
* Static client-side registry of GLB validation results.
* Populated during resource reload, queried by /tiedup validate command.
*/
@OnlyIn(Dist.CLIENT)
public final class GlbDiagnosticRegistry {
private static final Map<ResourceLocation, GlbValidationResult> results =
new LinkedHashMap<>();
private GlbDiagnosticRegistry() {}
public static void clear() {
results.clear();
}
public static void addResult(GlbValidationResult result) {
results.put(result.source(), result);
}
public static Collection<GlbValidationResult> getAll() {
return Collections.unmodifiableCollection(results.values());
}
public static List<GlbValidationResult> getErrors() {
return results.values().stream()
.filter(r -> !r.passed())
.toList();
}
public static GlbValidationResult get(ResourceLocation source) {
return results.get(source);
}
public static int size() {
return results.size();
}
}

View File

@@ -0,0 +1,26 @@
package com.tiedup.remake.client.gltf.diagnostic;
import java.util.List;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
/**
* Validation result for a single GLB file.
*/
@OnlyIn(Dist.CLIENT)
public record GlbValidationResult(
ResourceLocation source,
List<GlbDiagnostic> diagnostics,
boolean passed
) {
/** Create a result, computing passed from diagnostics. */
public static GlbValidationResult of(
ResourceLocation source,
List<GlbDiagnostic> diagnostics
) {
boolean passed = diagnostics.stream()
.noneMatch(d -> d.severity() == GlbDiagnostic.Severity.ERROR);
return new GlbValidationResult(source, List.copyOf(diagnostics), passed);
}
}