diff --git a/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/api/resource/reload/ResourceReload.java b/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/api/resource/reload/ResourceReload.java index 1f847797..8cde7290 100644 --- a/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/api/resource/reload/ResourceReload.java +++ b/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/api/resource/reload/ResourceReload.java @@ -21,10 +21,14 @@ public interface ResourceReload { * @return a new resource reload. */ static ResourceReload start(ResourceManager manager, List reloaders, Executor backgroundExecutor, Executor mainThreadExecutor, CompletableFuture initialTask) { + return start(manager, reloaders, backgroundExecutor, mainThreadExecutor, initialTask, () -> {}); + } + + static ResourceReload start(ResourceManager manager, List reloaders, Executor backgroundExecutor, Executor mainThreadExecutor, CompletableFuture initialTask, Runnable finalTask) { if (ResourceLoader.LOGGER.isDebugEnabled()) { - return ProfiledResourceReload.start(manager, reloaders, backgroundExecutor, mainThreadExecutor, initialTask); + return ProfiledResourceReload.start(manager, reloaders, backgroundExecutor, mainThreadExecutor, initialTask, finalTask); } else { - return SimpleResourceReload.start(manager, reloaders, backgroundExecutor, mainThreadExecutor, initialTask); + return SimpleResourceReload.start(manager, reloaders, backgroundExecutor, mainThreadExecutor, initialTask, finalTask); } } diff --git a/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/manager/SimpleReloadableResourceManager.java b/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/manager/SimpleReloadableResourceManager.java index a96145cc..cc1cd7fb 100644 --- a/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/manager/SimpleReloadableResourceManager.java +++ b/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/manager/SimpleReloadableResourceManager.java @@ -236,16 +236,12 @@ private ResourceReload startReload(Executor backgroundExecutor, Executor mainThr } }); - ResourceReload reload = ResourceReload.start(this, reloaders, backgroundExecutor, mainThreadExecutor, initialTask); - - reload.result().thenRun(() -> { + return ResourceReload.start(this, reloaders, backgroundExecutor, mainThreadExecutor, initialTask, () -> { if (this.type == ResourceType.CLIENT_ASSETS) { ClientResourceLoaderEvents.END_RESOURCE_RELOAD.invoker().accept(this, context); } else if (this.type == ResourceType.SERVER_DATA) { ServerResourceLoaderEvents.END_RESOURCE_RELOAD.invoker().accept(this, context); } }); - - return reload; } } diff --git a/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/reload/ProfiledResourceReload.java b/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/reload/ProfiledResourceReload.java index f10fc74e..d4002c39 100644 --- a/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/reload/ProfiledResourceReload.java +++ b/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/reload/ProfiledResourceReload.java @@ -15,9 +15,9 @@ public class ProfiledResourceReload extends SimpleResourceReload { - public static ResourceReload start(ResourceManager manager, List reloaders, Executor backgroundExecutor, Executor mainThreadExecutor, CompletableFuture initialTask) { + public static ResourceReload start(ResourceManager manager, List reloaders, Executor backgroundExecutor, Executor mainThreadExecutor, CompletableFuture initialTask, Runnable finalTask) { ProfiledResourceReload reload = new ProfiledResourceReload(); - reload.start(manager, reloaders, backgroundExecutor, mainThreadExecutor, TASK_FACTORY, initialTask); + reload.start(manager, reloaders, backgroundExecutor, mainThreadExecutor, TASK_FACTORY, initialTask, finalTask); return reload; } diff --git a/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/reload/SimpleResourceReload.java b/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/reload/SimpleResourceReload.java index de2bcb4f..1b895392 100644 --- a/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/reload/SimpleResourceReload.java +++ b/libraries/resource-loader/src/main/java/net/ornithemc/osl/resource/loader/impl/resource/reload/SimpleResourceReload.java @@ -19,9 +19,9 @@ public class SimpleResourceReload implements ResourceReload { - public static ResourceReload start(ResourceManager manager, List reloaders, Executor backgroundExecutor, Executor mainThreadExecutor, CompletableFuture initialTask) { + public static ResourceReload start(ResourceManager manager, List reloaders, Executor backgroundExecutor, Executor mainThreadExecutor, CompletableFuture initialTask, Runnable finalTask) { SimpleResourceReload reload = new SimpleResourceReload<>(); - reload.start(manager, reloaders, backgroundExecutor, mainThreadExecutor, TaskFactory.SIMPLE, initialTask); + reload.start(manager, reloaders, backgroundExecutor, mainThreadExecutor, TaskFactory.SIMPLE, initialTask, finalTask); return reload; } @@ -40,11 +40,14 @@ public static ResourceReload start(ResourceManager manager, List> result; - void start(ResourceManager manager, List reloaders, Executor backgroundExecutor, Executor mainThreadExecutor, TaskFactory taskFactory, CompletableFuture initialTask) { + void start(ResourceManager manager, List reloaders, Executor backgroundExecutor, Executor mainThreadExecutor, TaskFactory taskFactory, CompletableFuture initialTask, Runnable finalTask) { this.runningReloaders.addAll(reloaders); this.reloaderCount = reloaders.size(); - this.result = this.startTasks(manager, reloaders, backgroundExecutor, mainThreadExecutor, taskFactory, initialTask); + this.result = this.startTasks(manager, reloaders, backgroundExecutor, mainThreadExecutor, taskFactory, initialTask).thenApplyAsync(results -> { + finalTask.run(); + return results; + }, mainThreadExecutor); } CompletableFuture> startTasks(ResourceManager manager, List reloaders, Executor backgroundExecutor, Executor mainThreadExecutor, TaskFactory taskFactory, CompletableFuture initialTask) {