SteamWar/FightSystem
Archiviert
13
1

More Multiling
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Signed-off-by: Lixfel <agga-games@gmx.de>
Dieser Commit ist enthalten in:
Lixfel 2021-10-23 08:43:58 +02:00
Ursprung 4bf27107c6
Commit 46a97e779c
38 geänderte Dateien mit 278 neuen und 195 gelöschten Zeilen

Datei anzeigen

@ -44,7 +44,6 @@ import java.util.logging.Level;
public class FightSystem extends JavaPlugin { public class FightSystem extends JavaPlugin {
public static final String PREFIX = "§eArena§8» ";
private static FightSystem plugin; private static FightSystem plugin;
private static EventFight eventFight; private static EventFight eventFight;
private static Player eventLeiter; private static Player eventLeiter;
@ -133,8 +132,8 @@ public class FightSystem extends JavaPlugin {
new LiveRecorder(); new LiveRecorder();
new FileRecorder(); new FileRecorder();
new OneShotStateDependent(ArenaMode.AntiReplay, FightState.PreRunning, () -> FightUI.addSubtitle("§7Kits verteilt")); new OneShotStateDependent(ArenaMode.AntiReplay, FightState.PreRunning, () -> FightUI.addSubtitle("UI_PRE_RUNNING"));
new OneShotStateDependent(ArenaMode.AntiReplay, FightState.Running, () -> FightUI.addSubtitle("§aArena freigegeben")); new OneShotStateDependent(ArenaMode.AntiReplay, FightState.Running, () -> FightUI.addSubtitle("UI_RUNNING"));
new OneShotStateDependent(ArenaMode.AntiTest, FightState.Running, FightStatistics::start); new OneShotStateDependent(ArenaMode.AntiTest, FightState.Running, FightStatistics::start);
try { try {
@ -186,14 +185,8 @@ public class FightSystem extends JavaPlugin {
FightState.setFightState(FightState.RUNNING); FightState.setFightState(FightState.RUNNING);
} }
public static void setSpectateState(FightTeam winFightTeam, String windescription, String subtitle) { public static void setSpectateState(FightTeam winFightTeam, String winreason, String subtitle, Object... params) {
if(!PacketProcessor.isReplaying()){ FightUI.printWin(winFightTeam, subtitle, params);
if(winFightTeam != null) {
FightUI.printWin(winFightTeam.getPrefix() + "Sieg " + winFightTeam.getName(), subtitle);
} else {
FightUI.printWin("§7Unentschieden", subtitle);
}
}
FightState.setFightState(FightState.SPECTATE); FightState.setFightState(FightState.SPECTATE);
@ -207,7 +200,7 @@ public class FightSystem extends JavaPlugin {
getEventFight().setErgebnis(2); getEventFight().setErgebnis(2);
} }
FightStatistics.saveStats(winFightTeam, windescription); FightStatistics.saveStats(winFightTeam, winreason);
} }
} }
@ -231,9 +224,9 @@ public class FightSystem extends JavaPlugin {
return plugin; return plugin;
} }
public static void broadcast(String message) { public static void broadcast(String msg, Object... params) {
Bukkit.broadcastMessage(PREFIX + message); getMessage().broadcast(msg, params);
GlobalRecorder.getInstance().systemChat(PREFIX + message); GlobalRecorder.getInstance().system(msg, params);
} }
public static Message getMessage() { public static Message getMessage() {

Datei anzeigen

@ -155,10 +155,14 @@ PREPARE_SCHEM_DELETED=
PREPARE_ACTIVE_PISTON=§cIm Teambereich wurden sich noch bewegende Pistons gefunden, Einsenden wird abgebrochen. 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_FAILED_SAVING=§cDie Schematic konnte nicht gespeichert werden, Einsenden wird abgebrochen.
PREPARE_SENT_IN=§aDie Schematic wird nun zeitnah von einem Teammitglied überprüft 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
REPLAY_ENDS=§cReplay beendet REPLAY_ENDS=§cReplay beendet
OLD_STRING={0}
# States # States
@ -168,6 +172,33 @@ COMMAND_CURRENTLY_UNAVAILABLE=
# Utils # Utils
TPS_WARNING=§c{0} §7TPS 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 # Winconditions
HELLS_BELLS_COUNTDOWN=bis die Bomben fallen 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.

Datei anzeigen

@ -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(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(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(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(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", null)); 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", null)); 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.setCallback(-999, (ClickType click) -> p.closeInventory());
inv.open(); inv.open();
} }

Datei anzeigen

@ -50,7 +50,6 @@ public class GamemodeCommand extends BukkitCommand {
return false; return false;
}else if (args.length == 0) { }else if (args.length == 0) {
FightSystem.getMessage().sendPrefixless("GAMEMODE_HELP", sender); FightSystem.getMessage().sendPrefixless("GAMEMODE_HELP", sender);
sender.sendMessage(FightSystem.PREFIX + this.usageMessage);
return false; return false;
} }

Datei anzeigen

@ -35,11 +35,11 @@ public class WinCommand implements CommandExecutor {
} }
if(args[0].equalsIgnoreCase("tie")){ if(args[0].equalsIgnoreCase("tie")){
FightSystem.setSpectateState(null, "Referee", "§7Kampfleiterentscheidung"); FightSystem.setSpectateState(null, "Referee", "WIN_FIGHTLEADER");
}else if(args[0].equalsIgnoreCase(Fight.getBlueTeam().getName())){ }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())){ }else if(args[0].equalsIgnoreCase(Fight.getRedTeam().getName())){
FightSystem.setSpectateState(Fight.getRedTeam(), "Referee", "§7Kampfleiterentscheidung"); FightSystem.setSpectateState(Fight.getRedTeam(), "Referee", "WIN_FIGHTLEADER");
} }
return false; return false;
} }

