diff --git a/src/main/java/io/github/misode/packtest/LoadDiagnostics.java b/src/main/java/io/github/misode/packtest/LoadDiagnostics.java index f53630c..987eb92 100644 --- a/src/main/java/io/github/misode/packtest/LoadDiagnostics.java +++ b/src/main/java/io/github/misode/packtest/LoadDiagnostics.java @@ -1,13 +1,20 @@ package io.github.misode.packtest; +import org.slf4j.Logger; + import java.util.ArrayList; import java.util.List; public class LoadDiagnostics { private static final List<Diagnostic> DIAGNOSTICS = new ArrayList<>(); - public static void error(String resource, String id, String message) { + public static void error(Logger logger, String resource, String id, String message) { DIAGNOSTICS.add(new Diagnostic(resource, id, message)); + String annotation = ""; + if (PackTest.isAnnotationsEnabled()) { + annotation = "\n::error title=Failed to load " + resource + " " + id + "::" + message; + } + logger.info(PackTest.wrapError("Failed to load {} {} - {}") + annotation, resource, id, message); } public static List<Diagnostic> loadErrors() { diff --git a/src/main/java/io/github/misode/packtest/PackTest.java b/src/main/java/io/github/misode/packtest/PackTest.java index d0c5033..acc6656 100644 --- a/src/main/java/io/github/misode/packtest/PackTest.java +++ b/src/main/java/io/github/misode/packtest/PackTest.java @@ -23,6 +23,10 @@ public static boolean isAutoColoringEnabled() { return isAutoEnabled() && !"false".equals(System.getProperty("packtest.auto.coloring")); } + public static boolean isAnnotationsEnabled() { + return isAutoEnabled() && System.getProperty("packtest.auto.annotations") != null; + } + @Override public void onInitialize() { CommandRegistrationCallback.EVENT.register((dispatcher, buildContext, environment) -> { diff --git a/src/main/java/io/github/misode/packtest/mixin/GameTestSequenceMixin.java b/src/main/java/io/github/misode/packtest/mixin/GameTestSequenceMixin.java index 105eb75..1080f64 100644 --- a/src/main/java/io/github/misode/packtest/mixin/GameTestSequenceMixin.java +++ b/src/main/java/io/github/misode/packtest/mixin/GameTestSequenceMixin.java @@ -9,6 +9,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +/** + * Add an idle method that includes the line number in the failure message + */ @Mixin(GameTestSequence.class) public abstract class GameTestSequenceMixin implements PackTestSequence { diff --git a/src/main/java/io/github/misode/packtest/mixin/LogTestReporterMixin.java b/src/main/java/io/github/misode/packtest/mixin/LogTestReporterMixin.java index d1a9921..0db4bcb 100644 --- a/src/main/java/io/github/misode/packtest/mixin/LogTestReporterMixin.java +++ b/src/main/java/io/github/misode/packtest/mixin/LogTestReporterMixin.java @@ -32,10 +32,14 @@ private void onTestFailed(GameTestInfo info, CallbackInfo ci) { String lineNumber = info.getError() instanceof LineNumberException err ? " on line " + err.getLineNumber() : ""; + String annotation = ""; + if (PackTest.isAnnotationsEnabled() && info.isRequired()) { + annotation = "\n::error title=Test " + info.getTestName() + " failed" + lineNumber + "!::" + Util.describeError(info.getError()); + } if (info.isRequired()) { - LOGGER.error(PackTest.wrapError("{} failed{}! {}"), info.getTestName(), lineNumber, Util.describeError(info.getError())); + LOGGER.error(PackTest.wrapError("{} failed{}! {}") + annotation, info.getTestName(), lineNumber, Util.describeError(info.getError())); } else { - LOGGER.warn(PackTest.wrapWarning("(optional) {} failed{}! {}"), info.getTestName(), lineNumber, Util.describeError(info.getError())); + LOGGER.warn(PackTest.wrapWarning("(optional) {} failed{}! {}") + annotation, info.getTestName(), lineNumber, Util.describeError(info.getError())); } ci.cancel(); } diff --git a/src/main/java/io/github/misode/packtest/mixin/LootDataTypeMixin.java b/src/main/java/io/github/misode/packtest/mixin/LootDataTypeMixin.java index d8b954d..0c827d6 100644 --- a/src/main/java/io/github/misode/packtest/mixin/LootDataTypeMixin.java +++ b/src/main/java/io/github/misode/packtest/mixin/LootDataTypeMixin.java @@ -3,7 +3,6 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import io.github.misode.packtest.LoadDiagnostics; -import io.github.misode.packtest.PackTest; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.storage.loot.LootDataType; import org.slf4j.Logger; @@ -24,8 +23,7 @@ public class LootDataTypeMixin { @WrapOperation(method = "method_53267", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;[Ljava/lang/Object;)V", remap = false)) private void deserialize(Logger logger, String message, Object[] args, Operation<Void> original) { - String type = ((String)args[0]).substring(0, ((String)args[0]).length() - 1); - LoadDiagnostics.error(type, ((ResourceLocation)args[1]).toString(), (String)args[2]); - LOGGER.error(PackTest.wrapError("Couldn't parse {} {} - {}"), type, args[1], args[2]); + String type = ((String)args[0]).replaceAll("_", " ").replaceFirst("s$", ""); + LoadDiagnostics.error(LOGGER, type, ((ResourceLocation)args[1]).toString(), (String)args[2]); } } diff --git a/src/main/java/io/github/misode/packtest/mixin/RecipeManagerMixin.java b/src/main/java/io/github/misode/packtest/mixin/RecipeManagerMixin.java index ec8f63f..34e1f21 100644 --- a/src/main/java/io/github/misode/packtest/mixin/RecipeManagerMixin.java +++ b/src/main/java/io/github/misode/packtest/mixin/RecipeManagerMixin.java @@ -3,7 +3,6 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import io.github.misode.packtest.LoadDiagnostics; -import io.github.misode.packtest.PackTest; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.RecipeManager; import org.slf4j.Logger; @@ -24,7 +23,6 @@ public class RecipeManagerMixin { @WrapOperation(method = "apply(Ljava/util/Map;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;)V", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false)) private void apply(Logger logger, String message, Object id, Object e, Operation<Void> original) { String error = ((Exception)e).getMessage(); - LoadDiagnostics.error("recipe", ((ResourceLocation)id).toString(), error); - LOGGER.error(PackTest.wrapError(message + " - {}"), id, error); + LoadDiagnostics.error(LOGGER, "recipe", ((ResourceLocation)id).toString(), error); } } diff --git a/src/main/java/io/github/misode/packtest/mixin/ServerAdvancementsManagerMixin.java b/src/main/java/io/github/misode/packtest/mixin/ServerAdvancementsManagerMixin.java index 1fcd661..a07e29e 100644 --- a/src/main/java/io/github/misode/packtest/mixin/ServerAdvancementsManagerMixin.java +++ b/src/main/java/io/github/misode/packtest/mixin/ServerAdvancementsManagerMixin.java @@ -3,11 +3,12 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import io.github.misode.packtest.LoadDiagnostics; -import io.github.misode.packtest.PackTest; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.ServerAdvancementManager; import org.slf4j.Logger; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; /** @@ -15,9 +16,12 @@ */ @Mixin(ServerAdvancementManager.class) public class ServerAdvancementsManagerMixin { + @Shadow + @Final + private static Logger LOGGER; + @WrapOperation(method = "method_20723", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false)) private void apply(Logger logger, String message, Object id, Object error, Operation<Void> original) { - LoadDiagnostics.error("advancement", ((ResourceLocation)id).toString(), (String)error); - original.call(logger, PackTest.wrapError(message), id, error); + LoadDiagnostics.error(LOGGER, "advancement", ((ResourceLocation)id).toString(), (String)error); } } diff --git a/src/main/java/io/github/misode/packtest/mixin/ServerFunctionLibraryMixin.java b/src/main/java/io/github/misode/packtest/mixin/ServerFunctionLibraryMixin.java index 543a6b9..217eae0 100644 --- a/src/main/java/io/github/misode/packtest/mixin/ServerFunctionLibraryMixin.java +++ b/src/main/java/io/github/misode/packtest/mixin/ServerFunctionLibraryMixin.java @@ -3,7 +3,6 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import io.github.misode.packtest.LoadDiagnostics; -import io.github.misode.packtest.PackTest; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.ServerFunctionLibrary; import org.slf4j.Logger; @@ -24,7 +23,6 @@ public class ServerFunctionLibraryMixin { @WrapOperation(method = "method_29457", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false)) private static void catchFunctionError(Logger logger, String message, Object id, Object e, Operation<Void> original) { String error = ((Exception)e).getMessage().replaceFirst("^[A-Za-z0-9.]+Exception: ", ""); - LoadDiagnostics.error("function", ((ResourceLocation)id).toString(), error); - LOGGER.error(PackTest.wrapError(message + " - {}"), id, error); + LoadDiagnostics.error(LOGGER, "function", ((ResourceLocation)id).toString(), error); } } diff --git a/src/main/java/io/github/misode/packtest/mixin/TagLoaderMixin.java b/src/main/java/io/github/misode/packtest/mixin/TagLoaderMixin.java index ea6b898..3a6a979 100644 --- a/src/main/java/io/github/misode/packtest/mixin/TagLoaderMixin.java +++ b/src/main/java/io/github/misode/packtest/mixin/TagLoaderMixin.java @@ -4,7 +4,6 @@ import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.mojang.serialization.DataResult; import io.github.misode.packtest.LoadDiagnostics; -import io.github.misode.packtest.PackTest; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagFile; import net.minecraft.tags.TagLoader; @@ -35,13 +34,11 @@ private static Object removeDuplicateError(DataResult<Object> dataResult, boolea private static void catchTagError(Logger logger, String message, Object[] args, Operation<Void> original) { String error = ((Exception)args[3]).getMessage().replaceFirst("^[A-Za-z0-9.]+Exception: ", ""); String type = ((ResourceLocation)args[1]).getPath().replaceFirst("tags/", "").replaceFirst("s?/.*", ""); - LoadDiagnostics.error(type + " tag", ((ResourceLocation)args[0]).toString(), error); - LOGGER.error(PackTest.wrapError("Couldn't read {} tag {} - {}"), type, args[0], error); + LoadDiagnostics.error(LOGGER, type + " tag", ((ResourceLocation)args[0]).toString(), error); } @WrapOperation(method = "method_33175", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false)) private static void catchTagReferenceError(Logger logger, String message, Object id, Object refs, Operation<Void> original) { - LoadDiagnostics.error("tag", ((ResourceLocation)id).toString(), "Missing references: " + refs); - original.call(logger, PackTest.wrapError(message), id, refs); + LoadDiagnostics.error(LOGGER, "tag", ((ResourceLocation)id).toString(), "Missing references: " + refs); } }