package com.hypixel.hytale.component.data; import com.hypixel.hytale.component.ArchetypeChunk; import com.hypixel.hytale.component.CommandBuffer; import com.hypixel.hytale.component.task.ParallelRangeTask; import com.hypixel.hytale.component.task.ParallelTask; import com.hypixel.hytale.function.consumer.IntBiObjectConsumer; import java.util.function.IntConsumer; import javax.annotation.Nonnull; import javax.annotation.Nullable; public class ForEachTaskData implements IntConsumer { @Nullable private IntBiObjectConsumer, CommandBuffer> consumer; @Nullable private ArchetypeChunk archetypeChunk; @Nullable private CommandBuffer commandBuffer; public void init( IntBiObjectConsumer, CommandBuffer> consumer, ArchetypeChunk archetypeChunk, CommandBuffer commandBuffer ) { this.consumer = consumer; this.archetypeChunk = archetypeChunk; this.commandBuffer = commandBuffer; } @Override public void accept(int index) { assert this.commandBuffer.setThread(); this.consumer.accept(index, this.archetypeChunk, this.commandBuffer); } public void clear() { this.consumer = null; this.archetypeChunk = null; this.commandBuffer = null; } public static void invokeParallelTask( @Nonnull ParallelTask> parallelTask, @Nonnull CommandBuffer commandBuffer ) { int parallelTaskSize = parallelTask.size(); if (parallelTaskSize > 0) { parallelTask.doInvoke(); for (int x = 0; x < parallelTaskSize; x++) { ParallelRangeTask> systemTask = parallelTask.get(x); int i = 0; for (int systemTaskSize = systemTask.size(); i < systemTaskSize; i++) { ForEachTaskData data = systemTask.get(i); data.commandBuffer.mergeParallel(commandBuffer); data.clear(); } } } } }