Datei anzeigen

@ -23,6 +23,7 @@ import de.steamwar.fightsystem.FightSystem;
import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.Fight;
import de.steamwar.fightsystem.record.GlobalRecorder; import de.steamwar.fightsystem.record.GlobalRecorder;
import de.steamwar.fightsystem.utils.FightUI; import de.steamwar.fightsystem.utils.FightUI;
import de.steamwar.fightsystem.utils.Message;
import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.SWSound;
import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.ChatMessageType;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -37,6 +38,8 @@ public abstract class Countdown {
private static final List<Countdown> currentCountdowns = new ArrayList<>(); private static final List<Countdown> currentCountdowns = new ArrayList<>();
protected final Message appendix;
private final int totalTime; private final int totalTime;
protected final Sound sound; protected final Sound sound;
private final boolean level; private final boolean level;
@ -44,12 +47,12 @@ public abstract class Countdown {
protected int time; protected int time;
private BukkitTask task = null; private BukkitTask task = null;
public abstract String countdownCounting();
public abstract void countdownFinished(); 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.totalTime = time;
this.time = time; this.time = time;
this.appendix = appendix;
this.sound = sound != null ? sound.getSound() : null; this.sound = sound != null ? sound.getSound() : null;
this.level = level; this.level = level;
} }
@ -86,19 +89,19 @@ public abstract class Countdown {
countdown.show(); 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) { 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, p)); FightSystem.getMessage().sendPrefixless(message, p, ChatMessageType.ACTION_BAR, displaytime, FightSystem.getMessage().parse(appendix.getMsg(), p, appendix.getParams()));
} }
protected void broadcast(String message, int divisor){ protected void broadcast(String message, int divisor){
if(this.sound != null && divisor == 1) if(this.sound != null && divisor == 1)
Fight.playSound(this.sound, 100.0F, 1.0F); Fight.playSound(this.sound, 100.0F, 1.0F);
GlobalRecorder.getInstance().countdown(message, divisor, countdownCounting()); GlobalRecorder.getInstance().countdown(message, divisor, appendix);
Bukkit.getOnlinePlayers().forEach(p -> sendCountdownMessage(p, message, time / divisor, countdownCounting())); Bukkit.getOnlinePlayers().forEach(p -> sendCountdownMessage(p, message, time / divisor, appendix));
} }
protected void prepareFinish() {} protected void prepareFinish() {}

Datei anzeigen

@ -22,6 +22,7 @@ package de.steamwar.fightsystem.countdown;
import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.FightSystem;
import de.steamwar.fightsystem.fight.FightPlayer; import de.steamwar.fightsystem.fight.FightPlayer;
import de.steamwar.fightsystem.utils.Message;
import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.SWSound;
import de.steamwar.fightsystem.utils.TechHider; import de.steamwar.fightsystem.utils.TechHider;
import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.ChatMessageType;
@ -34,16 +35,11 @@ public class EnternCountdown extends Countdown {
private List<TechHider.ChunkPos> chunkPos; private List<TechHider.ChunkPos> chunkPos;
public EnternCountdown(FightPlayer fp) { 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; fightPlayer = fp;
enable(); enable();
} }
@Override
public String countdownCounting() {
return "ENTERN_COUNTDOWN";
}
@Override @Override
public void countdownFinished() { public void countdownFinished() {
FightSystem.getMessage().sendPrefixless("ENTERN_ALLOWED", fightPlayer.getPlayer(), ChatMessageType.ACTION_BAR); FightSystem.getMessage().sendPrefixless("ENTERN_ALLOWED", fightPlayer.getPlayer(), ChatMessageType.ACTION_BAR);
@ -58,6 +54,6 @@ public class EnternCountdown extends Countdown {
@Override @Override
protected void broadcast(String message, int divisor) { protected void broadcast(String message, int divisor) {
fightPlayer.getPlayer().playSound(fightPlayer.getPlayer().getLocation(), sound, 100.0f, 1.0f); 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);
} }
} }

Datei anzeigen

