From 46a97e779c9bd970a2354ed20ad60aae46626727 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sat, 23 Oct 2021 08:43:58 +0200 Subject: [PATCH] More Multiling Signed-off-by: Lixfel --- .../de/steamwar/fightsystem/FightSystem.java | 23 ++--- .../fightsystem/FightSystem.properties | 31 +++++++ .../de/steamwar/fightsystem/commands/GUI.java | 6 +- .../fightsystem/commands/GamemodeCommand.java | 1 - .../fightsystem/commands/WinCommand.java | 6 +- .../fightsystem/countdown/Countdown.java | 17 ++-- .../countdown/EnternCountdown.java | 10 +-- .../countdown/EventSpectateCountdown.java | 8 +- .../countdown/NoPlayersOnlineCountdown.java | 8 +- .../countdown/PostSchemCountdown.java | 8 +- .../countdown/PreRunningCountdown.java | 8 +- .../countdown/PreSchemCountdown.java | 8 +- .../countdown/SpectateOverCountdown.java | 8 +- .../countdown/TimeOverCountdown.java | 8 +- .../fightsystem/event/HellsBells.java | 9 +- .../steamwar/fightsystem/fight/FightTeam.java | 11 ++- .../steamwar/fightsystem/listener/Chat.java | 18 ++-- .../fightsystem/listener/IngameDeath.java | 4 +- .../fightsystem/listener/Permanent.java | 1 + .../fightsystem/record/PacketProcessor.java | 68 +++++++++++--- .../steamwar/fightsystem/record/Recorder.java | 90 +++++++++++-------- .../fightsystem/utils/FightStatistics.java | 4 +- .../steamwar/fightsystem/utils/FightUI.java | 27 +++--- .../steamwar/fightsystem/utils/Message.java | 38 ++++++++ .../EventTeamOffWincondition.java | 4 +- .../RankedPlayerLeftWincondition.java | 2 +- .../winconditions/Wincondition.java | 4 +- .../winconditions/WinconditionAllDead.java | 2 +- .../WinconditionCaptainDead.java | 2 +- .../WinconditionHeartRatioTimeout.java | 6 +- .../WinconditionPercentSystem.java | 2 +- .../WinconditionPercentTimeout.java | 6 +- .../winconditions/WinconditionPoints.java | 6 +- .../WinconditionPumpkinTechKO.java | 2 +- .../WinconditionRelativePercent.java | 2 +- .../winconditions/WinconditionTimeTechKO.java | 11 +-- .../winconditions/WinconditionTimeout.java | 2 +- .../WinconditionWaterTechKO.java | 2 +- 38 files changed, 278 insertions(+), 195 deletions(-) create mode 100644 FightSystem_Core/src/de/steamwar/fightsystem/utils/Message.java diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java index 6c45bfd..96a5d88 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java @@ -44,7 +44,6 @@ import java.util.logging.Level; public class FightSystem extends JavaPlugin { - public static final String PREFIX = "§eArena§8» "; private static FightSystem plugin; private static EventFight eventFight; private static Player eventLeiter; @@ -133,8 +132,8 @@ public class FightSystem extends JavaPlugin { new LiveRecorder(); new FileRecorder(); - new OneShotStateDependent(ArenaMode.AntiReplay, FightState.PreRunning, () -> FightUI.addSubtitle("§7Kits verteilt")); - new OneShotStateDependent(ArenaMode.AntiReplay, FightState.Running, () -> FightUI.addSubtitle("§aArena freigegeben")); + 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 { @@ -186,14 +185,8 @@ public class FightSystem extends JavaPlugin { FightState.setFightState(FightState.RUNNING); } - public static void setSpectateState(FightTeam winFightTeam, String windescription, String subtitle) { - if(!PacketProcessor.isReplaying()){ - if(winFightTeam != null) { - FightUI.printWin(winFightTeam.getPrefix() + "Sieg " + winFightTeam.getName(), subtitle); - } else { - FightUI.printWin("§7Unentschieden", subtitle); - } - } + public static void setSpectateState(FightTeam winFightTeam, String winreason, String subtitle, Object... params) { + FightUI.printWin(winFightTeam, subtitle, params); FightState.setFightState(FightState.SPECTATE); @@ -207,7 +200,7 @@ public class FightSystem extends JavaPlugin { getEventFight().setErgebnis(2); } - FightStatistics.saveStats(winFightTeam, windescription); + FightStatistics.saveStats(winFightTeam, winreason); } } @@ -231,9 +224,9 @@ public class FightSystem extends JavaPlugin { return plugin; } - public static void broadcast(String message) { - Bukkit.broadcastMessage(PREFIX + message); - GlobalRecorder.getInstance().systemChat(PREFIX + message); + public static void broadcast(String msg, Object... params) { + getMessage().broadcast(msg, params); + GlobalRecorder.getInstance().system(msg, params); } public static Message getMessage() { diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties index 81bc2f7..bdbdfcf 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties @@ -155,10 +155,14 @@ PREPARE_SCHEM_DELETED= PREPARE_ACTIVE_PISTON=§cIm Teambereich wurden sich noch bewegende Pistons gefunden, Einsenden wird abgebrochen. PREPARE_FAILED_SAVING=§cDie Schematic konnte nicht gespeichert werden, Einsenden wird abgebrochen. PREPARE_SENT_IN=§aDie Schematic wird nun zeitnah von einem Teammitglied überprüft +PARTICIPANT_CHAT={0} {1}§8» §7{2} +FIGHTLEADER_CHAT=§e{0}§8» §e{1} +SPECTATOR_CHAT=§7{0}§8» §7{1} # Replay REPLAY_ENDS=§cReplay beendet +OLD_STRING={0} # States @@ -168,6 +172,33 @@ COMMAND_CURRENTLY_UNAVAILABLE= # Utils TPS_WARNING=§c{0} §7TPS +UI_PRE_RUNNING=§7Kits verteilt +UI_RUNNING=§aArena freigegeben +UI_SKIP=§7Sprung zum nächsten Ereignis +UI_PLAYER_JOINS=§a§l» {0}{1} +UI_PLAYER_LEAVES=§c§l« {0}{1} +UI_LEADER_JOINS=§a§l» {0}Leader {1} +UI_PLAYER_DEATH={0}{1} §7ist gestorben +UI_PLAYER_LEAVE={0}{1} §7hat den Kampf verlassen +UI_ELO=§7ELO von {0}{1}§8: §7{2}§8»§e{3} +UI_WIN={0}Sieg {1} +UI_DRAW=§7Unentschieden + # Winconditions HELLS_BELLS_COUNTDOWN=bis die Bomben fallen +TECHKO_COUNTDOWN=bis {0} §7einen Schuss abgegeben haben muss + +WIN_FIGHTLEADER="§7Kampfleiterentscheidung" +WIN_PERCENT={0} §7zu beschädigt +WIN_OFFLINE_BOTH=§7Beide Teams offline +WIN_OFFLINE={0} §7offline +WIN_RANKED_LEFT={0} §7hat den Kampf verlassen +WIN_ALL_DEAD={0}Alle Spieler kampfunfähig +WIN_LEADER_DEAD={0} kampfunfähig +WIN_TIME_OVER=§7Zeit abgelaufen +WIN_MORE_HEALTH={0}Mehr verbleibende Leben +WIN_LESS_DAMAGE={0} §7weniger beschädigt +WIN_POINTS={0} hat mehr Punkte +WIN_POINTS_EQUAL=§7Gleicher Punktestand +WIN_TECHKO={0} §7ist Tech K.O. diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java index c71723f..a4bebff 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java @@ -77,9 +77,9 @@ public class GUI { inv.setItem(2, Material.GLASS, msg.parse("STATE_POST_SCHEM_SETUP", p), (ClickType click) -> FightSystem.setPostSchemState()); inv.setItem(3, Material.GLASS, msg.parse("STATE_PRE_RUNNING", p), (ClickType click) -> FightSystem.setPreRunningState()); inv.setItem(4, Material.GLASS, msg.parse("STATE_RUNNING", p), (ClickType click) -> FightSystem.setRunningState()); - inv.setItem(5, Material.GLASS, msg.parse("STATE_SPECTATE_WIN", p, Fight.getBlueTeam().getColoredName()), (ClickType click) -> FightSystem.setSpectateState(Fight.getBlueTeam(), "operator", null)); - inv.setItem(6, Material.GLASS, msg.parse("STATE_SPECTATE_WIN", p, Fight.getRedTeam().getColoredName()), (ClickType click) -> FightSystem.setSpectateState(Fight.getRedTeam(), "operator", null)); - inv.setItem(7, Material.GLASS, msg.parse("STATE_SPECTATE_TIE", p), (ClickType click) -> FightSystem.setSpectateState(null, "operator", null)); + inv.setItem(5, Material.GLASS, msg.parse("STATE_SPECTATE_WIN", p, Fight.getBlueTeam().getColoredName()), (ClickType click) -> FightSystem.setSpectateState(Fight.getBlueTeam(), "operator", "WIN_FIGHTLEADER")); + inv.setItem(6, Material.GLASS, msg.parse("STATE_SPECTATE_WIN", p, Fight.getRedTeam().getColoredName()), (ClickType click) -> FightSystem.setSpectateState(Fight.getRedTeam(), "operator", "WIN_FIGHTLEADER")); + inv.setItem(7, Material.GLASS, msg.parse("STATE_SPECTATE_TIE", p), (ClickType click) -> FightSystem.setSpectateState(null, "operator", "WIN_FIGHTLEADER")); inv.setCallback(-999, (ClickType click) -> p.closeInventory()); inv.open(); } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java index b5484cf..b14cc94 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java @@ -50,7 +50,6 @@ public class GamemodeCommand extends BukkitCommand { return false; }else if (args.length == 0) { FightSystem.getMessage().sendPrefixless("GAMEMODE_HELP", sender); - sender.sendMessage(FightSystem.PREFIX + this.usageMessage); return false; } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/WinCommand.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/WinCommand.java index 9384c9a..979a181 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/WinCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/WinCommand.java @@ -35,11 +35,11 @@ public class WinCommand implements CommandExecutor { } if(args[0].equalsIgnoreCase("tie")){ - FightSystem.setSpectateState(null, "Referee", "§7Kampfleiterentscheidung"); + FightSystem.setSpectateState(null, "Referee", "WIN_FIGHTLEADER"); }else if(args[0].equalsIgnoreCase(Fight.getBlueTeam().getName())){ - FightSystem.setSpectateState(Fight.getBlueTeam(), "Referee", "§7Kampfleiterentscheidung"); + FightSystem.setSpectateState(Fight.getBlueTeam(), "Referee", "WIN_FIGHTLEADER"); }else if(args[0].equalsIgnoreCase(Fight.getRedTeam().getName())){ - FightSystem.setSpectateState(Fight.getRedTeam(), "Referee", "§7Kampfleiterentscheidung"); + FightSystem.setSpectateState(Fight.getRedTeam(), "Referee", "WIN_FIGHTLEADER"); } return false; } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/Countdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/Countdown.java index 9a74910..5449e17 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/Countdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/Countdown.java @@ -23,6 +23,7 @@ import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.record.GlobalRecorder; import de.steamwar.fightsystem.utils.FightUI; +import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.SWSound; import net.md_5.bungee.api.ChatMessageType; import org.bukkit.Bukkit; @@ -37,6 +38,8 @@ public abstract class Countdown { private static final List currentCountdowns = new ArrayList<>(); + protected final Message appendix; + private final int totalTime; protected final Sound sound; private final boolean level; @@ -44,12 +47,12 @@ public abstract class Countdown { protected int time; private BukkitTask task = null; - public abstract String countdownCounting(); public abstract void countdownFinished(); - protected Countdown(int time, SWSound sound, boolean level) { + protected Countdown(int time, Message appendix, SWSound sound, boolean level) { this.totalTime = time; this.time = time; + this.appendix = appendix; this.sound = sound != null ? sound.getSound() : null; this.level = level; } @@ -86,19 +89,19 @@ public abstract class Countdown { countdown.show(); } - FightUI.addSubtitle("§7Sprung zum nächsten Ereignis"); + FightUI.addSubtitle("UI_SKIP"); } - public static void sendCountdownMessage(Player p, String message, int displaytime, String appendix) { - FightSystem.getMessage().sendPrefixless(message, p, ChatMessageType.ACTION_BAR, displaytime, FightSystem.getMessage().parse(appendix, p)); + public static void sendCountdownMessage(Player p, String message, int displaytime, Message appendix) { + FightSystem.getMessage().sendPrefixless(message, p, ChatMessageType.ACTION_BAR, displaytime, FightSystem.getMessage().parse(appendix.getMsg(), p, appendix.getParams())); } protected void broadcast(String message, int divisor){ if(this.sound != null && divisor == 1) Fight.playSound(this.sound, 100.0F, 1.0F); - GlobalRecorder.getInstance().countdown(message, divisor, countdownCounting()); - Bukkit.getOnlinePlayers().forEach(p -> sendCountdownMessage(p, message, time / divisor, countdownCounting())); + GlobalRecorder.getInstance().countdown(message, divisor, appendix); + Bukkit.getOnlinePlayers().forEach(p -> sendCountdownMessage(p, message, time / divisor, appendix)); } protected void prepareFinish() {} diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EnternCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EnternCountdown.java index 1ecc374..e4acee0 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EnternCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EnternCountdown.java @@ -22,6 +22,7 @@ package de.steamwar.fightsystem.countdown; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.FightPlayer; +import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.TechHider; import net.md_5.bungee.api.ChatMessageType; @@ -34,16 +35,11 @@ public class EnternCountdown extends Countdown { private List chunkPos; public EnternCountdown(FightPlayer fp) { - super(Config.EnterStages.get(fp.getKit().getEnterStage()), SWSound.BLOCK_NOTE_PLING, false); + super(Config.EnterStages.get(fp.getKit().getEnterStage()), new Message("ENTERN_COUNTDOWN"), SWSound.BLOCK_NOTE_PLING, false); fightPlayer = fp; enable(); } - @Override - public String countdownCounting() { - return "ENTERN_COUNTDOWN"; - } - @Override public void countdownFinished() { FightSystem.getMessage().sendPrefixless("ENTERN_ALLOWED", fightPlayer.getPlayer(), ChatMessageType.ACTION_BAR); @@ -58,6 +54,6 @@ public class EnternCountdown extends Countdown { @Override protected void broadcast(String message, int divisor) { fightPlayer.getPlayer().playSound(fightPlayer.getPlayer().getLocation(), sound, 100.0f, 1.0f); - sendCountdownMessage(fightPlayer.getPlayer(), message, time / divisor, countdownCounting()); + sendCountdownMessage(fightPlayer.getPlayer(), message, time / divisor, appendix); } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EventSpectateCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EventSpectateCountdown.java index 485db37..03342fc 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EventSpectateCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EventSpectateCountdown.java @@ -24,20 +24,16 @@ import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentCountdown; +import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.SWSound; public class EventSpectateCountdown extends Countdown { public EventSpectateCountdown() { - super(Config.SpectatorDuration, SWSound.BLOCK_NOTE_PLING, false); + super(Config.SpectatorDuration, new Message("SHUTDOWN_COUNTDOWN"), SWSound.BLOCK_NOTE_PLING, false); new StateDependentCountdown(ArenaMode.Event, FightState.Spectate, this); } - @Override - public String countdownCounting() { - return "SHUTDOWN_COUNTDOWN"; - } - @Override public void countdownFinished() { FightSystem.shutdown(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java index 3b688f1..11cb3c9 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java @@ -24,6 +24,7 @@ import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentCountdown; import de.steamwar.fightsystem.states.StateDependentListener; +import de.steamwar.fightsystem.utils.Message; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -32,7 +33,7 @@ import org.bukkit.event.player.PlayerJoinEvent; public class NoPlayersOnlineCountdown extends Countdown implements Listener { public NoPlayersOnlineCountdown() { - super(Config.NoPlayerOnlineDuration, null, false); + super(Config.NoPlayerOnlineDuration, new Message("SHUTDOWN_COUNTDOWN"), null, false); new StateDependentListener(ArenaMode.AntiReplay, FightState.PreLeaderSetup, this); new StateDependentCountdown(ArenaMode.AntiReplay, FightState.PreLeaderSetup, this) { @@ -44,11 +45,6 @@ public class NoPlayersOnlineCountdown extends Countdown implements Listener { }; } - @Override - public String countdownCounting() { - return "SHUTDOWN_COUNTDOWN"; - } - @EventHandler public void handlePlayerJoin(PlayerJoinEvent event) { disable(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java index 70c3f79..7a58bbc 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java @@ -24,19 +24,15 @@ import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentCountdown; +import de.steamwar.fightsystem.utils.Message; public class PostSchemCountdown extends Countdown { public PostSchemCountdown() { - super(Config.SetupDuration, null, false); + super(Config.SetupDuration, new Message("POST_SCHEM_COUNTDOWN"), null, false); new StateDependentCountdown(ArenaMode.AntiTest, FightState.PostSchemSetup, this); } - @Override - public String countdownCounting() { - return "POST_SCHEM_COUNTDOWN"; - } - @Override public void countdownFinished() { FightSystem.setPreRunningState(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java index faca110..87984b1 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java @@ -24,20 +24,16 @@ import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentCountdown; +import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.SWSound; public class PreRunningCountdown extends Countdown { public PreRunningCountdown() { - super(Config.PreFightDuration, SWSound.BLOCK_NOTE_PLING, true); + super(Config.PreFightDuration, new Message("PRE_RUNNING_COUNTDOWN"), SWSound.BLOCK_NOTE_PLING, true); new StateDependentCountdown(ArenaMode.AntiReplay, FightState.PreRunning, this); } - @Override - public String countdownCounting() { - return "PRE_RUNNING_COUNTDOWN"; - } - @Override public void countdownFinished() { FightSystem.setRunningState(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreSchemCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreSchemCountdown.java index 61547c9..b88378f 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreSchemCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreSchemCountdown.java @@ -24,20 +24,16 @@ import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentCountdown; +import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.SWSound; public class PreSchemCountdown extends Countdown { public PreSchemCountdown() { - super(Config.PreSchemPasteDuration, SWSound.BLOCK_NOTE_PLING, false); + super(Config.PreSchemPasteDuration, new Message("PRE_SCHEM_COUNTDOWN"), SWSound.BLOCK_NOTE_PLING, false); new StateDependentCountdown(ArenaMode.AntiReplay, FightState.PreSchemSetup, this); } - @Override - public String countdownCounting() { - return "PRE_SCHEM_COUNTDOWN"; - } - @Override public void countdownFinished() { FightSystem.setPostSchemState(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java index 9d330c7..67bcfb3 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java @@ -24,20 +24,16 @@ import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentCountdown; +import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.SWSound; public class SpectateOverCountdown extends Countdown { public SpectateOverCountdown() { - super(Config.SpectatorDuration, SWSound.BLOCK_NOTE_PLING, false); + super(Config.SpectatorDuration, new Message("SPECTATE_COUNTDOWN"), SWSound.BLOCK_NOTE_PLING, false); new StateDependentCountdown(ArenaMode.Restartable, FightState.Spectate, this); } - @Override - public String countdownCounting() { - return "SPECTATE_COUNTDOWN"; - } - @Override public void countdownFinished() { FightSystem.setPreLeaderState(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java index 14d269b..3e2dde8 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java @@ -20,6 +20,7 @@ package de.steamwar.fightsystem.countdown; import de.steamwar.fightsystem.Config; +import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.SWSound; public class TimeOverCountdown extends Countdown { @@ -27,15 +28,10 @@ public class TimeOverCountdown extends Countdown { private final Runnable timeOver; public TimeOverCountdown(Runnable timeOver) { - super(Config.TimeoutTime, SWSound.BLOCK_NOTE_BASS, false); + super(Config.TimeoutTime, new Message("RUNNING_COUNTDOWN"), SWSound.BLOCK_NOTE_BASS, false); this.timeOver = timeOver; } - @Override - public String countdownCounting() { - return "RUNNING_COUNTDOWN"; - } - @Override public void countdownFinished() { timeOver.run(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/event/HellsBells.java b/FightSystem_Core/src/de/steamwar/fightsystem/event/HellsBells.java index da03e38..fbce5a5 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/event/HellsBells.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/event/HellsBells.java @@ -24,6 +24,7 @@ import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.countdown.Countdown; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependent; +import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.winconditions.Winconditions; import org.bukkit.Bukkit; @@ -124,13 +125,9 @@ public class HellsBells { } private class HellsBellsCountdown extends Countdown { - public HellsBellsCountdown(int time) { - super(time, SWSound.BLOCK_NOTE_BASS, true); - } - @Override - public String countdownCounting() { - return "HELLS_BELLS_COUNTDOWN"; + public HellsBellsCountdown(int time) { + super(time, new Message("HELLS_BELLS_COUNTDOWN"), SWSound.BLOCK_NOTE_BASS, true); } @Override diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java index 5ff517e..8b85300 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java @@ -216,7 +216,7 @@ public class FightTeam { if(isLeaderless()) setLeader(fightPlayer); else - FightUI.addSubtitle("§a§l» " + prefix + player.getName()); + FightUI.addSubtitle("UI_PLAYER_JOINS", prefix, player.getName()); } public void removePlayer(Player player) { @@ -227,7 +227,7 @@ public class FightTeam { players.remove(player); team.removeEntry(player.getName()); - FightUI.addSubtitle("§c§l« " + prefix + player.getName()); + FightUI.addSubtitle("UI_PLAYER_LEAVES", prefix, player.getName()); if(fightPlayer.equals(leader)) removeLeader(); @@ -271,7 +271,7 @@ public class FightTeam { if(ready) setReady(false); - FightUI.addSubtitle("§a§l» " + prefix + "Leader " + leader.getPlayer().getName()); + FightUI.addSubtitle("UI_LEADER_JOINS", prefix, leader.getPlayer().getName()); Optional maxRank = Schematic.getSchemsOfType(leader.getPlayer().getUniqueId(), Config.SchematicType).stream().map(Schematic::getRank).max(Integer::compare); if(Config.RanksEnabled) @@ -418,6 +418,11 @@ public class FightTeam { return color; } + @Override + public String toString() { + return name; + } + private class KitLoader extends StateDependent { private KitLoader() { super(ArenaMode.AntiReplay, FightState.Ingame); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/Chat.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/Chat.java index fa5ab7f..c562a60 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/Chat.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/Chat.java @@ -19,7 +19,6 @@ package de.steamwar.fightsystem.listener; -import de.steamwar.core.BountifulWrapper; import de.steamwar.fightsystem.ArenaMode; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; @@ -28,10 +27,6 @@ import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.record.GlobalRecorder; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentListener; -import net.md_5.bungee.api.ChatMessageType; -import net.md_5.bungee.api.chat.BaseComponent; -import net.md_5.bungee.api.chat.TextComponent; -import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -57,20 +52,19 @@ public class Chat implements Listener { if(message.startsWith(Config.TeamChatDetection)) { fightTeam.broadcastChat(player, message.substring(1)); } else { - broadcastChat(teamName + " " + player.getName() + "§8» §7" + message); + broadcastChat("PARTICIPANT_CHAT", teamName, player.getName(), message); } }else if(player == FightSystem.getEventLeiter()){ - broadcastChat("§e" + player.getName() + "§8» §e" + message); + broadcastChat("FIGHTLEADER_CHAT", player.getName(), message); }else{ - broadcastChat("§7" + player.getName() + "§8» §7" + message); + broadcastChat("SPECTATOR_CHAT", player.getName(), message); } event.setCancelled(true); } - private void broadcastChat(String message) { - GlobalRecorder.getInstance().chat(message); - BaseComponent[] msg = TextComponent.fromLegacyText(message); - Bukkit.getOnlinePlayers().forEach(p -> BountifulWrapper.impl.sendMessage(p, ChatMessageType.CHAT, msg)); + private void broadcastChat(String message, Object... params) { + GlobalRecorder.getInstance().chat(message, params); + FightSystem.getMessage().chat(message, params); } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/IngameDeath.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/IngameDeath.java index 430e043..822380e 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/IngameDeath.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/IngameDeath.java @@ -52,7 +52,7 @@ public class IngameDeath implements Listener { if(team == null) return; - FightUI.addSubtitle(team.getPrefix() + player.getName() + " §7ist gestorben"); + FightUI.addSubtitle("UI_PLAYER_DEATH", team.getPrefix(), player.getName()); Fight.playSound(SWSound.ENTITY_WITHER_DEATH.getSound(), 100.0F, 1.0F); Bukkit.getScheduler().runTask(FightSystem.getPlugin(), () -> team.getFightPlayer(player).setOut()); } @@ -70,7 +70,7 @@ public class IngameDeath implements Listener { if(!fightPlayer.isLiving()) return; - FightUI.addSubtitle(team.getPrefix() + player.getName() + " §7hat den Kampf verlassen"); + FightUI.addSubtitle("UI_PLAYER_LEAVE", team.getPrefix(), player.getName()); Bukkit.getScheduler().runTask(FightSystem.getPlugin(), () -> team.getFightPlayer(player).setOut()); } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java index da9c245..1b242a0 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java @@ -21,6 +21,7 @@ package de.steamwar.fightsystem.listener; import de.steamwar.fightsystem.ArenaMode; import de.steamwar.fightsystem.Config; +import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.record.REntity; diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java b/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java index ba988e9..3541258 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java @@ -30,6 +30,7 @@ import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.fight.FreezeWorld; import de.steamwar.fightsystem.listener.FightScoreboard; +import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.utils.*; import de.steamwar.sql.Schematic; import de.steamwar.sql.Team; @@ -105,6 +106,8 @@ public class PacketProcessor { packetDecoder[0xa1] = () -> send(ChatMessageType.ACTION_BAR); packetDecoder[0xa2] = () -> send(ChatMessageType.SYSTEM); packetDecoder[0xa3] = this::countdown; + packetDecoder[0xa4] = this::chat; + packetDecoder[0xa5] = this::system; packetDecoder[0xb0] = () -> pasteSchem(Fight.getBlueTeam()); packetDecoder[0xb1] = () -> pasteSchem(Fight.getRedTeam()); packetDecoder[0xb2] = this::teams; @@ -115,6 +118,8 @@ public class PacketProcessor { packetDecoder[0xc2] = this::bossBar; packetDecoder[0xc3] = this::subtitle; packetDecoder[0xc4] = this::printWin; + packetDecoder[0xc5] = this::messageSubtitle; + packetDecoder[0xc6] = this::winMessage; packetDecoder[0xef] = source::readUTF; packetDecoder[0xff] = this::tick; @@ -125,6 +130,41 @@ public class PacketProcessor { task = Bukkit.getScheduler().runTaskTimer(FightSystem.getPlugin(), this::process, 1, 1); } + private void winMessage() throws IOException { + byte team = source.readByte(); + Message message = readMessage(); + + execSync(() -> { + FightTeam winner = null; + if(team == 0x01) + winner = Fight.getBlueTeam(); + else if(team == 0x02) + winner = Fight.getRedTeam(); + + if(Config.replayserver() || ArenaMode.AntiReplay.contains(Config.mode)) { + FightSystem.setSpectateState(winner, "Replay ends", message.getMsg(), message.getParams()); + }else{ + FightUI.printWin(winner, message.getMsg(), message.getParams()); + new EventSpectateCountdown().enable(); + } + }); + } + + private void system() throws IOException { + Message message = readMessage(); + FightSystem.getMessage().broadcast(message.getMsg(), message.getParams()); + } + + private void messageSubtitle() throws IOException { + Message message = readMessage(); + FightUI.addSubtitle(message.getMsg(), message.getParams()); + } + + private void chat() throws IOException { + Message message = readMessage(); + FightSystem.getMessage().chat(message.getMsg(), message.getParams()); + } + private void runSync() { synchronized (syncList) { for(Runnable runnable : syncList) { @@ -242,7 +282,7 @@ public class PacketProcessor { private void countdown() throws IOException { String message = source.readUTF(); int displaytime = source.readInt(); - String appendix = source.readUTF(); + Message appendix = readMessage(); Bukkit.getOnlinePlayers().forEach(p -> Countdown.sendCountdownMessage(p, message, displaytime, appendix)); } @@ -384,25 +424,28 @@ public class PacketProcessor { private void subtitle() throws IOException { String subtitle = source.readUTF(); - FightUI.addSubtitle(subtitle); + FightUI.addSubtitle("OLD_STRING", subtitle); } private void printWin() throws IOException { String title = source.readUTF(); String subtitle = source.readUTF(); - FightUI.printWin(title, subtitle); - } - - private void endReplay(){ - REntity.dieAll(); - freezer.disable(); + Bukkit.getOnlinePlayers().forEach(p -> { + p.resetTitle(); + WorldOfColorWrapper.impl.sendTitle(p, title, subtitle, 5, 40, 5); + }); if(Config.replayserver() || ArenaMode.AntiReplay.contains(Config.mode)) { - FightSystem.setSpectateState(null, "Replay ends", null); + FightState.setFightState(FightState.SPECTATE); }else{ - FightSystem.getMessage().broadcast("REPLAY_ENDS"); new EventSpectateCountdown().enable(); } + } + + private void endReplay() { + REntity.dieAll(); + freezer.disable(); + FightSystem.getMessage().broadcast("REPLAY_ENDS"); replaying = false; } @@ -460,7 +503,8 @@ public class PacketProcessor { } } - private Object[] readMessageParams() throws IOException { + private Message readMessage() throws IOException { + String msg = source.readUTF(); List params = new ArrayList<>(); int type; @@ -495,7 +539,7 @@ public class PacketProcessor { } } while(type != 0x00); - return params.toArray(); + return new Message(msg, params.toArray()); } private interface PacketParser{ diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/record/Recorder.java b/FightSystem_Core/src/de/steamwar/fightsystem/record/Recorder.java index 936f74e..5d15e7b 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/record/Recorder.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/record/Recorder.java @@ -27,6 +27,7 @@ import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.utils.BlockIdWrapper; import de.steamwar.fightsystem.utils.CraftbukkitWrapper; +import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.sql.Schematic; import de.steamwar.sql.SteamwarUser; @@ -93,9 +94,9 @@ public interface Recorder { * PlayerItemPacket (0x07) + int EntityId + String item + boolean enchanted + String slot * ArrowSpawnPacket (0x08) + int EntityId * FireballSpawnPacket (0x09) + int EntityId - * BowSpanPacket (0x0A) + int EntityId + boolean start + hand - * PlayerDamagePacket (0x0B) + int EntityId - * SetOnFire (0x0C) + int EntityId + boolean perma + * BowSpanPacket (0x0a) + int EntityId + boolean start + hand + * PlayerDamagePacket (0x0b) + int EntityId + * SetOnFire (0x0c) + int EntityId + boolean perma * * ArenaInfo (0x20) + bool blueNegZ + byte arenaY + int arenaMinX + int arenaMinZ * @@ -107,22 +108,26 @@ public interface Recorder { * ShortBlockPacket (0x35) + pos relative to ArenaMinX,BluePasteY,ArenaMinZ byte, byte, byte + short BlockState * * - * ChatPacket (0xA0) + String message - * DEPRECATED ActionBarPacket (0xA1) + String message - * SystemPacket (0xA2) + String message - * CountdownPacket (0xA3) + String message, int displaytime, String appendix + * DEPRECATED ChatPacket (0xa0) + String message + * DEPRECATED ActionBarPacket (0xa1) + String message + * DEPRECATED SystemPacket (0xa2) + String message + * CountdownPacket (0xa3) + String message, int displaytime, Message appendix + * ChatPacket (0xa4) + Message + * SystemPacket (0xa5) + Message * - * BlueSchemPacket (0xB0) + int blueSchemId - * RedSchemPacket (0xB1) + int redSchemId - * TeamIDPacket (0xB2) + int blueTeamId, redTeamId - * BlueEmbeddedSchemPacket (0xB3) + int blueSchemId + gzipt NBT blob - * RedEmbeddedSchemPacket (0xB4) + int redSchemId + gzipt NBT blob + * BlueSchemPacket (0xb0) + int blueSchemId + * RedSchemPacket (0xb1) + int redSchemId + * TeamIDPacket (0xb2) + int blueTeamId, redTeamId + * BlueEmbeddedSchemPacket (0xb3) + int blueSchemId + gzipt NBT blob + * RedEmbeddedSchemPacket (0xb4) + int redSchemId + gzipt NBT blob * - * DEPRECATED ScoreboardTitlePacket (0xC0) + String scoreboardTitle - * DEPRECATED ScoreboardDataPacket (0xC1) + String key + int value - * BossBarPacket (0xC2) + double leftBlueProgress, leftRedProgress + String leftBlueText, leftRedText - * SubtitlePacket (0xC3) + String subtitle - * PrintWinPacket (0xC4) + String title, subtitle + * DEPRECATED ScoreboardTitlePacket (0xc0) + String scoreboardTitle + * DEPRECATED ScoreboardDataPacket (0xc1) + String key + int value + * BossBarPacket (0xc2) + double leftBlueProgress, leftRedProgress + String leftBlueText, leftRedText + * DEPRECATED SubtitlePacket (0xc3) + String subtitle + * DEPRECATED PrintWinPacket (0xc4) + String title, subtitle + * SubtitlePacket (0xc5) + Message + * WinPacket (0xc6) + byte team + Message subtitle * * CommentPacket (0xfe) + String comment * TickPacket (0xff) @@ -236,18 +241,18 @@ public interface Recorder { write(0x34, soundType, volume, pitch); } - default void chat(String s) { - write(0xa0, s); - } - - default void systemChat(String s) { - write(0xa2, s); - } - - default void countdown(String message, int displaytime, String appendix) { + default void countdown(String message, int displaytime, Message appendix) { write(0xa3, message, displaytime, appendix); } + default void chat(String msg, Object... params) { + write(0xa4, new Message(msg, params)); + } + + default void system(String msg, Object... params) { + write(0xa5, new Message(msg, params)); + } + default void teamIds(int blueTeamId, int redTeamId) { write(0xb2, blueTeamId, redTeamId); } @@ -280,16 +285,27 @@ public interface Recorder { write(embedId, schemId, buffer.toByteArray()); } + static void copy(InputStream input, OutputStream output) throws IOException { + int bytes; + for(byte[] buffer = new byte[8192]; (bytes = input.read(buffer)) > 0;) { + output.write(buffer, 0, bytes); + } + } + default void bossBar(double leftBlueProgress, double leftRedProgress, String leftBlueText, String leftRedText) { write(0xc2, leftBlueProgress, leftRedProgress, leftBlueText, leftRedText); } - default void subtitle(String subtitle) { - write(0xc3, subtitle); + default void subtitle(Message subtitle) { + write(0xc5, subtitle); } - default void printWin(String title, String subtitle) { - write(0xc4, title, subtitle); + default void winMessage(FightTeam team, String subtitle, Object... params) { + byte bTeam = 0x00; + if(team != null) { + bTeam = (byte) (team.isBlue() ? 0x01 : 0x02); + } + write(0xc6, bTeam, new Message(subtitle, params)); } default void tick(){ @@ -327,13 +343,15 @@ public interface Recorder { stream.writeUTF((String)o); else if(o instanceof byte[]) stream.write((byte[])o); + else if(o instanceof Message) + writeMessage(stream, (Message) o); else throw new SecurityException("Undefined write for: " + o.getClass().getName()); } - default void writeMessage(DataOutputStream stream, String message, Object... params) throws IOException { - stream.writeUTF(message); - for(Object o : params) { + default void writeMessage(DataOutputStream stream, Message message) throws IOException { + stream.writeUTF(message.getMsg()); + for(Object o : message.getParams()) { if(o instanceof Boolean) stream.writeByte(0x01); else if(o instanceof Byte) @@ -355,10 +373,4 @@ public interface Recorder { stream.writeByte(0x00); } - static void copy(InputStream var0, OutputStream var1) throws IOException { - int var5; - for(byte[] var4 = new byte[8192]; (var5 = var0.read(var4)) > 0;) { - var1.write(var4, 0, var5); - } - } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightStatistics.java b/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightStatistics.java index 9c9eacf..ac6d229 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightStatistics.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightStatistics.java @@ -115,8 +115,8 @@ public class FightStatistics { int newRedElo = (int) Math.round(redElo + K * (1 - blueResult - redWinExpectation)); Elo.setElo(blueLeader, gameMode, newBlueElo); Elo.setElo(redLeader, gameMode, newRedElo); - FightSystem.broadcast("§7ELO von " + Fight.getBlueTeam().getPrefix() + SteamwarUser.get(blueLeader).getUserName() + "§8: §7" + blueElo + "§8Ȥe" + newBlueElo); - FightSystem.broadcast("§7ELO von " + Fight.getRedTeam().getPrefix() + SteamwarUser.get(redLeader).getUserName() + "§8: §7" + redElo + "§8Ȥe" + newRedElo); + FightSystem.broadcast("UI_ELO", Fight.getBlueTeam().getPrefix(), SteamwarUser.get(blueLeader).getUserName(), blueElo, newBlueElo); + FightSystem.broadcast("UI_ELO", Fight.getRedTeam().getPrefix(), SteamwarUser.get(redLeader).getUserName(), redElo, newRedElo); } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightUI.java b/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightUI.java index cf8f3fe..da9df62 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightUI.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/utils/FightUI.java @@ -169,27 +169,30 @@ public class FightUI { } - private static final Queue queue = new LinkedList<>(); + private static final Queue queue = new LinkedList<>(); private static boolean subtitleScheduled = false; - public static void printWin(String title, String winreason) { + public static void printWin(FightTeam winner, String subtitle, Object... params) { queue.clear(); - FightSystem.getPlugin().getLogger().log(Level.INFO, title + " " + winreason); - GlobalRecorder.getInstance().printWin(title, winreason); - Bukkit.getOnlinePlayers().forEach(p -> { - p.resetTitle(); - WorldOfColorWrapper.impl.sendTitle(p, title, winreason, 5, 40, 5); - }); + FightSystem.getPlugin().getLogger().log(Level.INFO, winner + " " + FightSystem.getMessage().parse(subtitle, null, params)); + GlobalRecorder.getInstance().winMessage(winner, subtitle, params); + + Bukkit.getOnlinePlayers().forEach(Player::resetTitle); + if (winner != null) + Bukkit.getOnlinePlayers().forEach(p -> WorldOfColorWrapper.impl.sendTitle(p, FightSystem.getMessage().parse("UI_WIN", p, winner.getColor(), winner.getName()), FightSystem.getMessage().parse(subtitle, p, params), 5, 40, 5)); + else + Bukkit.getOnlinePlayers().forEach(p -> WorldOfColorWrapper.impl.sendTitle(p, FightSystem.getMessage().parse("UI_DRAW", p), FightSystem.getMessage().parse(subtitle, p, params), 5, 40, 5)); } - public static void addSubtitle(String message) { + public static void addSubtitle(String msg, Object... params) { if(FightState.Spectate.contains(FightState.getFightState())) return; + Message message = new Message(msg, params); queue.add(message); GlobalRecorder.getInstance().subtitle(message); - FightSystem.getPlugin().getLogger().log(Level.INFO, message); + FightSystem.getPlugin().getLogger().log(Level.INFO, FightSystem.getMessage().parse(msg, null, params)); if(!subtitleScheduled) printSubtitle(); @@ -200,9 +203,9 @@ public class FightUI { subtitleScheduled = false; return; } - String message = queue.poll(); + Message message = queue.poll(); - Bukkit.getOnlinePlayers().forEach(p -> WorldOfColorWrapper.impl.sendTitle(p, "", message, 5, 40, 5)); + Bukkit.getOnlinePlayers().forEach(p -> WorldOfColorWrapper.impl.sendTitle(p, "", FightSystem.getMessage().parse(message.getMsg(), p, message.getParams()), 5, 40, 5)); Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), FightUI::printSubtitle, 50); subtitleScheduled = true; } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/utils/Message.java b/FightSystem_Core/src/de/steamwar/fightsystem/utils/Message.java new file mode 100644 index 0000000..a142a7e --- /dev/null +++ b/FightSystem_Core/src/de/steamwar/fightsystem/utils/Message.java @@ -0,0 +1,38 @@ +/* + This file is a part of the SteamWar software. + + Copyright (C) 2021 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.fightsystem.utils; + +public class Message { + private final String msg; + private final Object[] params; + + public Message(String msg, Object... params) { + this.msg = msg; + this.params = params; + } + + public String getMsg() { + return msg; + } + + public Object[] getParams() { + return params; + } +} diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/EventTeamOffWincondition.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/EventTeamOffWincondition.java index 6d30380..e71a468 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/EventTeamOffWincondition.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/EventTeamOffWincondition.java @@ -33,7 +33,7 @@ public class EventTeamOffWincondition extends Wincondition{ @Override public void enable() { if(Fight.getBlueTeam().allPlayersOut() && Fight.getRedTeam().allPlayersOut()){ - win(null, "§7Beide Teams offline"); + win(null, "WIN_OFFLINE_BOTH"); }else{ teamOff(Fight.getBlueTeam()); teamOff(Fight.getRedTeam()); @@ -49,7 +49,7 @@ public class EventTeamOffWincondition extends Wincondition{ private void teamOff(FightTeam team){ if(team.allPlayersOut()){ - win(Fight.getOpposite(team), team.getColoredName() + " §7offline"); + win(Fight.getOpposite(team), "WIN_OFFLINE", team.getColoredName()); } } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/RankedPlayerLeftWincondition.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/RankedPlayerLeftWincondition.java index 9a1b9ba..33f3045 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/RankedPlayerLeftWincondition.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/RankedPlayerLeftWincondition.java @@ -44,7 +44,7 @@ public class RankedPlayerLeftWincondition extends Wincondition implements Listen return; if(team.isPlayerLeader(player)) { - win(Fight.getOpposite(team), team.getPrefix() + team.getLeader().getPlayer().getName() + " §7hat den Kampf verlassen"); + win(Fight.getOpposite(team), "WIN_RANKED_LEFT", team.getPrefix() + team.getLeader().getPlayer().getName()); } } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Wincondition.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Wincondition.java index 871019e..06f4138 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Wincondition.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Wincondition.java @@ -47,8 +47,8 @@ public abstract class Wincondition { return timeOverCountdown.getCountdown(); } - protected void win(FightTeam team, String subtitle){ - FightSystem.setSpectateState(team, windescription, subtitle); + protected void win(FightTeam team, String subtitle, Object... params){ + FightSystem.setSpectateState(team, windescription, subtitle, params); } protected FightTeam isTarget(Player player){ diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionAllDead.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionAllDead.java index 15479fd..882b9ad 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionAllDead.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionAllDead.java @@ -57,6 +57,6 @@ public class WinconditionAllDead extends Wincondition implements Listener { return; } - win(Fight.getOpposite(team), team.getPrefix() + "Alle Spieler kampfunfähig"); + win(Fight.getOpposite(team), "WIN_ALL_DEAD", team.getPrefix()); } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java index 4db4948..6bbaf0e 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionCaptainDead.java @@ -52,7 +52,7 @@ public class WinconditionCaptainDead extends Wincondition implements Listener { return; if(team.isPlayerLeader(player)) { - win(Fight.getOpposite(team), team.getPrefix() + team.getLeader().getPlayer().getName() + " kampfunfähig"); + win(Fight.getOpposite(team), "WIN_LEADER_DEAD", team.getPrefix() + team.getLeader().getPlayer().getName()); } } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionHeartRatioTimeout.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionHeartRatioTimeout.java index 6c36956..35d705f 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionHeartRatioTimeout.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionHeartRatioTimeout.java @@ -39,11 +39,11 @@ public class WinconditionHeartRatioTimeout extends Wincondition { double redHeartRatio = Fight.getRedTeam().getHeartRatio(); if(blueHeartRatio > redHeartRatio) { - win(Fight.getBlueTeam(), Fight.getBlueTeam().getPrefix() + "Mehr verbleibende Leben"); + win(Fight.getBlueTeam(), "WIN_MORE_HEALTH", Fight.getBlueTeam().getPrefix()); }else if(blueHeartRatio < redHeartRatio){ - win(Fight.getRedTeam(), Fight.getRedTeam().getPrefix() + "Mehr verbleibende Leben"); + win(Fight.getRedTeam(), "WIN_MORE_HEALTH", Fight.getRedTeam().getPrefix()); }else{ - win(null, "§7Zeit abgelaufen"); + win(null, "WIN_TIME_OVER"); } } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercentSystem.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercentSystem.java index 6610031..0d815ea 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercentSystem.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercentSystem.java @@ -91,7 +91,7 @@ public class WinconditionPercentSystem extends Wincondition implements Listener, destroyedBlocks += event.blockList().size(); percent = (double)destroyedBlocks * 100 / volume; if(percent >= Config.PercentWin) { - win(Fight.getOpposite(team), team.getColoredName() + " §7zu beschädigt"); + win(Fight.getOpposite(team), "WIN_PERCENT", team.getColoredName()); } } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercentTimeout.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercentTimeout.java index 2dc96c0..0d8b4f4 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercentTimeout.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPercentTimeout.java @@ -39,11 +39,11 @@ public class WinconditionPercentTimeout extends Wincondition { double redPercent = Wincondition.percentWincondition.getPercent(Fight.getRedTeam()); if(bluePercent > redPercent) { - win(Fight.getRedTeam(), Fight.getRedTeam().getColoredName() + " §7weniger beschädigt"); + win(Fight.getRedTeam(), "WIN_LESS_DAMAGE", Fight.getRedTeam().getColoredName()); }else if(bluePercent < redPercent){ - win(Fight.getBlueTeam(), Fight.getBlueTeam().getColoredName() + " §7weniger beschädigt"); + win(Fight.getBlueTeam(), "WIN_LESS_DAMAGE", Fight.getBlueTeam().getColoredName()); }else{ - win(null, "§7Zeit abgelaufen"); + win(null, "WIN_TIME_OVER"); } } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPoints.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPoints.java index 6430a17..7daf91d 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPoints.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPoints.java @@ -69,11 +69,11 @@ public class WinconditionPoints extends Wincondition implements PrintableWincond int bluePoints = teamMap.get(Fight.getBlueTeam()).getPoints(); if(bluePoints < redPoints) { - win(Fight.getRedTeam(), Fight.getRedTeam().getPrefix() + " hat mehr Punkte"); + win(Fight.getRedTeam(), "WIN_POINTS", Fight.getRedTeam().getPrefix()); }else if(bluePoints > redPoints){ - win(Fight.getBlueTeam(), Fight.getBlueTeam().getPrefix() + " hat mehr Punkte"); + win(Fight.getBlueTeam(), "WIN_POINTS", Fight.getBlueTeam().getPrefix()); }else{ - win(null, "§7Gleicher Punktestand"); + win(null, "WIN_POINTS_EQUAL"); } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPumpkinTechKO.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPumpkinTechKO.java index 82db796..036f3b8 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPumpkinTechKO.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionPumpkinTechKO.java @@ -76,7 +76,7 @@ public class WinconditionPumpkinTechKO extends Wincondition implements Printable }); if(pumpkins == 0) { - win(Fight.getOpposite(team), team.getColoredName() + " ist Tech K.O."); + win(Fight.getOpposite(team), "WIN_TECHKO", team.getColoredName()); } } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionRelativePercent.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionRelativePercent.java index 219d1cd..8eaa0ae 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionRelativePercent.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionRelativePercent.java @@ -99,7 +99,7 @@ public class WinconditionRelativePercent extends Wincondition implements Printab return; if(getPercent() >= Config.PercentWin){ - FightSystem.setSpectateState(Fight.getOpposite(team), "RelativePercent", team.getColoredName() + " §7zu beschädigt"); + FightSystem.setSpectateState(Fight.getOpposite(team), "RelativePercent", "WIN_PERCENT", team.getColoredName()); } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeTechKO.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeTechKO.java index 88fbf70..f1f6577 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeTechKO.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeTechKO.java @@ -25,6 +25,7 @@ import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentTask; +import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.SWSound; import org.bukkit.Bukkit; import org.bukkit.World; @@ -108,20 +109,14 @@ public class WinconditionTimeTechKO extends Wincondition { private final FightTeam team; public TechKOCountdown(FightTeam team, int countdownTime) { - super(countdownTime, SWSound.BLOCK_NOTE_PLING, false); + super(countdownTime, new Message("TECHKO_COUNTDOWN", team.getColoredName()), SWSound.BLOCK_NOTE_PLING, false); this.team = team; super.enable(); } - @Override - public final String countdownCounting() { - //TODO: ARRRG! - return "bis " + team.getColoredName() + " §feinen Schuss abgegeben haben muss!"; - } - @Override public void countdownFinished() { - win(Fight.getOpposite(team), team.getColoredName() + " ist Tech K.O."); + win(Fight.getOpposite(team), "WIN_TECHKO", team.getColoredName()); } } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeout.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeout.java index f720f8a..3207fee 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeout.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeout.java @@ -34,6 +34,6 @@ public class WinconditionTimeout extends Wincondition { } protected void timeOver() { - win(null, "§7Zeit abgelaufen"); + win(null, "WIN_TIME_OVER"); } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionWaterTechKO.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionWaterTechKO.java index 9367406..4a7b05c 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionWaterTechKO.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionWaterTechKO.java @@ -73,7 +73,7 @@ public class WinconditionWaterTechKO extends Wincondition implements PrintableWi }); if(water == 0){ - win(Fight.getOpposite(team), team.getColoredName() + " ist Tech K.O."); + win(Fight.getOpposite(team), "WIN_TECHKO", team.getColoredName()); } } }