/* * This file is a part of the SteamWar software. * * Copyright (C) 2023 SteamWar.de-Serverteam * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package de.steamwar.towerrun.countdowns; import de.steamwar.towerrun.TowerRun; import de.steamwar.towerrun.state.GameStateToggleListener; import de.steamwar.towerrun.state.GameStates; import lombok.Getter; import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.scheduler.BukkitTask; import java.util.EnumSet; public abstract class Countdown extends GameStateToggleListener { @Setter @Getter protected int time = defaultTime(); protected BukkitTask task; protected Countdown(EnumSet enabledStates) { super(enabledStates); } int defaultTime() { return 0; } void timerEnd() {} boolean timerShouldCancel() { return true; } void run() {} void timerStart() {} void timerReset() {} private void timer() { if (timerShouldCancel()) { time = defaultTime(); timerReset(); } else { if (time == defaultTime()) { timerStart(); } if (time == 0) { timerEnd(); return; } run(); time--; } } @Override public void enable() { task = Bukkit.getScheduler().runTaskTimer(TowerRun.getInstance(), this::timer, 0, 20); } @Override public void disable() { task.cancel(); } }