@ -24,20 +24,16 @@ import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.FightSystem;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentCountdown; import de.steamwar.fightsystem.states.StateDependentCountdown;
import de.steamwar.fightsystem.utils.Message;
import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.SWSound;
public class EventSpectateCountdown extends Countdown { public class EventSpectateCountdown extends Countdown {
public EventSpectateCountdown() { 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); new StateDependentCountdown(ArenaMode.Event, FightState.Spectate, this);
} }
@Override
public String countdownCounting() {
return "SHUTDOWN_COUNTDOWN";
}
@Override @Override
public void countdownFinished() { public void countdownFinished() {
FightSystem.shutdown(); FightSystem.shutdown();

Datei anzeigen

@ -24,6 +24,7 @@ import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentCountdown; import de.steamwar.fightsystem.states.StateDependentCountdown;
import de.steamwar.fightsystem.states.StateDependentListener; import de.steamwar.fightsystem.states.StateDependentListener;
import de.steamwar.fightsystem.utils.Message;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -32,7 +33,7 @@ import org.bukkit.event.player.PlayerJoinEvent;
public class NoPlayersOnlineCountdown extends Countdown implements Listener { public class NoPlayersOnlineCountdown extends Countdown implements Listener {
public NoPlayersOnlineCountdown() { public NoPlayersOnlineCountdown() {
super(Config.NoPlayerOnlineDuration, null, false); super(Config.NoPlayerOnlineDuration, new Message("SHUTDOWN_COUNTDOWN"), null, false);
new StateDependentListener(ArenaMode.AntiReplay, FightState.PreLeaderSetup, this); new StateDependentListener(ArenaMode.AntiReplay, FightState.PreLeaderSetup, this);
new StateDependentCountdown(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 @EventHandler
public void handlePlayerJoin(PlayerJoinEvent event) { public void handlePlayerJoin(PlayerJoinEvent event) {
disable(); disable();

Datei anzeigen

@ -24,19 +24,15 @@ import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.FightSystem;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentCountdown; import de.steamwar.fightsystem.states.StateDependentCountdown;
import de.steamwar.fightsystem.utils.Message;
public class PostSchemCountdown extends Countdown { public class PostSchemCountdown extends Countdown {
public PostSchemCountdown() { public PostSchemCountdown() {
super(Config.SetupDuration, null, false); super(Config.SetupDuration, new Message("POST_SCHEM_COUNTDOWN"), null, false);
new StateDependentCountdown(ArenaMode.AntiTest, FightState.PostSchemSetup, this); new StateDependentCountdown(ArenaMode.AntiTest, FightState.PostSchemSetup, this);
} }
@Override
public String countdownCounting() {
return "POST_SCHEM_COUNTDOWN";
}
@Override @Override
public void countdownFinished() { public void countdownFinished() {
FightSystem.setPreRunningState(); FightSystem.setPreRunningState();

Datei anzeigen

@ -24,20 +24,16 @@ import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.FightSystem;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentCountdown; import de.steamwar.fightsystem.states.StateDependentCountdown;
import de.steamwar.fightsystem.utils.Message;
import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.SWSound;
public class PreRunningCountdown extends Countdown { public class PreRunningCountdown extends Countdown {
public PreRunningCountdown() { 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); new StateDependentCountdown(ArenaMode.AntiReplay, FightState.PreRunning, this);
} }
@Override
public String countdownCounting() {
return "PRE_RUNNING_COUNTDOWN";
}
@Override @Override
public void countdownFinished() { public void countdownFinished() {
FightSystem.setRunningState(); FightSystem.setRunningState();

Datei anzeigen

@ -24,20 +24,16 @@ import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.FightSystem;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentCountdown; import de.steamwar.fightsystem.states.StateDependentCountdown;
import de.steamwar.fightsystem.utils.Message;
import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.SWSound;
public class PreSchemCountdown extends Countdown { public class PreSchemCountdown extends Countdown {
public PreSchemCountdown() { 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); new StateDependentCountdown(ArenaMode.AntiReplay, FightState.PreSchemSetup, this);
} }
@Override
public String countdownCounting() {
return "PRE_SCHEM_COUNTDOWN";
}
@Override @Override
public void countdownFinished() { public void countdownFinished() {
FightSystem.setPostSchemState(); FightSystem.setPostSchemState();

Datei anzeigen

@ -24,20 +24,16 @@ import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.FightSystem;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentCountdown; import de.steamwar.fightsystem.states.StateDependentCountdown;
import de.steamwar.fightsystem.utils.Message;
import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.SWSound;
public class SpectateOverCountdown extends Countdown { public class SpectateOverCountdown extends Countdown {
public SpectateOverCountdown() { 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); new StateDependentCountdown(ArenaMode.Restartable, FightState.Spectate, this);
} }
@Override
public String countdownCounting() {
return "SPECTATE_COUNTDOWN";
}
@Override @Override
public void countdownFinished() { public void countdownFinished() {
FightSystem.setPreLeaderState(); FightSystem.setPreLeaderState();

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.fightsystem.countdown; package de.steamwar.fightsystem.countdown;
import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.utils.Message;
import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.SWSound;
public class TimeOverCountdown extends Countdown { public class TimeOverCountdown extends Countdown {
@ -27,15 +28,10 @@ public class TimeOverCountdown extends Countdown {
private final Runnable timeOver; private final Runnable timeOver;
public TimeOverCountdown(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; this.timeOver = timeOver;
} }
@Override
public String countdownCounting() {
return "RUNNING_COUNTDOWN";
}
@Override @Override
public void countdownFinished() { public void countdownFinished() {
timeOver.run(); timeOver.run();

Datei anzeigen

@ -24,6 +24,7 @@ import de.steamwar.fightsystem.FightSystem;
import de.steamwar.fightsystem.countdown.Countdown; import de.steamwar.fightsystem.countdown.Countdown;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependent; import de.steamwar.fightsystem.states.StateDependent;
import de.steamwar.fightsystem.utils.Message;
import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.SWSound;
import de.steamwar.fightsystem.winconditions.Winconditions; import de.steamwar.fightsystem.winconditions.Winconditions;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -124,13 +125,9 @@ public class HellsBells {
} }
private class HellsBellsCountdown extends Countdown { private class HellsBellsCountdown extends Countdown {
public HellsBellsCountdown(int time) {
super(time, SWSound.BLOCK_NOTE_BASS, true);
}
@Override public HellsBellsCountdown(int time) {
public String countdownCounting() { super(time, new Message("HELLS_BELLS_COUNTDOWN"), SWSound.BLOCK_NOTE_BASS, true);
return "HELLS_BELLS_COUNTDOWN";
} }
@Override @Override

Datei anzeigen

@ -216,7 +216,7 @@ public class FightTeam {
if(isLeaderless()) if(isLeaderless())
setLeader(fightPlayer); setLeader(fightPlayer);
else else
FightUI.addSubtitle("§a§l» " + prefix + player.getName()); FightUI.addSubtitle("UI_PLAYER_JOINS", prefix, player.getName());
} }
public void removePlayer(Player player) { public void removePlayer(Player player) {
@ -227,7 +227,7 @@ public class FightTeam {
players.remove(player); players.remove(player);
team.removeEntry(player.getName()); team.removeEntry(player.getName());
FightUI.addSubtitle("§c§l« " + prefix + player.getName()); FightUI.addSubtitle("UI_PLAYER_LEAVES", prefix, player.getName());
if(fightPlayer.equals(leader)) if(fightPlayer.equals(leader))
removeLeader(); removeLeader();
@ -271,7 +271,7 @@ public class FightTeam {
if(ready) if(ready)
setReady(false); setReady(false);
FightUI.addSubtitle("§a§l» " + prefix + "Leader " + leader.getPlayer().getName()); FightUI.addSubtitle("UI_LEADER_JOINS", prefix, leader.getPlayer().getName());
Optional<Integer> maxRank = Schematic.getSchemsOfType(leader.getPlayer().getUniqueId(), Config.SchematicType).stream().map(Schematic::getRank).max(Integer::compare); Optional<Integer> maxRank = Schematic.getSchemsOfType(leader.getPlayer().getUniqueId(), Config.SchematicType).stream().map(Schematic::getRank).max(Integer::compare);
if(Config.RanksEnabled) if(Config.RanksEnabled)
@ -418,6 +418,11 @@ public class FightTeam {
return color; return color;
} }
@Override
public String toString() {
return name;
}
private class KitLoader extends StateDependent { private class KitLoader extends StateDependent {
private KitLoader() { private KitLoader() {
super(ArenaMode.AntiReplay, FightState.Ingame); super(ArenaMode.AntiReplay, FightState.Ingame);

Datei anzeigen

@ -19,7 +19,6 @@
package de.steamwar.fightsystem.listener; package de.steamwar.fightsystem.listener;
import de.steamwar.core.BountifulWrapper;
import de.steamwar.fightsystem.ArenaMode; import de.steamwar.fightsystem.ArenaMode;
import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.FightSystem; 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.record.GlobalRecorder;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentListener; 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.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -57,20 +52,19 @@ public class Chat implements Listener {
if(message.startsWith(Config.TeamChatDetection)) { if(message.startsWith(Config.TeamChatDetection)) {
fightTeam.broadcastChat(player, message.substring(1)); fightTeam.broadcastChat(player, message.substring(1));
} else { } else {
broadcastChat(teamName + " " + player.getName() + "§8» §7" + message); broadcastChat("PARTICIPANT_CHAT", teamName, player.getName(), message);
} }
}else if(player == FightSystem.getEventLeiter()){ }else if(player == FightSystem.getEventLeiter()){
broadcastChat("§e" + player.getName() + "§8» §e" + message); broadcastChat("FIGHTLEADER_CHAT", player.getName(), message);
}else{ }else{
broadcastChat("§7" + player.getName() + "§8» §7" + message); broadcastChat("SPECTATOR_CHAT", player.getName(), message);
} }
event.setCancelled(true); event.setCancelled(true);
} }
private void broadcastChat(String message) { private void broadcastChat(String message, Object... params) {
GlobalRecorder.getInstance().chat(message); GlobalRecorder.getInstance().chat(message, params);
BaseComponent[] msg = TextComponent.fromLegacyText(message); FightSystem.getMessage().chat(message, params);
Bukkit.getOnlinePlayers().forEach(p -> BountifulWrapper.impl.sendMessage(p, ChatMessageType.CHAT, msg));
} }
} }

Datei anzeigen

@ -52,7 +52,7 @@ public class IngameDeath implements Listener {
if(team == null) if(team == null)
return; 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); Fight.playSound(SWSound.ENTITY_WITHER_DEATH.getSound(), 100.0F, 1.0F);
Bukkit.getScheduler().runTask(FightSystem.getPlugin(), () -> team.getFightPlayer(player).setOut()); Bukkit.getScheduler().runTask(FightSystem.getPlugin(), () -> team.getFightPlayer(player).setOut());
} }
@ -70,7 +70,7 @@ public class IngameDeath implements Listener {
if(!fightPlayer.isLiving()) if(!fightPlayer.isLiving())
return; 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()); Bukkit.getScheduler().runTask(FightSystem.getPlugin(), () -> team.getFightPlayer(player).setOut());
} }
} }

Datei anzeigen

@ -21,6 +21,7 @@ package de.steamwar.fightsystem.listener;
import de.steamwar.fightsystem.ArenaMode; import de.steamwar.fightsystem.ArenaMode;
import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.FightSystem;
import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.Fight;
import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.fight.FightTeam;
import de.steamwar.fightsystem.record.REntity; import de.steamwar.fightsystem.record.REntity;

Datei anzeigen

@ -30,6 +30,7 @@ import de.steamwar.fightsystem.fight.Fight;
import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.fight.FightTeam;
import de.steamwar.fightsystem.fight.FreezeWorld; import de.steamwar.fightsystem.fight.FreezeWorld;
import de.steamwar.fightsystem.listener.FightScoreboard; import de.steamwar.fightsystem.listener.FightScoreboard;
import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.utils.*; import de.steamwar.fightsystem.utils.*;
import de.steamwar.sql.Schematic; import de.steamwar.sql.Schematic;
import de.steamwar.sql.Team; import de.steamwar.sql.Team;
@ -105,6 +106,8 @@ public class PacketProcessor {
packetDecoder[0xa1] = () -> send(ChatMessageType.ACTION_BAR); packetDecoder[0xa1] = () -> send(ChatMessageType.ACTION_BAR);
packetDecoder[0xa2] = () -> send(ChatMessageType.SYSTEM); packetDecoder[0xa2] = () -> send(ChatMessageType.SYSTEM);
packetDecoder[0xa3] = this::countdown; packetDecoder[0xa3] = this::countdown;
packetDecoder[0xa4] = this::chat;
packetDecoder[0xa5] = this::system;
packetDecoder[0xb0] = () -> pasteSchem(Fight.getBlueTeam()); packetDecoder[0xb0] = () -> pasteSchem(Fight.getBlueTeam());
packetDecoder[0xb1] = () -> pasteSchem(Fight.getRedTeam()); packetDecoder[0xb1] = () -> pasteSchem(Fight.getRedTeam());
packetDecoder[0xb2] = this::teams; packetDecoder[0xb2] = this::teams;
@ -115,6 +118,8 @@ public class PacketProcessor {
packetDecoder[0xc2] = this::bossBar; packetDecoder[0xc2] = this::bossBar;
packetDecoder[0xc3] = this::subtitle; packetDecoder[0xc3] = this::subtitle;
packetDecoder[0xc4] = this::printWin; packetDecoder[0xc4] = this::printWin;
packetDecoder[0xc5] = this::messageSubtitle;
packetDecoder[0xc6] = this::winMessage;
packetDecoder[0xef] = source::readUTF; packetDecoder[0xef] = source::readUTF;
packetDecoder[0xff] = this::tick; packetDecoder[0xff] = this::tick;
@ -125,6 +130,41 @@ public class PacketProcessor {
task = Bukkit.getScheduler().runTaskTimer(FightSystem.getPlugin(), this::process, 1, 1); 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() { private void runSync() {
synchronized (syncList) { synchronized (syncList) {
for(Runnable runnable : syncList) { for(Runnable runnable : syncList) {
@ -242,7 +282,7 @@ public class PacketProcessor {
private void countdown() throws IOException { private void countdown() throws IOException {
String message = source.readUTF(); String message = source.readUTF();
int displaytime = source.readInt(); int displaytime = source.readInt();
String appendix = source.readUTF(); Message appendix = readMessage();
Bukkit.getOnlinePlayers().forEach(p -> Countdown.sendCountdownMessage(p, message, displaytime, appendix)); Bukkit.getOnlinePlayers().forEach(p -> Countdown.sendCountdownMessage(p, message, displaytime, appendix));
} }
@ -384,25 +424,28 @@ public class PacketProcessor {
private void subtitle() throws IOException { private void subtitle() throws IOException {
String subtitle = source.readUTF(); String subtitle = source.readUTF();
FightUI.addSubtitle(subtitle); FightUI.addSubtitle("OLD_STRING", subtitle);
} }
private void printWin() throws IOException { private void printWin() throws IOException {
String title = source.readUTF(); String title = source.readUTF();
String subtitle = source.readUTF(); String subtitle = source.readUTF();
FightUI.printWin(title, subtitle); Bukkit.getOnlinePlayers().forEach(p -> {
p.resetTitle();
WorldOfColorWrapper.impl.sendTitle(p, title, subtitle, 5, 40, 5);
});
if(Config.replayserver() || ArenaMode.AntiReplay.contains(Config.mode)) {
FightState.setFightState(FightState.SPECTATE);
}else{
new EventSpectateCountdown().enable();
}
} }
private void endReplay() { private void endReplay() {
REntity.dieAll(); REntity.dieAll();
freezer.disable(); freezer.disable();
if(Config.replayserver() || ArenaMode.AntiReplay.contains(Config.mode)) {
FightSystem.setSpectateState(null, "Replay ends", null);
}else{
FightSystem.getMessage().broadcast("REPLAY_ENDS"); FightSystem.getMessage().broadcast("REPLAY_ENDS");
new EventSpectateCountdown().enable();
}
replaying = false; replaying = false;
} }
@ -460,7 +503,8 @@ public class PacketProcessor {
} }
} }
private Object[] readMessageParams() throws IOException { private Message readMessage() throws IOException {
String msg = source.readUTF();
List<Object> params = new ArrayList<>(); List<Object> params = new ArrayList<>();
int type; int type;
@ -495,7 +539,7 @@ public class PacketProcessor {
} }
} while(type != 0x00); } while(type != 0x00);
return params.toArray(); return new Message(msg, params.toArray());
} }
private interface PacketParser{ private interface PacketParser{

Datei anzeigen

@ -27,6 +27,7 @@ import de.steamwar.fightsystem.fight.FightTeam;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.utils.BlockIdWrapper; import de.steamwar.fightsystem.utils.BlockIdWrapper;
import de.steamwar.fightsystem.utils.CraftbukkitWrapper; import de.steamwar.fightsystem.utils.CraftbukkitWrapper;
import de.steamwar.fightsystem.utils.Message;
import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.SWSound;
import de.steamwar.sql.Schematic; import de.steamwar.sql.Schematic;
import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.SteamwarUser;
@ -93,9 +94,9 @@ public interface Recorder {
* PlayerItemPacket (0x07) + int EntityId + String item + boolean enchanted + String slot * PlayerItemPacket (0x07) + int EntityId + String item + boolean enchanted + String slot
* ArrowSpawnPacket (0x08) + int EntityId * ArrowSpawnPacket (0x08) + int EntityId
* FireballSpawnPacket (0x09) + int EntityId * FireballSpawnPacket (0x09) + int EntityId
* BowSpanPacket (0x0A) + int EntityId + boolean start + hand * BowSpanPacket (0x0a) + int EntityId + boolean start + hand
* PlayerDamagePacket (0x0B) + int EntityId * PlayerDamagePacket (0x0b) + int EntityId
* SetOnFire (0x0C) + int EntityId + boolean perma * SetOnFire (0x0c) + int EntityId + boolean perma
* *
* ArenaInfo (0x20) + bool blueNegZ + byte arenaY + int arenaMinX + int arenaMinZ * 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 * ShortBlockPacket (0x35) + pos relative to ArenaMinX,BluePasteY,ArenaMinZ byte, byte, byte + short BlockState
* *
* *
* ChatPacket (0xA0) + String message * DEPRECATED ChatPacket (0xa0) + String message
* DEPRECATED ActionBarPacket (0xA1) + String message * DEPRECATED ActionBarPacket (0xa1) + String message
* SystemPacket (0xA2) + String message * DEPRECATED SystemPacket (0xa2) + String message
* CountdownPacket (0xA3) + String message, int displaytime, String appendix * CountdownPacket (0xa3) + String message, int displaytime, Message appendix
* ChatPacket (0xa4) + Message
* SystemPacket (0xa5) + Message
* *
* BlueSchemPacket (0xB0) + int blueSchemId * BlueSchemPacket (0xb0) + int blueSchemId
* RedSchemPacket (0xB1) + int redSchemId * RedSchemPacket (0xb1) + int redSchemId
* TeamIDPacket (0xB2) + int blueTeamId, redTeamId * TeamIDPacket (0xb2) + int blueTeamId, redTeamId
* BlueEmbeddedSchemPacket (0xB3) + int blueSchemId + gzipt NBT blob * BlueEmbeddedSchemPacket (0xb3) + int blueSchemId + gzipt NBT blob
* RedEmbeddedSchemPacket (0xB4) + int redSchemId + gzipt NBT blob * RedEmbeddedSchemPacket (0xb4) + int redSchemId + gzipt NBT blob
* *
* DEPRECATED ScoreboardTitlePacket (0xC0) + String scoreboardTitle * DEPRECATED ScoreboardTitlePacket (0xc0) + String scoreboardTitle
* DEPRECATED ScoreboardDataPacket (0xC1) + String key + int value * DEPRECATED ScoreboardDataPacket (0xc1) + String key + int value
* BossBarPacket (0xC2) + double leftBlueProgress, leftRedProgress + String leftBlueText, leftRedText * BossBarPacket (0xc2) + double leftBlueProgress, leftRedProgress + String leftBlueText, leftRedText
* SubtitlePacket (0xC3) + String subtitle * DEPRECATED SubtitlePacket (0xc3) + String subtitle
* PrintWinPacket (0xC4) + String title, subtitle * DEPRECATED PrintWinPacket (0xc4) + String title, subtitle
* SubtitlePacket (0xc5) + Message
* WinPacket (0xc6) + byte team + Message subtitle
* *
* CommentPacket (0xfe) + String comment * CommentPacket (0xfe) + String comment
* TickPacket (0xff) * TickPacket (0xff)
@ -236,18 +241,18 @@ public interface Recorder {
write(0x34, soundType, volume, pitch); write(0x34, soundType, volume, pitch);
} }
default void chat(String s) { default void countdown(String message, int displaytime, Message appendix) {
write(0xa0, s);
}
default void systemChat(String s) {
write(0xa2, s);
}
default void countdown(String message, int displaytime, String appendix) {
write(0xa3, message, displaytime, 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) { default void teamIds(int blueTeamId, int redTeamId) {
write(0xb2, blueTeamId, redTeamId); write(0xb2, blueTeamId, redTeamId);
} }
@ -280,16 +285,27 @@ public interface Recorder {
write(embedId, schemId, buffer.toByteArray()); 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) { default void bossBar(double leftBlueProgress, double leftRedProgress, String leftBlueText, String leftRedText) {
write(0xc2, leftBlueProgress, leftRedProgress, leftBlueText, leftRedText); write(0xc2, leftBlueProgress, leftRedProgress, leftBlueText, leftRedText);
} }
default void subtitle(String subtitle) { default void subtitle(Message subtitle) {
write(0xc3, subtitle); write(0xc5, subtitle);
} }
default void printWin(String title, String subtitle) { default void winMessage(FightTeam team, String subtitle, Object... params) {
write(0xc4, title, subtitle); byte bTeam = 0x00;
if(team != null) {
bTeam = (byte) (team.isBlue() ? 0x01 : 0x02);
}
write(0xc6, bTeam, new Message(subtitle, params));
} }
default void tick(){ default void tick(){
@ -327,13 +343,15 @@ public interface Recorder {
stream.writeUTF((String)o); stream.writeUTF((String)o);
else if(o instanceof byte[]) else if(o instanceof byte[])
stream.write((byte[])o); stream.write((byte[])o);
else if(o instanceof Message)
writeMessage(stream, (Message) o);
else else
throw new SecurityException("Undefined write for: " + o.getClass().getName()); throw new SecurityException("Undefined write for: " + o.getClass().getName());
} }
default void writeMessage(DataOutputStream stream, String message, Object... params) throws IOException { default void writeMessage(DataOutputStream stream, Message message) throws IOException {
stream.writeUTF(message); stream.writeUTF(message.getMsg());
for(Object o : params) { for(Object o : message.getParams()) {
if(o instanceof Boolean) if(o instanceof Boolean)
stream.writeByte(0x01); stream.writeByte(0x01);
else if(o instanceof Byte) else if(o instanceof Byte)
@ -355,10 +373,4 @@ public interface Recorder {
stream.writeByte(0x00); 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);
}
}
} }

Datei anzeigen

@ -115,8 +115,8 @@ public class FightStatistics {
int newRedElo = (int) Math.round(redElo + K * (1 - blueResult - redWinExpectation)); int newRedElo = (int) Math.round(redElo + K * (1 - blueResult - redWinExpectation));
Elo.setElo(blueLeader, gameMode, newBlueElo); Elo.setElo(blueLeader, gameMode, newBlueElo);
Elo.setElo(redLeader, gameMode, newRedElo); Elo.setElo(redLeader, gameMode, newRedElo);
FightSystem.broadcast("§7ELO von " + Fight.getBlueTeam().getPrefix() + SteamwarUser.get(blueLeader).getUserName() + "§8: §7" + blueElo + "§8»§e" + newBlueElo); FightSystem.broadcast("UI_ELO", Fight.getBlueTeam().getPrefix(), SteamwarUser.get(blueLeader).getUserName(), blueElo, newBlueElo);
FightSystem.broadcast("§7ELO von " + Fight.getRedTeam().getPrefix() + SteamwarUser.get(redLeader).getUserName() + "§8: §7" + redElo + "§8»§e" + newRedElo); FightSystem.broadcast("UI_ELO", Fight.getRedTeam().getPrefix(), SteamwarUser.get(redLeader).getUserName(), redElo, newRedElo);
} }
} }

Datei anzeigen

@ -169,27 +169,30 @@ public class FightUI {
} }
private static final Queue<String> queue = new LinkedList<>(); private static final Queue<Message> queue = new LinkedList<>();
private static boolean subtitleScheduled = false; 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(); queue.clear();
FightSystem.getPlugin().getLogger().log(Level.INFO, title + " " + winreason); FightSystem.getPlugin().getLogger().log(Level.INFO, winner + " " + FightSystem.getMessage().parse(subtitle, null, params));
GlobalRecorder.getInstance().printWin(title, winreason); GlobalRecorder.getInstance().winMessage(winner, subtitle, params);
Bukkit.getOnlinePlayers().forEach(p -> {
p.resetTitle(); Bukkit.getOnlinePlayers().forEach(Player::resetTitle);
WorldOfColorWrapper.impl.sendTitle(p, title, winreason, 5, 40, 5); 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())) if(FightState.Spectate.contains(FightState.getFightState()))
return; return;
Message message = new Message(msg, params);
queue.add(message); queue.add(message);
GlobalRecorder.getInstance().subtitle(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) if(!subtitleScheduled)
printSubtitle(); printSubtitle();
@ -200,9 +203,9 @@ public class FightUI {
subtitleScheduled = false; subtitleScheduled = false;
return; 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); Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), FightUI::printSubtitle, 50);
subtitleScheduled = true; subtitleScheduled = true;
} }

Datei anzeigen

@ -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 <https://www.gnu.org/licenses/>.
*/
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;
}
}

Datei anzeigen

@ -33,7 +33,7 @@ public class EventTeamOffWincondition extends Wincondition{
@Override @Override
public void enable() { public void enable() {
if(Fight.getBlueTeam().allPlayersOut() && Fight.getRedTeam().allPlayersOut()){ if(Fight.getBlueTeam().allPlayersOut() && Fight.getRedTeam().allPlayersOut()){
win(null, "§7Beide Teams offline"); win(null, "WIN_OFFLINE_BOTH");
}else{ }else{
teamOff(Fight.getBlueTeam()); teamOff(Fight.getBlueTeam());
teamOff(Fight.getRedTeam()); teamOff(Fight.getRedTeam());
@ -49,7 +49,7 @@ public class EventTeamOffWincondition extends Wincondition{
private void teamOff(FightTeam team){ private void teamOff(FightTeam team){
if(team.allPlayersOut()){ if(team.allPlayersOut()){
win(Fight.getOpposite(team), team.getColoredName() + " §7offline"); win(Fight.getOpposite(team), "WIN_OFFLINE", team.getColoredName());
} }
} }
} }

Datei anzeigen

@ -44,7 +44,7 @@ public class RankedPlayerLeftWincondition extends Wincondition implements Listen
return; return;
if(team.isPlayerLeader(player)) { 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());
} }
} }
} }

Datei anzeigen

@ -47,8 +47,8 @@ public abstract class Wincondition {
return timeOverCountdown.getCountdown(); return timeOverCountdown.getCountdown();
} }
protected void win(FightTeam team, String subtitle){ protected void win(FightTeam team, String subtitle, Object... params){
FightSystem.setSpectateState(team, windescription, subtitle); FightSystem.setSpectateState(team, windescription, subtitle, params);
} }
protected FightTeam isTarget(Player player){ protected FightTeam isTarget(Player player){

Datei anzeigen

@ -57,6 +57,6 @@ public class WinconditionAllDead extends Wincondition implements Listener {
return; return;
} }
win(Fight.getOpposite(team), team.getPrefix() + "Alle Spieler kampfunfähig"); win(Fight.getOpposite(team), "WIN_ALL_DEAD", team.getPrefix());
} }
} }

Datei anzeigen

@ -52,7 +52,7 @@ public class WinconditionCaptainDead extends Wincondition implements Listener {
return; return;
if(team.isPlayerLeader(player)) { 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());
} }
} }
} }

Datei anzeigen

@ -39,11 +39,11 @@ public class WinconditionHeartRatioTimeout extends Wincondition {
double redHeartRatio = Fight.getRedTeam().getHeartRatio(); double redHeartRatio = Fight.getRedTeam().getHeartRatio();
if(blueHeartRatio > redHeartRatio) { 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){ }else if(blueHeartRatio < redHeartRatio){
win(Fight.getRedTeam(), Fight.getRedTeam().getPrefix() + "Mehr verbleibende Leben"); win(Fight.getRedTeam(), "WIN_MORE_HEALTH", Fight.getRedTeam().getPrefix());
}else{ }else{
win(null, "§7Zeit abgelaufen"); win(null, "WIN_TIME_OVER");
} }
} }
} }

Datei anzeigen

@ -91,7 +91,7 @@ public class WinconditionPercentSystem extends Wincondition implements Listener,
destroyedBlocks += event.blockList().size(); destroyedBlocks += event.blockList().size();
percent = (double)destroyedBlocks * 100 / volume; percent = (double)destroyedBlocks * 100 / volume;
if(percent >= Config.PercentWin) { if(percent >= Config.PercentWin) {
win(Fight.getOpposite(team), team.getColoredName() + " §7zu beschädigt"); win(Fight.getOpposite(team), "WIN_PERCENT", team.getColoredName());
} }
} }
} }

