From 89a971ebe3af1da61efe143bfa0ccc7b7a6b9ec0 Mon Sep 17 00:00:00 2001 From: Mark Rapson Date: Mon, 10 Aug 2026 23:49:01 +0100 Subject: [PATCH] Fail stuck render captures --- .../github/copilot/renameable/RenderCatalogClient.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build/client-renderer/src/client/java/dev/github/copilot/renameable/RenderCatalogClient.java b/build/client-renderer/src/client/java/dev/github/copilot/renameable/RenderCatalogClient.java index 2a1bf69..5f4ddd1 100644 --- a/build/client-renderer/src/client/java/dev/github/copilot/renameable/RenderCatalogClient.java +++ b/build/client-renderer/src/client/java/dev/github/copilot/renameable/RenderCatalogClient.java @@ -28,6 +28,7 @@ import net.minecraft.world.item.ItemStack; public final class RenderCatalogClient implements ClientModInitializer { private static final Gson GSON = new Gson(); + private static final long CAPTURE_TIMEOUT_MILLIS = 120_000L; private final List jobs = new ArrayList<>(); private Path outputDir; @@ -213,6 +214,7 @@ public final class RenderCatalogClient implements ClientModInitializer { private final class RenderScreen extends Screen { private boolean captureQueued; + private long captureQueuedAtMillis; private RenderScreen() { super(Component.literal("Rendering renameable items")); @@ -220,10 +222,12 @@ public final class RenderCatalogClient implements ClientModInitializer { private void markCaptureQueued() { captureQueued = true; + captureQueuedAtMillis = System.currentTimeMillis(); } private void resetCaptureState() { captureQueued = false; + captureQueuedAtMillis = 0L; } @Override @@ -234,6 +238,10 @@ public final class RenderCatalogClient implements ClientModInitializer { if (currentJobIndex < jobs.size()) { Minecraft client = Minecraft.getInstance(); RenderJob job = jobs.get(currentJobIndex); + if (captureQueued && captureQueuedAtMillis > 0L && System.currentTimeMillis() - captureQueuedAtMillis > CAPTURE_TIMEOUT_MILLIS) { + throw new RuntimeException("Timed out waiting for screenshot capture for " + job.outputPath()); + } + ItemStack stack = createStack(job); if (stack.isEmpty()) { client.execute(() -> advanceJob());