package utils; public class Cooldown { private long seconds; private long whenStarted; private final long NEVER = 0; public Cooldown(long seconds) throws IllegalArgumentException { if (seconds < 1) throw new IllegalArgumentException("Number of seconds must be greater than zero."); this.seconds = seconds; this.whenStarted = 0; } public long length() { return seconds; } public void start() { whenStarted = CurrentTime.inSeconds(); } public void stop() { whenStarted = NEVER; } public boolean isActive() { setInactiveIfExpired(); return whenStarted != NEVER; } private void setInactiveIfExpired() { if (whenStarted != NEVER && timeElapsed() > seconds) whenStarted = NEVER; } private long timeElapsed() { return CurrentTime.inSeconds() - whenStarted; } public long remainingSeconds() { if ( !isActive() ) return 0; return whenStarted + seconds - CurrentTime.inSeconds(); } public long nextCooldownFromNow() { return CurrentTime.inSeconds() + seconds; } }