minecraft-src/net/minecraft/gametest/framework/GameTestTicker.java
2025-07-04 03:45:38 +03:00

60 lines
1.4 KiB
Java

package net.minecraft.gametest.framework;
import com.google.common.collect.Lists;
import java.util.Collection;
import net.minecraft.Util;
import org.jetbrains.annotations.Nullable;
public class GameTestTicker {
public static final GameTestTicker SINGLETON = new GameTestTicker();
private final Collection<GameTestInfo> testInfos = Lists.<GameTestInfo>newCopyOnWriteArrayList();
@Nullable
private GameTestRunner runner;
private GameTestTicker.State state = GameTestTicker.State.IDLE;
private GameTestTicker() {
}
public void add(GameTestInfo testInfo) {
this.testInfos.add(testInfo);
}
public void clear() {
if (this.state != GameTestTicker.State.IDLE) {
this.state = GameTestTicker.State.HALTING;
} else {
this.testInfos.clear();
if (this.runner != null) {
this.runner.stop();
this.runner = null;
}
}
}
public void setRunner(GameTestRunner runner) {
if (this.runner != null) {
Util.logAndPauseIfInIde("The runner was already set in GameTestTicker");
}
this.runner = runner;
}
public void tick() {
if (this.runner != null) {
this.state = GameTestTicker.State.RUNNING;
this.testInfos.forEach(gameTestInfo -> gameTestInfo.tick(this.runner));
this.testInfos.removeIf(GameTestInfo::isDone);
GameTestTicker.State state = this.state;
this.state = GameTestTicker.State.IDLE;
if (state == GameTestTicker.State.HALTING) {
this.clear();
}
}
}
static enum State {
IDLE,
RUNNING,
HALTING;
}
}