From cb611cee1a446d582b061be3db8bc06aa4435d1f Mon Sep 17 00:00:00 2001 From: Algent Date: Mon, 14 Sep 2026 16:52:28 +0200 Subject: [PATCH] fix: preserve scheduler save IOException propagation --- .../codechicken/multipart/TickScheduler.java | 7 +++++- ...ickSchedulerSaveFailureRegressionTest.java | 25 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/test/java/codechicken/multipart/TickSchedulerSaveFailureRegressionTest.java diff --git a/src/main/scala/codechicken/multipart/TickScheduler.java b/src/main/scala/codechicken/multipart/TickScheduler.java index 4a8a2a8..c18b880 100644 --- a/src/main/scala/codechicken/multipart/TickScheduler.java +++ b/src/main/scala/codechicken/multipart/TickScheduler.java @@ -183,7 +183,7 @@ public final class TickScheduler { CompressedStreamTools.writeCompressed(saveTag(), dout); dout.close(); } catch (java.io.IOException e) { - throw new RuntimeException(e); + throw TickScheduler.rethrow(e); } } @@ -316,6 +316,11 @@ public final class TickScheduler { return new WorldTickScheduler(world); } + @SuppressWarnings("unchecked") + private static RuntimeException rethrow(Throwable throwable) throws T { + throw (T) throwable; + } + public static ChunkExtension createChunkExtension(Chunk chunk, WorldExtension world) { return new ChunkTickScheduler(chunk, (WorldTickScheduler) world); } diff --git a/src/test/java/codechicken/multipart/TickSchedulerSaveFailureRegressionTest.java b/src/test/java/codechicken/multipart/TickSchedulerSaveFailureRegressionTest.java new file mode 100644 index 0000000..3f3a744 --- /dev/null +++ b/src/test/java/codechicken/multipart/TickSchedulerSaveFailureRegressionTest.java @@ -0,0 +1,25 @@ +package codechicken.multipart; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +class TickSchedulerSaveFailureRegressionTest { + + @Test + void savePropagatesTheOriginalIoException(@TempDir Path directory) { + TickScheduler.WorldTickScheduler scheduler = new TickScheduler.WorldTickScheduler(null) { + + @Override + File saveFile() { + return directory.toFile(); + } + }; + assertThrows(IOException.class, scheduler::save); + } +}