package com.mengcraft.protect.manager;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
public class TickManager {
private final static TickManager MANAGER = new TickManager();
private final Task task = new Task();
private final List<Double> tps = new ArrayList<>();
private long last = System.currentTimeMillis();
public TickManager() {
tps.add(20.0);
}
private class Task implements Runnable {
public void run() {
BigDecimal tick = new BigDecimal("1200");
BigDecimal per = new BigDecimal(System.currentTimeMillis() - getLast());
BigDecimal second = per.divide(new BigDecimal("1000"), 4, RoundingMode.HALF_UP);
double tps = tick.divide(second, 2, RoundingMode.HALF_UP).doubleValue();
List<Double> recent = getTps();
recent.add(0, tps > 20 ? 20 : tps);
if (recent.size() > 3) {
recent.remove(3);
}
setLast(System.currentTimeMillis());
};
}
public static TickManager getManager() {
return MANAGER;
}
public Task getTask() {
return task;
}
public List<Double> getTps() {
return tps;
}
private long getLast() {
return last;
}
private void setLast(long last) {
this.last = last;
}
}