From 20f3b609cb149f35571314748fb9db1f76e3d3d3 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sat, 21 Aug 2021 21:09:57 +0200 Subject: [PATCH] DB-Replayintegration Signed-off-by: Lixfel --- .../de/steamwar/fightsystem/FightSystem.java | 41 +++++++++---------- .../fightsystem/record/FileRecorder.java | 2 +- .../fightsystem/record/FileSource.java | 18 ++++++++ .../fightsystem/states/FightState.java | 1 + .../fightsystem/utils/FightStatistics.java | 10 +++++ 5 files changed, 49 insertions(+), 23 deletions(-) diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java b/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java index 3391b94..1d2b46d 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java @@ -30,10 +30,7 @@ import de.steamwar.fightsystem.fight.FightWorld; import de.steamwar.fightsystem.fight.IFight; import de.steamwar.fightsystem.listener.Shutdown; import de.steamwar.fightsystem.listener.*; -import de.steamwar.fightsystem.record.FileRecorder; -import de.steamwar.fightsystem.record.GlobalRecorder; -import de.steamwar.fightsystem.record.LiveRecorder; -import de.steamwar.fightsystem.record.PacketProcessor; +import de.steamwar.fightsystem.record.*; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.OneShotStateDependent; import de.steamwar.fightsystem.utils.EnterHandler; @@ -109,7 +106,6 @@ public class FightSystem extends JavaPlugin { new RankedPlayerLeftWincondition(); new WinconditionPercentTimeout(); - //noinspection InstantiationOfUtilityClass new HellsBells(); new NoPlayersOnlineCountdown(); @@ -160,6 +156,7 @@ public class FightSystem extends JavaPlugin { } }else if(Config.mode == ArenaMode.REPLAY) { FightWorld.forceLoad(); + FileSource.startReplay(); } } @@ -192,26 +189,26 @@ public class FightSystem extends JavaPlugin { } public static void setSpectateState(FightTeam winFightTeam, String windescription) { + if(!PacketProcessor.isReplaying()){ + if(winFightTeam != null) { + Bukkit.broadcastMessage(PREFIX + "§aDas Team " + winFightTeam.getColoredName() + " §ahat gewonnen!"); + } else { + Bukkit.broadcastMessage(PREFIX + "§aKein Team hat gewonnen!"); + } + } + FightState.setFightState(FightState.SPECTATE); - if(PacketProcessor.isReplaying()) - return; - if(winFightTeam != null) { - Bukkit.broadcastMessage(PREFIX + "§aDas Team " + winFightTeam.getColoredName() + " §ahat gewonnen!"); - } else { - Bukkit.broadcastMessage(PREFIX + "§aKein Team hat gewonnen!"); - } + 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); + } - if(Config.mode == ArenaMode.EVENT) { - if (winFightTeam == null) - getEventFight().setErgebnis(0); - else if (winFightTeam.isBlue()) - getEventFight().setErgebnis(1); - else - getEventFight().setErgebnis(2); - } - - if(!Config.test()){ FightStatistics.saveStats(winFightTeam, windescription); } } diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/record/FileRecorder.java b/FightSystem_Main/src/de/steamwar/fightsystem/record/FileRecorder.java index 9552bb0..d1d3ce4 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/record/FileRecorder.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/record/FileRecorder.java @@ -37,7 +37,7 @@ public class FileRecorder extends StateDependent implements Recorder { } public FileRecorder(){ - super(ArenaMode.AntiReplay, FightState.Schem); + super(ArenaMode.AntiReplay, FightState.Recording); } @Override diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/record/FileSource.java b/FightSystem_Main/src/de/steamwar/fightsystem/record/FileSource.java index 28d0e03..8ecb428 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/record/FileSource.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/record/FileSource.java @@ -19,17 +19,35 @@ package de.steamwar.fightsystem.record; +import de.steamwar.fightsystem.Config; import org.bukkit.Bukkit; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; import java.util.logging.Level; import java.util.zip.GZIPInputStream; public class FileSource extends PacketSource { + public static void startReplay() { + if(Config.replayserver()) + return; + + try { + Files.copy( + de.steamwar.sql.Fight.getReplay(Config.ReplayID), + FileRecorder.getFile().toPath(), + StandardCopyOption.REPLACE_EXISTING); + new FileSource(FileRecorder.getFile()); + } catch (IOException e) { + throw new SecurityException("Could not start replay", e); + } + } + public FileSource(File fightFile) throws IOException { super(new DataInputStream(new GZIPInputStream(new FileInputStream(fightFile)))); } diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/states/FightState.java b/FightSystem_Main/src/de/steamwar/fightsystem/states/FightState.java index 93f00a6..84deb25 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/states/FightState.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/states/FightState.java @@ -42,6 +42,7 @@ public enum FightState { public static final Set Ingame = Collections.unmodifiableSet(EnumSet.of(PRE_RUNNING, RUNNING)); public static final Set TeamFix = Collections.unmodifiableSet(EnumSet.of(PRE_RUNNING, RUNNING, SPECTATE)); public static final Set Schem = Collections.unmodifiableSet(EnumSet.complementOf(EnumSet.of(PRE_LEADER_SETUP, PRE_SCHEM_SETUP))); + public static final Set Recording = Collections.unmodifiableSet(EnumSet.complementOf(EnumSet.of(PRE_LEADER_SETUP, PRE_SCHEM_SETUP, SPECTATE))); public static final Set AntiRunning = Collections.unmodifiableSet(EnumSet.complementOf(EnumSet.of(RUNNING))); public static final Set AntiSpectate = Collections.unmodifiableSet(EnumSet.complementOf(EnumSet.of(SPECTATE))); diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/utils/FightStatistics.java b/FightSystem_Main/src/de/steamwar/fightsystem/utils/FightStatistics.java index 4e7928f..3075e68 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/utils/FightStatistics.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/utils/FightStatistics.java @@ -19,23 +19,27 @@ package de.steamwar.fightsystem.utils; +import de.steamwar.fightsystem.ArenaMode; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.countdown.Countdown; 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.winconditions.Wincondition; import de.steamwar.sql.Elo; import de.steamwar.sql.Schematic; import de.steamwar.sql.SteamwarUser; import org.bukkit.Bukkit; +import java.nio.file.Files; import java.sql.Timestamp; import java.time.Instant; import java.util.logging.Level; import static de.steamwar.sql.Fight.create; +import static de.steamwar.sql.Fight.setReplay; public class FightStatistics { private FightStatistics(){} @@ -92,6 +96,12 @@ public class FightStatistics { savePlayerStats(fp, fightId); for (FightPlayer fp : Fight.getRedTeam().getPlayers()) savePlayerStats(fp, fightId); + + setReplay(fightId, Files.readAllBytes(FileRecorder.getFile().toPath())); + + if(ArenaMode.Event.contains(Config.mode)){ + FightSystem.getEventFight().setFight(fightId); + } }catch(Exception e){ Bukkit.getLogger().log(Level.SEVERE, "Failed to save statistics", e); }