package tc.oc.commons.core.restart; import javax.annotation.Nullable; import javax.inject.Inject; import java.time.Duration; import tc.oc.commons.core.configuration.ConfigUtils; import tc.oc.commons.core.exception.ExceptionHandler; import tc.oc.minecraft.api.configuration.Configuration; import tc.oc.minecraft.api.configuration.ConfigurationSection; import static com.google.common.base.Preconditions.checkNotNull; public class RestartConfiguration { private final ConfigurationSection config; private final ExceptionHandler<Throwable> exceptionHandler; @Inject RestartConfiguration(Configuration config, ExceptionHandler<Throwable> exceptionHandler) { this.config = checkNotNull(config.getSection("restart")); this.exceptionHandler = exceptionHandler; } public java.time.Duration interval() { return exceptionHandler.flatGet(() -> config.duration("interval")) .orElse(java.time.Duration.ofMinutes(1)); } public @Nullable Duration uptimeLimit() { return ConfigUtils.getDuration(config, "uptime"); } public long memoryLimit() { return config.getLong("memory", 0) * 1024 * 1024; // Megabytes } /** * Maximum time a restart can be deferred after it is requested */ public @Nullable Duration deferTimeout() { return ConfigUtils.getDuration(config, "defer-timeout", null); } /** * Maximum time restart can be delayed after new player connections have been blocked (Bungee only) */ public @Nullable Duration emptyTimeout() { return ConfigUtils.getDuration(config, "empty-timeout", null); } /** * Maximum number of players that can be disconnected in order to restart the server. * This takes priority over empty-timeout. */ public int kickLimit() { return config.getInt("kick-limit", Integer.MAX_VALUE); } }