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 new file mode 100644 index 00000000..ce0fd2a8 --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/UtilMixin_Optimize.java @@ -0,0 +1,29 @@ +package io.izzel.arclight.common.mixin.optimization.general; + +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; + +@Mixin(Util.class) +public class UtilMixin_Optimize { + + /** + * @author IzzelAliz + * @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; + }); + } +} diff --git a/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json b/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json index f87ff0d6..13fd117f 100644 --- a/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json +++ b/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json @@ -8,6 +8,7 @@ "ClassInheritanceMultiMapMixin", "EntityDataManagerMixin_Optimize", "MobMixin_Optimization", + "UtilMixin_Optimize", "VoxelShapesMixin", "activationrange.ActivationRangeMixin", "activationrange.EntityMixin_ActivationRange",