From eb759fefffc358ddb7958799e6494c514d3f8d6b Mon Sep 17 00:00:00 2001 From: NotEvil Date: Fri, 17 Apr 2026 01:41:02 +0200 Subject: [PATCH] =?UTF-8?q?feat(validation):=20add=20diagnostic=20data=20m?= =?UTF-8?q?odel=20=E2=80=94=20GlbDiagnostic,=20GlbValidationResult,=20GlbD?= =?UTF-8?q?iagnosticRegistry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/gltf/diagnostic/GlbDiagnostic.java | 20 ++++++++ .../diagnostic/GlbDiagnosticRegistry.java | 49 +++++++++++++++++++ .../gltf/diagnostic/GlbValidationResult.java | 26 ++++++++++ 3 files changed, 95 insertions(+) create mode 100644 src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbDiagnostic.java create mode 100644 src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbDiagnosticRegistry.java create mode 100644 src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbValidationResult.java diff --git a/src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbDiagnostic.java b/src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbDiagnostic.java new file mode 100644 index 0000000..d5d18b8 --- /dev/null +++ b/src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbDiagnostic.java @@ -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 } +} diff --git a/src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbDiagnosticRegistry.java b/src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbDiagnosticRegistry.java new file mode 100644 index 0000000..78b3f9d --- /dev/null +++ b/src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbDiagnosticRegistry.java @@ -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 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 getAll() { + return Collections.unmodifiableCollection(results.values()); + } + + public static List 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(); + } +} diff --git a/src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbValidationResult.java b/src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbValidationResult.java new file mode 100644 index 0000000..cf98a90 --- /dev/null +++ b/src/main/java/com/tiedup/remake/client/gltf/diagnostic/GlbValidationResult.java @@ -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 diagnostics, + boolean passed +) { + /** Create a result, computing passed from diagnostics. */ + public static GlbValidationResult of( + ResourceLocation source, + List diagnostics + ) { + boolean passed = diagnostics.stream() + .noneMatch(d -> d.severity() == GlbDiagnostic.Severity.ERROR); + return new GlbValidationResult(source, List.copyOf(diagnostics), passed); + } +}