package tc.oc.pgm.time;
import javax.annotation.Nullable;
import javax.inject.Inject;
import org.bukkit.World;
import java.time.Instant;
import tc.oc.commons.bukkit.util.NMSHacks;
import tc.oc.time.Clock;
/**
* Quantizes time to the ticks of the given World. Guaranteed to return the same
* time over the duration of any tick.
*/
public class WorldTickClock implements Clock, TickClock {
private final World world;
private @Nullable TickTime now;
@Inject public WorldTickClock(World world) {
this.world = world;
}
@Override
public Instant instant() {
return now().instant;
}
@Override
public TickTime now() {
long tick = NMSHacks.getMonotonicTime(this.world);
if(this.now == null || tick != this.now.tick) {
this.now = new TickTime(tick, Instant.now());
}
return this.now;
}
}