package com.thebrokenrail.energonrelics.energy.core.util; 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(EnergyTickable tickable) { scheduled.add(tickable); } public static void tick(World world) { if (Objects.requireNonNull(world.getServer()).getThread() == Thread.currentThread()) { List started = new ArrayList<>(); List temp = new ArrayList<>(scheduled); List temp2 = new ArrayList<>(); while (!temp.isEmpty()) { for (EnergyTickable provider : temp) { if (!started.contains(provider)) { temp2.addAll(provider.startTick()); started.add(provider); } } temp.clear(); temp.addAll(temp2); temp2.clear(); } Collections.shuffle(started); for (EnergyTickable provider : started) { provider.logicTick(); } } scheduled.clear(); } }