package com.thebrokenrail.energonrelics.energy.core.util; import com.thebrokenrail.energonrelics.energy.core.EnergyProviderBlockEntity; import net.minecraft.world.World; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; public class EnergyTicker { private static final List scheduled = new ArrayList<>(); public static void schedule(EnergyProviderBlockEntity provider) { scheduled.add(provider); } public static void tick(World world) { if (Objects.requireNonNull(world.getServer()).getThread() != Thread.currentThread()) { scheduled.clear(); } else { List started = new ArrayList<>(); List temp = new ArrayList<>(scheduled); List temp2 = new ArrayList<>(); while (!temp.isEmpty()) { for (EnergyProviderBlockEntity provider : temp) { if (!started.contains(provider)) { temp2.addAll(provider.startTick()); started.add(provider); } } temp.clear(); temp.addAll(temp2); temp2.clear(); } Collections.shuffle(started); for (EnergyProviderBlockEntity provider : started) { provider.logicTick(); } } } }