Datei anzeigen

@ -39,11 +39,11 @@ public class WinconditionPercentTimeout extends Wincondition {
double redPercent = Wincondition.percentWincondition.getPercent(Fight.getRedTeam()); double redPercent = Wincondition.percentWincondition.getPercent(Fight.getRedTeam());
if(bluePercent > redPercent) { 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){ }else if(bluePercent < redPercent){
win(Fight.getBlueTeam(), Fight.getBlueTeam().getColoredName() + " §7weniger beschädigt"); win(Fight.getBlueTeam(), "WIN_LESS_DAMAGE", Fight.getBlueTeam().getColoredName());
}else{ }else{
win(null, "§7Zeit abgelaufen"); win(null, "WIN_TIME_OVER");
} }
} }
} }

Datei anzeigen

@ -69,11 +69,11 @@ public class WinconditionPoints extends Wincondition implements PrintableWincond
int bluePoints = teamMap.get(Fight.getBlueTeam()).getPoints(); int bluePoints = teamMap.get(Fight.getBlueTeam()).getPoints();
if(bluePoints < redPoints) { if(bluePoints < redPoints) {
win(Fight.getRedTeam(), Fight.getRedTeam().getPrefix() + " hat mehr Punkte"); win(Fight.getRedTeam(), "WIN_POINTS", Fight.getRedTeam().getPrefix());
}else if(bluePoints > redPoints){ }else if(bluePoints > redPoints){
win(Fight.getBlueTeam(), Fight.getBlueTeam().getPrefix() + " hat mehr Punkte"); win(Fight.getBlueTeam(), "WIN_POINTS", Fight.getBlueTeam().getPrefix());
}else{ }else{
win(null, "§7Gleicher Punktestand"); win(null, "WIN_POINTS_EQUAL");
} }
} }

