From 594816bb7d3178c3f28316c8f08a76c5dbfc0bd0 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Thu, 28 Oct 2021 22:07:43 +0200 Subject: [PATCH] Initialisation refactoring Signed-off-by: Lixfel --- .../de/steamwar/fightsystem/ArenaMode.java | 2 +- .../de/steamwar/fightsystem/FightSystem.java | 39 ++++--------------- .../fightsystem/commands/GamemodeCommand.java | 9 +++++ .../countdown/PostSchemCountdown.java | 2 +- .../steamwar/fightsystem/fight/FightTeam.java | 5 ++- .../fightsystem/utils/FightStatistics.java | 31 ++++++++++++--- .../steamwar/fightsystem/utils/FightUI.java | 3 ++ 7 files changed, 51 insertions(+), 40 deletions(-) diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/ArenaMode.java b/FightSystem_Core/src/de/steamwar/fightsystem/ArenaMode.java index ab7cd09..fff8a95 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/ArenaMode.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/ArenaMode.java @@ -52,5 +52,5 @@ public enum ArenaMode { public static final Set Restartable = Collections.unmodifiableSet(EnumSet.of(NORMAL, RANKED, REPLAY)); public static final Set SoloLeader = Collections.unmodifiableSet(EnumSet.of(TEST, CHECK, PREPARE)); public static final Set NotOnBau = Collections.unmodifiableSet(EnumSet.complementOf(EnumSet.of(TEST, CHECK, PREPARE, REPLAY))); - public static final Set VariableTime = Collections.unmodifiableSet(EnumSet.complementOf(EnumSet.of(TEST, CHECK, REPLAY))); + public static final Set SeriousFight = Collections.unmodifiableSet(EnumSet.complementOf(EnumSet.of(TEST, CHECK, REPLAY))); } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java index ba1a906..28ab5e5 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java @@ -19,7 +19,6 @@ package de.steamwar.fightsystem; -import de.steamwar.core.CommandRemover; import de.steamwar.fightsystem.commands.*; import de.steamwar.fightsystem.countdown.*; import de.steamwar.fightsystem.event.HellsBells; @@ -30,7 +29,6 @@ import de.steamwar.fightsystem.listener.Shutdown; import de.steamwar.fightsystem.listener.*; import de.steamwar.fightsystem.record.*; import de.steamwar.fightsystem.states.FightState; -import de.steamwar.fightsystem.states.OneShotStateDependent; import de.steamwar.fightsystem.utils.*; import de.steamwar.fightsystem.winconditions.*; import de.steamwar.message.Message; @@ -40,8 +38,6 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; -import java.util.logging.Level; - public class FightSystem extends JavaPlugin { private static FightSystem plugin; @@ -50,6 +46,7 @@ public class FightSystem extends JavaPlugin { private Message message; private FightTeam lastWinner; + private String lastWinreason; @Override public void onLoad() { @@ -92,6 +89,7 @@ public class FightSystem extends JavaPlugin { new TechHider(); new FightWorld(); new FightUI(); + new FightStatistics(); new BungeeFightInfo(); new WinconditionAllDead(); @@ -122,6 +120,7 @@ public class FightSystem extends JavaPlugin { new RemoveCommand(); new AcceptCommand(); new DeclineCommand(); + new GamemodeCommand(); new InviteCommand(); new ReadyCommand(); new AkCommand(); @@ -135,17 +134,6 @@ public class FightSystem extends JavaPlugin { new LiveRecorder(); new FileRecorder(); - new OneShotStateDependent(ArenaMode.AntiReplay, FightState.PreRunning, () -> FightUI.addSubtitle("UI_PRE_RUNNING")); - new OneShotStateDependent(ArenaMode.AntiReplay, FightState.Running, () -> FightUI.addSubtitle("UI_RUNNING")); - new OneShotStateDependent(ArenaMode.AntiTest, FightState.Running, FightStatistics::start); - - try { - CommandRemover.removeAll("gamemode"); - CommandInjector.injectCommand(new GamemodeCommand()); - } catch (Exception e) { - getLogger().log(Level.SEVERE, "Failed to replace commands", e); - } - REntity.initWatchers(); if(Config.mode == ArenaMode.EVENT) { @@ -167,9 +155,6 @@ public class FightSystem extends JavaPlugin { public static void setPreLeaderState() { FightState.setFightState(FightState.PRE_LEADER_SETUP); - - Fight.getBlueTeam().reset(); - Fight.getRedTeam().reset(); } public static void setPreSchemState() { @@ -190,22 +175,10 @@ public class FightSystem extends JavaPlugin { public static void setSpectateState(FightTeam winFightTeam, String winreason, String subtitle, Object... params) { plugin.lastWinner = winFightTeam; + plugin.lastWinreason = winreason; FightUI.printWin(winFightTeam, subtitle, params); FightState.setFightState(FightState.SPECTATE); - - if(!Config.test() && !PacketProcessor.isReplaying()){ - if(Config.mode == ArenaMode.EVENT) { - if (winFightTeam == null) - getEventFight().setErgebnis(0); - else if (winFightTeam.isBlue()) - getEventFight().setErgebnis(1); - else - getEventFight().setErgebnis(2); - } - - FightStatistics.saveStats(winFightTeam, winreason); - } } public static void setEventLeiter(Player el){ @@ -241,6 +214,10 @@ public class FightSystem extends JavaPlugin { return plugin.lastWinner; } + public static String getLastWinreason() { + return plugin.lastWinreason; + } + public static void shutdown() { //Staggered kick to prevent lobby overloading if(Bukkit.getOnlinePlayers().isEmpty()){ diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java index b14cc94..dc7b306 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java @@ -20,6 +20,7 @@ package de.steamwar.fightsystem.commands; import com.google.common.collect.ImmutableList; +import de.steamwar.core.CommandRemover; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import net.md_5.bungee.api.ChatMessageType; @@ -31,6 +32,7 @@ import org.bukkit.util.StringUtil; import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; public class GamemodeCommand extends BukkitCommand { @@ -42,6 +44,13 @@ public class GamemodeCommand extends BukkitCommand { List aliases = new ArrayList<>(); aliases.add("gm"); this.setAliases(aliases); + + try { + CommandRemover.removeAll("gamemode"); + CommandInjector.injectCommand(this); + } catch (Exception e) { + FightSystem.getPlugin().getLogger().log(Level.SEVERE, "Failed to replace commands", e); + } } @Override diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java index 812637c..0f7147e 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java @@ -30,7 +30,7 @@ public class PostSchemCountdown extends Countdown { public PostSchemCountdown() { super(Config.SetupDuration, new Message("POST_SCHEM_COUNTDOWN"), null, false); - new StateDependentCountdown(ArenaMode.VariableTime, FightState.PostSchemSetup, this); + new StateDependentCountdown(ArenaMode.SeriousFight, FightState.PostSchemSetup, this); } @Override diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java index 2732319..df2e78b 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java @@ -28,6 +28,7 @@ import de.steamwar.fightsystem.listener.FightScoreboard; import de.steamwar.fightsystem.listener.PersonalKitCreator; import de.steamwar.fightsystem.record.GlobalRecorder; import de.steamwar.fightsystem.states.FightState; +import de.steamwar.fightsystem.states.OneShotStateDependent; import de.steamwar.fightsystem.states.StateDependent; import de.steamwar.fightsystem.utils.*; import de.steamwar.inventory.SWItem; @@ -90,6 +91,8 @@ public class FightTeam { BountifulWrapper.impl.setNametagVisibility(team); team.setNameTagVisibility(NameTagVisibility.HIDE_FOR_OTHER_TEAMS); team.setAllowFriendlyFire(false); + + new OneShotStateDependent(ArenaMode.All, FightState.PreLeaderSetup, () -> Bukkit.getScheduler().runTask(FightSystem.getPlugin(), this::reset)); } public void setPrefixAndName(String prefix, String name){ @@ -149,7 +152,7 @@ public class FightTeam { return false; } - public void reset(){ + public void reset() { skip = false; ready = false; schematic.reset(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightStatistics.java b/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightStatistics.java index 6cee3e2..25bef85 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightStatistics.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightStatistics.java @@ -27,6 +27,8 @@ import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightPlayer; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.record.FileRecorder; +import de.steamwar.fightsystem.states.FightState; +import de.steamwar.fightsystem.states.OneShotStateDependent; import de.steamwar.fightsystem.winconditions.Wincondition; import de.steamwar.sql.Elo; import de.steamwar.sql.Schematic; @@ -42,16 +44,33 @@ import static de.steamwar.sql.Fight.create; import static de.steamwar.sql.Fight.setReplay; public class FightStatistics { - private FightStatistics(){} - private static Timestamp starttime = Timestamp.from(Instant.now()); private static final int K = 20; - public static void start(){ + private Timestamp starttime = Timestamp.from(Instant.now()); + + public FightStatistics() { + new OneShotStateDependent(ArenaMode.SeriousFight, FightState.Running, this::enable); + new OneShotStateDependent(ArenaMode.Event, FightState.Spectate, this::setEventResult); + new OneShotStateDependent(ArenaMode.SeriousFight, FightState.Spectate, this::disable); + } + + private void enable(){ starttime = Timestamp.from(Instant.now()); } - public static void saveStats(FightTeam winner, String windescription){ + private void setEventResult() { + if (FightSystem.getLastWinner() == null) + FightSystem.getEventFight().setErgebnis(0); + else if (FightSystem.getLastWinner().isBlue()) + FightSystem.getEventFight().setErgebnis(1); + else + FightSystem.getEventFight().setErgebnis(2); + } + + private void disable() { + FightTeam winner = FightSystem.getLastWinner(); + String windescription = FightSystem.getLastWinreason(); String gameMode = Config.SchematicType.toDB(); int blueLeader = getLeader(Fight.getBlueTeam()); @@ -120,7 +139,7 @@ public class FightStatistics { } } - private static int getLeader(FightTeam team){ + private int getLeader(FightTeam team){ if(team.getLeader() != null) return SteamwarUser.get(team.getLeader().getPlayer().getUniqueId()).getId(); else if(team.getDesignatedLeader() != null) @@ -128,7 +147,7 @@ public class FightStatistics { return 0; } - private static void savePlayerStats(FightPlayer fp, int fightId){ + private void savePlayerStats(FightPlayer fp, int fightId){ SteamwarUser user = SteamwarUser.get(fp.getPlayer().getUniqueId()); de.steamwar.sql.FightPlayer.create(fightId, user.getId(), fp.getTeam().isBlue(), fp.getKit().getName(), fp.getKills(), !fp.isLiving()); } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightUI.java b/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightUI.java index 211dec3..ee3532f 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightUI.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightUI.java @@ -27,6 +27,7 @@ import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.record.GlobalRecorder; import de.steamwar.fightsystem.states.FightState; +import de.steamwar.fightsystem.states.OneShotStateDependent; import de.steamwar.fightsystem.states.StateDependentCountdown; import de.steamwar.fightsystem.states.StateDependentTask; import de.steamwar.fightsystem.winconditions.Wincondition; @@ -51,6 +52,8 @@ public class FightUI { new StateDependentTask(ArenaMode.AntiReplay, FightState.All, this::update, 20, 20); new StateDependentTask(ArenaMode.All, FightState.All, this::sendToPlayers, 5, 5); new StateDependentTask(ArenaMode.All, FightState.All, this::tpsWatcher, 20, 20); + new OneShotStateDependent(ArenaMode.AntiReplay, FightState.PreRunning, () -> addSubtitle("UI_PRE_RUNNING")); + new OneShotStateDependent(ArenaMode.AntiReplay, FightState.Running, () -> addSubtitle("UI_RUNNING")); instance = this; }