This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
EnergonRelics/src/main/java/com/thebrokenrail/energonrelics/energy/core/util/EnergyTicker.java

43 lines
1.3 KiB
Java
Raw Normal View History

2020-07-24 17:25:50 +00:00
package com.thebrokenrail.energonrelics.energy.core.util;
2020-07-26 00:09:03 +00:00
import net.minecraft.world.World;
2020-07-24 17:25:50 +00:00
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
2020-07-26 00:09:03 +00:00
import java.util.Objects;
2020-07-24 17:25:50 +00:00
public class EnergyTicker {
2020-07-26 22:31:05 +00:00
private static final List<EnergyTickable> scheduled = new ArrayList<>();
2020-07-24 17:25:50 +00:00
2020-07-26 22:31:05 +00:00
public static void schedule(EnergyTickable tickable) {
scheduled.add(tickable);
2020-07-24 17:25:50 +00:00
}
2020-07-26 00:09:03 +00:00
public static void tick(World world) {
2020-07-26 22:31:05 +00:00
if (Objects.requireNonNull(world.getServer()).getThread() == Thread.currentThread()) {
List<EnergyTickable> started = new ArrayList<>();
2020-07-24 17:25:50 +00:00
2020-07-26 22:31:05 +00:00
List<EnergyTickable> temp = new ArrayList<>(scheduled);
List<EnergyTickable> temp2 = new ArrayList<>();
2020-07-26 00:09:03 +00:00
while (!temp.isEmpty()) {
2020-07-26 22:31:05 +00:00
for (EnergyTickable provider : temp) {
2020-07-26 00:09:03 +00:00
if (!started.contains(provider)) {
temp2.addAll(provider.startTick());
started.add(provider);
}
2020-07-24 17:25:50 +00:00
}
2020-07-26 00:09:03 +00:00
temp.clear();
temp.addAll(temp2);
temp2.clear();
2020-07-24 17:25:50 +00:00
}
2020-07-26 00:09:03 +00:00
Collections.shuffle(started);
2020-07-26 22:31:05 +00:00
for (EnergyTickable provider : started) {
2020-07-26 00:09:03 +00:00
provider.logicTick();
}
2020-07-24 17:25:50 +00:00
}
2020-07-26 22:31:05 +00:00
scheduled.clear();
2020-07-24 17:25:50 +00:00
}
}