diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/UtilMixin_Optimize.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/UtilMixin_Optimize.java index ce0fd2a8..9b5ed054 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/UtilMixin_Optimize.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/UtilMixin_Optimize.java @@ -4,7 +4,6 @@ import net.minecraft.Util; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; -import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -16,14 +15,14 @@ public class UtilMixin_Optimize { * @reason original method allocates tons of garbage */ @Overwrite - public static CompletableFuture> sequence(List> futures) { - return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])) - .thenApply(v -> { - var list = new ArrayList(futures.size()); - for (CompletableFuture future : futures) { - list.add(future.join()); - } - return list; - }); + public static CompletableFuture> sequence(List> futures) { + if (futures.isEmpty()) { + return CompletableFuture.completedFuture(List.of()); + } else if (futures.size() == 1) { + return futures.get(0).thenApply(List::of); + } else { + return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])) + .thenApply(it -> futures.stream().map(CompletableFuture::join).toList()); + } } }