Datei anzeigen

@ -76,7 +76,7 @@ public class WinconditionPumpkinTechKO extends Wincondition implements Printable
}); });
if(pumpkins == 0) { if(pumpkins == 0) {
win(Fight.getOpposite(team), team.getColoredName() + " ist Tech K.O."); win(Fight.getOpposite(team), "WIN_TECHKO", team.getColoredName());
} }
} }
} }

Datei anzeigen

@ -99,7 +99,7 @@ public class WinconditionRelativePercent extends Wincondition implements Printab
return; return;
if(getPercent() >= Config.PercentWin){ 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());
} }
} }

Datei anzeigen

@ -25,6 +25,7 @@ import de.steamwar.fightsystem.fight.Fight;
import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.fight.FightTeam;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentTask; import de.steamwar.fightsystem.states.StateDependentTask;
import de.steamwar.fightsystem.utils.Message;
import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.SWSound;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
@ -108,20 +109,14 @@ public class WinconditionTimeTechKO extends Wincondition {
private final FightTeam team; private final FightTeam team;
public TechKOCountdown(FightTeam team, int countdownTime) { 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; this.team = team;
super.enable(); super.enable();
} }
@Override
public final String countdownCounting() {
//TODO: ARRRG!
return "bis " + team.getColoredName() + " §feinen Schuss abgegeben haben muss!";
}
@Override @Override
public void countdownFinished() { public void countdownFinished() {
win(Fight.getOpposite(team), team.getColoredName() + " ist Tech K.O."); win(Fight.getOpposite(team), "WIN_TECHKO", team.getColoredName());
} }
} }
} }

Datei anzeigen

@ -34,6 +34,6 @@ public class WinconditionTimeout extends Wincondition {
} }
protected void timeOver() { protected void timeOver() {
win(null, "§7Zeit abgelaufen"); win(null, "WIN_TIME_OVER");
} }
} }

Datei anzeigen

@ -73,7 +73,7 @@ public class WinconditionWaterTechKO extends Wincondition implements PrintableWi
}); });
if(water == 0){ if(water == 0){
win(Fight.getOpposite(team), team.getColoredName() + " ist Tech K.O."); win(Fight.getOpposite(team), "WIN_TECHKO", team.getColoredName());
} }
} }
} }