From 1cc57539e4334ce11cd6de64884ea87db49ca886 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sat, 2 Oct 2021 11:44:12 +0200 Subject: [PATCH] WIP first half multiling Signed-off-by: Lixfel --- .../de/steamwar/fightsystem/FightSystem.java | 9 ++ .../fightsystem/FightSystem.properties | 119 ++++++++++++++++++ .../fightsystem/FightSystem_de.properties | 19 +++ .../fightsystem/commands/AkCommand.java | 1 - .../fightsystem/commands/Commands.java | 58 +++------ .../de/steamwar/fightsystem/commands/GUI.java | 65 +++++----- .../fightsystem/commands/GamemodeCommand.java | 20 +-- .../fightsystem/commands/InviteCommand.java | 3 +- .../fightsystem/commands/LeaderCommand.java | 20 ++- .../commands/LockschemCommand.java | 19 ++- .../fightsystem/commands/RemoveCommand.java | 3 +- .../fightsystem/commands/ReplayCommand.java | 9 +- .../fightsystem/commands/WinCommand.java | 5 +- .../fightsystem/countdown/Countdown.java | 39 +++--- .../countdown/EnternCountdown.java | 40 ++---- .../countdown/EventSpectateCountdown.java | 2 +- .../countdown/NoPlayersOnlineCountdown.java | 4 +- .../countdown/PostSchemCountdown.java | 2 +- .../countdown/PreRunningCountdown.java | 2 +- .../countdown/PreSchemCountdown.java | 2 +- .../countdown/SpectateOverCountdown.java | 2 +- .../countdown/TimeOverCountdown.java | 2 +- .../fightsystem/event/HellsBells.java | 19 +-- .../fightsystem/fight/FightPlayer.java | 4 - .../fightsystem/fight/FightSchematic.java | 2 +- .../steamwar/fightsystem/fight/FightTeam.java | 10 +- .../fightsystem/record/PacketProcessor.java | 10 ++ .../steamwar/fightsystem/record/Recorder.java | 11 +- .../winconditions/WinconditionTimeTechKO.java | 1 + 29 files changed, 296 insertions(+), 206 deletions(-) create mode 100644 FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties create mode 100644 FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java index 0e18eca..26f8fad 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java @@ -36,6 +36,7 @@ import de.steamwar.fightsystem.utils.FightStatistics; import de.steamwar.fightsystem.utils.FightUI; import de.steamwar.fightsystem.utils.TechHider; import de.steamwar.fightsystem.winconditions.*; +import de.steamwar.message.Message; import de.steamwar.sql.EventFight; import de.steamwar.sql.Schematic; import org.bukkit.Bukkit; @@ -51,6 +52,8 @@ public class FightSystem extends JavaPlugin { private static EventFight eventFight; private static Player eventLeiter; + private Message message; + @Override public void onLoad() { plugin = this; @@ -58,6 +61,8 @@ public class FightSystem extends JavaPlugin { @Override public void onEnable() { + message = new Message("de.steamwar.fightsystem.FightSystem", FightSystem.class.getClassLoader()); + new EntityDamage(); new WaterRemover(); new Permanent(); @@ -240,6 +245,10 @@ public class FightSystem extends JavaPlugin { GlobalRecorder.getInstance().systemChat(PREFIX + message); } + public static Message getMessage() { + return plugin.message; + } + private static void kickNext(){ if(Bukkit.getOnlinePlayers().isEmpty()){ Bukkit.shutdown(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties new file mode 100644 index 0000000..7fb8cef --- /dev/null +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties @@ -0,0 +1,119 @@ +# +# 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 . +# + +PREFIX=§eArena§8» + +# Commands +NO_TEAM=§cDu bist in keinem Team +FIGHT_ALREADY_STARTED=§cDer Kampf hat bereits begonnen +NOT_LEADER=§cDu bist kein Leader +PLAYER_UNAVAILABLE=§cDer Spieler ist nicht in der Arena + +NO_INVITATION=§cDu wurdest von keinem Team eingeladen +INVITATION_DECLINED=§cEinladung abgelehnt +INVITATION_DECLINED_TEAM=§e{0} §chat die Einladung abgelehnt +PLAYER_IN_TEAM=§e{0} §cist bereits in einem Team +ALREADY_INVITED=§e{0} §cwurde bereits eingeladen +INVITATION_SENT=§e{0} §7eingeladen + +NOT_IN_TEAM=§e{0} §cist nicht in deinem Team + +KIT_UNAVAILABLE=§cDieses Kit gibt es nicht +KIT_CHOSEN=§7Kit §e{0} §7gewählt + +GAMEMODE_NOT_ALLOWED=§cSpielmodusänderung verboten +GAMEMODE_UNKNOWN=§cUnbekannter Spielmodus {0} +GAMEMODE_HELP=§8/§7gm §8[§eSpielmodus§8] + +INVITE_HELP=§8/§einvite §8[§eSpieler§8] + +LEADER_FULL=§cAlle Teams haben bereits einen Leader +ALREADY_IN_TEAM=§cDu bist bereits in einem Team + +LOCKSCHEM_HELP=§8/§7lockschem §8[§eTeam§8] +UNKNOWN_TEAM=§cDieses Team existiert nicht +LOCKSCHEM_LOCKED=§7Schematic gesperrt +LOCKSCHEM_LOCKED_BY=§cDie Schematic wurde von §e{0} §cgesperrt + +REMOVE_HELP=§8/§eremove §8[§eSpieler§8] + +REPLAY_UNAVAILABLE=§cReplay derzeit nicht verfügbar + +NOT_FIGHTLEADER=§cDu bist nicht Kampfleiter +WIN_HELP=§8/§7win §8[§eTeam §8or §etie§8] + + +# GUI +INVITATION_TITLE=Einladung von {0} +INVITATION_ACCEPT=§aAnnehmen +INVITATION_DECLINE=§cAblehnen +INVITATION_CHAT_ACCEPT=§8/§aaccept§8, §7um die Einladung §aanzunehmen +INVITATION_CHAT_DECLINE=§8/§cdecline§8, §7um die Einladung §cabzulehnen + +STATE_TITLE=Kampfstatus +STATE_PRE_LEADER_SETUP=§7Teamleaderwartephase +STATE_PRE_SCHEM_SETUP=§7Schemauswahlphase +STATE_POST_SCHEM_SETUP=§7Vorbereitungsphase +STATE_PRE_RUNNING=§eKitausgabe +STATE_RUNNING=§eKampfphase +STATE_SPECTATE_WIN=§7Sieg {0} +STATE_SPECTATE_TIE=§7Unentschieden + +INVITE_TITLE=Spieler einladen + +REMOVE_TITLE=Spieler rauswerfen + +KIT_SELECTION_TITLE=Kitauswahl +KIT_NO_KITS=§cKeine Kits gefunden +KIT_CREATE=§eNeues Kit +KITNAME_TITLE=Kitname eingeben +KITNAME_IN_USE=§cDieser Kitname wird bereits genutzt +KIT_SEARCH=§eSuchen +KITSEARCH_TITLE=Nach Kit suchen + +SCHEM_NO_ENEMY=§cKeine Schematicwahl ohne Gegner +SCHEM_TITLE={0}-Auswahl +SCHEM_PUBLIC=§eÖffentliches {0} +SCHEM_PRIVATE=§ePrivates {0} +SCHEM_NO_PRIVATE=§7Kein privates {0} vorhanden +SCHEM_PRIVATE_FORBIDDEN=§7Kein privates {0} erlaubt + + +# Countdowns +COUNTDOWN_MINUTES=§e{0} §7Minuten {1} +COUNTDOWN_SECONDS=§e{0} §7Sekunden {1} +COUNTDOWN_SECOND=§eEine §7Sekunde {1} + +ENTERN_COUNTDOWN=bis Entern erlaubt ist +ENTERN_ALLOWED=§eEntern §7ist nun erlaubt + +SHUTDOWN_COUNTDOWN=bis der Server gestoppt wird +PRE_SCHEM_COUNTDOWN=bis eine Public-Schematic gewählt wird +POST_SCHEM_COUNTDOWN=bis die Kits verteilt werden +PRE_RUNNING_COUNTDOWN=bis die Arena freigegeben ist +RUNNING_COUNTDOWN=bis der Kampf vorbei ist +SPECTATE_COUNTDOWN=bis die Arena zurückgesetzt wird + + +# Fight +SCHEMATIC_UNLOADABLE=§cSchematic konnte nicht geladen werden + + +# Winconditions +HELLS_BELLS_COUNTDOWN=bis die Bomben fallen diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties new file mode 100644 index 0000000..061512e --- /dev/null +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties @@ -0,0 +1,19 @@ +# +# 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 . +# + diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/AkCommand.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/AkCommand.java index d58d55c..554847a 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/AkCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/AkCommand.java @@ -44,7 +44,6 @@ public class AkCommand implements CommandExecutor { Player player = (Player) sender; if(SteamwarUser.get(player.getUniqueId()).getUserGroup() != UserGroup.Developer){ - Commands.sendHelp(player); return false; } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/Commands.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/Commands.java index ed0d06d..e4189c7 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/Commands.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/Commands.java @@ -28,6 +28,7 @@ import de.steamwar.fightsystem.fight.Kit; import de.steamwar.fightsystem.states.FightState; import de.steamwar.sql.PersonalKit; import de.steamwar.sql.SteamwarUser; +import net.md_5.bungee.api.ChatMessageType; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -35,12 +36,12 @@ public class Commands { private Commands(){} private static void errNoTeam(Player p){ - p.sendMessage(FightSystem.PREFIX + "§cDu bist in keinem Team!"); + FightSystem.getMessage().sendPrefixless("NO_TEAM", p, ChatMessageType.ACTION_BAR); } static boolean checkSetup(Player p){ if(!FightState.setup()){ - p.sendMessage(FightSystem.PREFIX + "§cDer Kampf hat bereits begonnen!"); + FightSystem.getMessage().sendPrefixless("FIGHT_ALREADY_STARTED", p, ChatMessageType.ACTION_BAR); return true; } return false; @@ -49,7 +50,7 @@ public class Commands { private static FightTeam checkGetInvitedTeam(Player p){ FightTeam fightTeam = Fight.getInvitedTeam(p); if(fightTeam == null){ - p.sendMessage(FightSystem.PREFIX + "§cDu wurdest von keinem Team eingeladen!"); + FightSystem.getMessage().sendPrefixless("NO_INVITATION", p, ChatMessageType.ACTION_BAR); } return fightTeam; } @@ -65,7 +66,7 @@ public class Commands { private static FightPlayer checkGetLeader(Player p){ FightPlayer fightPlayer = checkGetPlayer(p); if(fightPlayer != null && !fightPlayer.isLeader()){ - p.sendMessage(FightSystem.PREFIX + "§cDu bist kein Leader!"); + FightSystem.getMessage().sendPrefixless("NOT_LEADER", p, ChatMessageType.ACTION_BAR); fightPlayer = null; } return fightPlayer; @@ -82,7 +83,7 @@ public class Commands { private static Player checkGetPlayer(Player p, String t){ Player target = Bukkit.getPlayer(t); if(target == null) { - p.sendMessage(FightSystem.PREFIX + "§cDer Spieler ist nicht in der Arena!"); + FightSystem.getMessage().sendPrefixless("PLAYER_UNAVAILABLE", p, ChatMessageType.ACTION_BAR); } return target; } @@ -111,7 +112,6 @@ public class Commands { if(team == null) return; - p.sendMessage(FightSystem.PREFIX + "§aDu bist Team " + team.getColoredName() + " §abeigetreten!"); team.addMember(p); } @@ -123,8 +123,8 @@ public class Commands { if(team == null) return; - p.sendMessage(FightSystem.PREFIX + "§aDu hast die Einladung von " + team.getColoredName() + " §aabgelehnt!"); - team.broadcast("§e" + p.getName() + " §chat die Einladung abgelehnt"); + FightSystem.getMessage().sendPrefixless("INVITATION_DECLINED", p, ChatMessageType.ACTION_BAR); + team.broadcast("INVITATION_DECLINED_TEAM", p.getName()); team.getInvited().remove(p); } @@ -136,7 +136,6 @@ public class Commands { if(fightTeam == null) return; - p.sendMessage(FightSystem.PREFIX + "§aDu hast das Team " + fightTeam.getColoredName() + " §averlassen!"); fightTeam.removePlayer(p); } @@ -157,17 +156,16 @@ public class Commands { return; if(Fight.getPlayerTeam(target) != null) { - p.sendMessage(FightSystem.PREFIX + "§cDer Spieler §e" + target.getName() + " §cist bereits in einem Team!"); + FightSystem.getMessage().sendPrefixless("PLAYER_IN_TEAM", p, ChatMessageType.ACTION_BAR, target.getName()); return; } if(Fight.getOpposite(fightTeam).getInvited().contains(target) || fightTeam.getInvited().contains(target)) { - p.sendMessage(FightSystem.PREFIX + "§cDieser Spieler wurde bereits eingeladen!"); + FightSystem.getMessage().sendPrefixless("ALREADY_INVITED", p, ChatMessageType.ACTION_BAR, target.getName()); return; } - target.sendMessage(FightSystem.PREFIX + "§aDu wurdest in das Team von §e" + p.getName() + " §aeingeladen!"); - p.sendMessage(FightSystem.PREFIX + "§aDu hast den Spieler §e" + target.getName() + " §ain dein Team eingeladen!"); + FightSystem.getMessage().sendPrefixless("INVITATION_SENT", p, ChatMessageType.ACTION_BAR, target.getName()); fightTeam.getInvited().add(target); GUI.invitation(p, target); } @@ -189,12 +187,10 @@ public class Commands { return; if(!fightTeam.isPlayerInTeam(target)){ - p.sendMessage(FightSystem.PREFIX + "§cDer Spieler " + target.getName() + " §cist nicht in deinem Team§c!"); + FightSystem.getMessage().sendPrefixless("NOT_IN_TEAM", p, ChatMessageType.ACTION_BAR, target.getName()); return; } - p.sendMessage(FightSystem.PREFIX + "§aDu hast den Spieler §e" + target.getName() + " §aaus dem Team entfernt!"); - target.sendMessage(FightSystem.PREFIX + "§cDu wurdest aus dem Team entfernt!"); fightTeam.removePlayer(target); } @@ -217,36 +213,12 @@ public class Commands { k = Kit.getKitByName(kitName); } - if(k == null){ - p.sendMessage(FightSystem.PREFIX + "§cDieses Kit gibt es nicht!"); + if(k == null || !k.canUseKit(fightPlayer.isLeader())){ + FightSystem.getMessage().sendPrefixless("KIT_UNAVAILABLE", p, ChatMessageType.ACTION_BAR); return; } - if(!k.canUseKit(fightPlayer.isLeader())){ - p.sendMessage(FightSystem.PREFIX + "§cDu darfst dieses Kit nicht verwenden!"); - return; - } - - p.sendMessage(FightSystem.PREFIX + "§aDu spielst nun mit dem Kit §e" + kitName + "§a!"); + FightSystem.getMessage().sendPrefixless("KIT_CHOSEN", p, ChatMessageType.ACTION_BAR, kitName); fightPlayer.setKit(k); } - - static void sendHelp(Player p) { - p.sendMessage(FightSystem.PREFIX + "§7Hilfe für das Kampfsystem"); - - FightPlayer fightPlayer = Fight.getFightPlayer(p); - if(fightPlayer == null){ - p.sendMessage("§8/§eaccept §8- §7Einladung annehmen"); - p.sendMessage("§8/§edecline §8- §7Einladung ablehnen"); - p.sendMessage("§8/§eleader §8- §7Werde der Leader eines Teams"); - }else{ - if(fightPlayer.isLeader()){ - p.sendMessage("§8/§eready §8- §7Setzt das eigene Team auf bereit"); - p.sendMessage("§8/§einvite §8<§eSpieler§8> - §7Lade einen Spieler in dein Team ein"); - p.sendMessage("§8/§eremove §8<§eSpieler§8> - §7Wirft einen Spieler aus dem Team"); - } - p.sendMessage("§8/§ekit §8<§eKit§8> - §7Wähle ein Kit"); - p.sendMessage("§8/§eleave §8- §7Team verlassen"); - } - } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java index 6c4bb00..c71723f 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/GUI.java @@ -31,9 +31,11 @@ import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWListInv; +import de.steamwar.message.Message; import de.steamwar.sql.PersonalKit; import de.steamwar.sql.Schematic; import de.steamwar.sql.SteamwarUser; +import net.md_5.bungee.api.ChatMessageType; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -44,23 +46,24 @@ import java.util.List; import java.util.UUID; public class GUI { - private GUI(){} + private static final Message msg = FightSystem.getMessage(); + static void invitation(Player p, Player target){ - SWInventory inv = new SWInventory(target, 9, "Einladung von " + p.getName()); - inv.setItem(0, SWItem.getDye(10), (byte)10, "§aAnnehmen", (ClickType click) ->{ + SWInventory inv = new SWInventory(target, 9, msg.parse("INVITATION_TITLE", target, p.getName())); + inv.setItem(0, SWItem.getDye(10), (byte)10, msg.parse("INVITATION_ACCEPT", target), (ClickType click) ->{ Commands.acceptInvitation(target); target.closeInventory(); }); - inv.setItem(8, SWItem.getDye(1), (byte)1, "§cAblehnen", (ClickType click) ->{ + inv.setItem(8, SWItem.getDye(1), (byte)1, msg.parse("INVITATION_DECLINE", target), (ClickType click) ->{ Commands.declineInvitation(target); target.closeInventory(); }); inv.addCloseCallback((ClickType click) ->{ if(Fight.getInvitedTeam(target) != null){ - target.sendMessage(FightSystem.PREFIX + "§7Tippe §8/§aaccept§7, um die Einladung §aanzunehmen"); - target.sendMessage(FightSystem.PREFIX + "§7Tippe §8/§cdecline§7, um die Einladung §cabzulehnen"); + msg.sendPrefixless("INVITATION_CHAT_ACCEPT", target); + msg.sendPrefixless("INVITATION_CHAT_DECLINE", target); } }); inv.setCallback(-999, (ClickType click) -> target.closeInventory()); @@ -68,15 +71,15 @@ public class GUI { } public static void state(Player p){ - SWInventory inv = new SWInventory(p, 9, "Kampfstatus"); - inv.setItem(0, Material.GLASS, "§7PRE_LEADER_SETUP", (ClickType click) -> FightSystem.setPreLeaderState()); - inv.setItem(1, Material.GLASS, "§7PRE_SCHEM_SETUP", (ClickType click) -> FightSystem.setPreSchemState()); - inv.setItem(2, Material.GLASS, "§7POST_SCHEM_SETUP", (ClickType click) -> FightSystem.setPostSchemState()); - inv.setItem(3, Material.GLASS, "§ePRE_RUNNING", (ClickType click) -> FightSystem.setPreRunningState()); - inv.setItem(4, Material.GLASS, "§eRUNNING", (ClickType click) -> FightSystem.setRunningState()); - inv.setItem(5, Material.GLASS, "§7SPECTATE Blue", (ClickType click) -> FightSystem.setSpectateState(Fight.getBlueTeam(), "operator", null)); - inv.setItem(6, Material.GLASS, "§7SPECTATE Red", (ClickType click) -> FightSystem.setSpectateState(Fight.getRedTeam(), "operator", null)); - inv.setItem(7, Material.GLASS, "§7SPECTATE Tie", (ClickType click) -> FightSystem.setSpectateState(null, "operator", null)); + SWInventory inv = new SWInventory(p, 9, msg.parse("STATE_TITLE", p)); + inv.setItem(0, Material.GLASS, msg.parse("STATE_PRE_LEADER_SETUP", p), (ClickType click) -> FightSystem.setPreLeaderState()); + inv.setItem(1, Material.GLASS, msg.parse("STATE_PRE_SCHEM_SETUP", p), (ClickType click) -> FightSystem.setPreSchemState()); + 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.setCallback(-999, (ClickType click) -> p.closeInventory()); inv.open(); } @@ -84,7 +87,7 @@ public class GUI { public static void chooseInvitation(Player p){ List> players = SWListInv.createPlayerList(p.getUniqueId()); players.removeIf(swItemUUIDPair -> Fight.getFightPlayer(Bukkit.getPlayer(swItemUUIDPair.getObject())) != null); - SWListInv inv = new SWListInv<>(p, "Spieler einladen", players, (ClickType click, UUID player) -> { + SWListInv inv = new SWListInv<>(p, msg.parse("INVITE_TITLE", p), players, (ClickType click, UUID player) -> { Commands.invite(p, SteamwarUser.get(player).getUserName()); p.closeInventory(); }); @@ -98,7 +101,7 @@ public class GUI { if(team == null) return; players.removeIf(swItemUUIDPair -> !team.equals(Fight.getPlayerTeam(Bukkit.getPlayer(swItemUUIDPair.getObject())))); - SWListInv inv = new SWListInv<>(p, "Spieler rauswerfen", players, (ClickType click, UUID player) -> { + SWListInv inv = new SWListInv<>(p, msg.parse("REMOVE_TITLE", p), players, (ClickType click, UUID player) -> { Commands.kick(p, SteamwarUser.get(player).getUserName()); p.closeInventory(); }); @@ -125,19 +128,19 @@ public class GUI { entries.removeIf(entry -> !entry.getObject().getName().toLowerCase().contains(query.toLowerCase())); - SWListInv inv = new SWListInv<>(p, "Kitauswahl", false, entries, (clickType, kit) -> kit.preview(p)); + SWListInv inv = new SWListInv<>(p, msg.parse("KIT_SELECTION_TITLE", p), false, entries, (clickType, kit) -> kit.preview(p)); inv.setCallback(-999, (ClickType click) -> p.closeInventory()); if(entries.isEmpty()) { - inv.setItem(22, new SWItem(Material.BARRIER, "§cKeine Kits gefunden")); + inv.setItem(22, new SWItem(Material.BARRIER, msg.parse("KIT_NO_KITS", p))); } if(Config.PersonalKits){ - inv.setItem(48, Material.NETHER_STAR, "§eNeues Kit", clickType -> { - SWAnvilInv anvilInv = new SWAnvilInv(p, "Kitname eingeben"); + inv.setItem(48, Material.NETHER_STAR, msg.parse("KIT_CREATE", p), clickType -> { + SWAnvilInv anvilInv = new SWAnvilInv(p, msg.parse("KITNAME_TITLE", p)); anvilInv.setItem(Material.LEATHER_CHESTPLATE); anvilInv.setCallback(s -> { SteamwarUser user = SteamwarUser.get(p.getUniqueId()); if(PersonalKit.nameInUse(user.getId(), Config.SchematicType.toDB(), s)) { - p.sendMessage(FightSystem.PREFIX + "§cDieser Kitname wird bereits genutzt!"); + msg.sendPrefixless("KITNAME_IN_USE", p, ChatMessageType.ACTION_BAR); p.closeInventory(); return; } @@ -148,8 +151,8 @@ public class GUI { anvilInv.open(); }); } - inv.setItem(50, Material.NAME_TAG, "§eSuchen", clickType -> { - SWAnvilInv anvilInv = new SWAnvilInv(p, "§eNach Kit suchen"); + inv.setItem(50, Material.NAME_TAG, msg.parse("KIT_SEARCH", p), clickType -> { + SWAnvilInv anvilInv = new SWAnvilInv(p, msg.parse("KITSEARCH_TITLE", p)); anvilInv.setItem(Material.PAPER); anvilInv.setCallback(s -> kitSelection(p, s)); anvilInv.open(); @@ -159,21 +162,21 @@ public class GUI { public static void preSchemDialog(Player p){ if(!Config.test() && FightState.getFightState() != FightState.PRE_SCHEM_SETUP){ - p.sendMessage(FightSystem.PREFIX + "§cDu kannst ohne Gegner keine Schematic wählen"); + msg.sendPrefixless("SCHEM_NO_ENEMY", p, ChatMessageType.ACTION_BAR); return; } - SWInventory inv = new SWInventory(p, 9, Config.GameName + "-Auswahl"); - inv.setItem(8, Material.REDSTONE, "§eÖffentliches " + Config.GameName, (ClickType click) -> { + SWInventory inv = new SWInventory(p, 9, msg.parse("SCHEM_TITLE", p, Config.GameName)); + inv.setItem(8, Material.REDSTONE, msg.parse("SCHEM_PUBLIC", p, Config.GameName), (ClickType click) -> { p.closeInventory(); schemDialog(p, true); }); if(Fight.getMaxRank() == 0){ - inv.setItem(0, SWItem.getDye(8), (byte)8, "§7Keine privaten Schematics erlaubt", (ClickType click)->{}); + inv.setItem(0, SWItem.getDye(8), (byte)8, msg.parse("SCHEM_PRIVATE_FORBIDDEN", p, Config.GameName), (ClickType click)->{}); }else if(Schematic.getSchemsOfType(p.getUniqueId(), Config.SchematicType).isEmpty() && !Config.test()){ - inv.setItem(0, SWItem.getDye(8), (byte)8, "§7Kein privates " + Config.GameName + " vorhanden", (ClickType click)->{}); + inv.setItem(0, SWItem.getDye(8), (byte)8, msg.parse("SCHEM_NO_PRIVATE", p, Config.GameName), (ClickType click)->{}); }else{ - inv.setItem(0, SWItem.getMaterial("CAULDRON_ITEM"), "§ePrivates " + Config.GameName, (ClickType click) -> { + inv.setItem(0, SWItem.getMaterial("CAULDRON_ITEM"), msg.parse("SCHEM_PRIVATE", p, Config.GameName), (ClickType click) -> { p.closeInventory(); schemDialog(p, false); }); @@ -193,7 +196,7 @@ public class GUI { schems.removeIf(schem -> schem.getObject().getRank() > Fight.getMaxRank()); } - SWListInv inv = new SWListInv<>(p, Config.GameName + "-Auswahl", schems, (ClickType click, Schematic s) -> { + SWListInv inv = new SWListInv<>(p, msg.parse("SCHEM_TITLE", p, Config.GameName), schems, (ClickType click, Schematic s) -> { FightTeam fightTeam = Fight.getPlayerTeam(p); if(fightTeam == null) return; diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java index 1ed1d6a..b5484cf 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/GamemodeCommand.java @@ -22,7 +22,7 @@ package de.steamwar.fightsystem.commands; import com.google.common.collect.ImmutableList; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; -import org.apache.commons.lang.Validate; +import net.md_5.bungee.api.ChatMessageType; import org.bukkit.GameMode; import org.bukkit.command.CommandSender; import org.bukkit.command.defaults.BukkitCommand; @@ -42,14 +42,14 @@ public class GamemodeCommand extends BukkitCommand { List aliases = new ArrayList<>(); aliases.add("gm"); this.setAliases(aliases); - this.description = "Ändert den Spielmodus eines Spielers"; - this.usageMessage = "/gm [Spielmodus]"; } + @Override public boolean execute(CommandSender sender, String currentAlias, String[] args) { if (!(sender instanceof Player)) { return false; }else if (args.length == 0) { + FightSystem.getMessage().sendPrefixless("GAMEMODE_HELP", sender); sender.sendMessage(FightSystem.PREFIX + this.usageMessage); return false; } @@ -57,14 +57,14 @@ public class GamemodeCommand extends BukkitCommand { Player p = (Player) sender; if (!(Config.test() || p == FightSystem.getEventLeiter())) { - p.sendMessage(FightSystem.PREFIX + "§cDu darfst hier deinen Spielmodus nicht ändern"); + FightSystem.getMessage().sendPrefixless("GAMEMODE_NOT_ALLOWED", p, ChatMessageType.ACTION_BAR); return false; } GameMode mode = createMode(args[0]); if(mode == null){ - p.sendMessage(FightSystem.PREFIX + "§cUnbekannter Spielmodus"); + FightSystem.getMessage().sendPrefixless("GAMEMODE_UNKNOWN", p, ChatMessageType.ACTION_BAR, args[0]); return false; } @@ -91,16 +91,8 @@ public class GamemodeCommand extends BukkitCommand { @Override public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - if (args.length == 1) - return StringUtil.copyPartialMatches(args[0], GAMEMODE_NAMES, - new ArrayList<>(GAMEMODE_NAMES.size())); - if (args.length == 2) { - return super.tabComplete(sender, alias, args); - } + return StringUtil.copyPartialMatches(args[0], GAMEMODE_NAMES, new ArrayList<>(GAMEMODE_NAMES.size())); return ImmutableList.of(); } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/InviteCommand.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/InviteCommand.java index e6bee2c..67cf6b1 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/InviteCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/InviteCommand.java @@ -20,6 +20,7 @@ package de.steamwar.fightsystem.commands; import de.steamwar.fightsystem.ArenaMode; +import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentCommand; import org.bukkit.command.Command; @@ -41,7 +42,7 @@ public class InviteCommand implements CommandExecutor { Player player = (Player) sender; if(args.length != 1){ - Commands.sendHelp(player); + FightSystem.getMessage().sendPrefixless("INVITE_HELP", player); return false; } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/LeaderCommand.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/LeaderCommand.java index 19d7874..bfc46b8 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/LeaderCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/LeaderCommand.java @@ -24,6 +24,7 @@ import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentCommand; +import net.md_5.bungee.api.ChatMessageType; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -41,18 +42,15 @@ public class LeaderCommand implements CommandExecutor { return false; Player player = (Player) sender; - if(args.length == 0){ - if(Fight.getFightPlayer(player) == null){ - if(Fight.getBlueTeam().isLeaderless()) - Fight.getBlueTeam().addMember(player); - else if(Fight.getRedTeam().isLeaderless()) - Fight.getRedTeam().addMember(player); - else - player.sendMessage(FightSystem.PREFIX + "§cEs sind bereits 2 Teamleader vorhanden"); - }else - player.sendMessage(FightSystem.PREFIX + "§cDu bist bereits in einem Team"); + if(Fight.getFightPlayer(player) == null){ + if(Fight.getBlueTeam().isLeaderless()) + Fight.getBlueTeam().addMember(player); + else if(Fight.getRedTeam().isLeaderless()) + Fight.getRedTeam().addMember(player); + else + FightSystem.getMessage().sendPrefixless("LEADER_FULL", player, ChatMessageType.ACTION_BAR); }else - Commands.sendHelp(player); + FightSystem.getMessage().sendPrefixless("ALREADY_IN_TEAM", player, ChatMessageType.ACTION_BAR); return false; } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/LockschemCommand.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/LockschemCommand.java index ebb172e..9e7fff3 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/LockschemCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/LockschemCommand.java @@ -29,6 +29,7 @@ import de.steamwar.sql.Schematic; import de.steamwar.sql.SchematicType; import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.UserGroup; +import net.md_5.bungee.api.ChatMessageType; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -49,15 +50,12 @@ public class LockschemCommand implements CommandExecutor { SteamwarUser steamwarUser = SteamwarUser.get(player.getUniqueId()); UserGroup userGroup = steamwarUser.getUserGroup(); - if(userGroup != UserGroup.Admin && - userGroup != UserGroup.Developer && - userGroup != UserGroup.Moderator && - userGroup != UserGroup.Supporter) + if(!userGroup.isCheckSchematics()) return false; if(args.length != 1) { - sendHelp(player); + FightSystem.getMessage().sendPrefixless("LOCKSCHEM_HELP", player); return false; } @@ -65,16 +63,13 @@ public class LockschemCommand implements CommandExecutor { FightTeam fightTeam = Fight.getTeamByName(teamName); if(fightTeam == null) { - player.sendMessage(FightSystem.PREFIX + "§cDieses Team existiert nicht!"); + FightSystem.getMessage().sendPrefixless("UNKNOWN_TEAM", player, ChatMessageType.ACTION_BAR); return false; } + Schematic.getSchemFromDB(fightTeam.getSchematic()).setSchemType(SchematicType.Normal); - player.sendMessage(FightSystem.PREFIX + "Schematic von " + fightTeam.getColoredName() + " §cgesperrt!"); - fightTeam.broadcast("§cDie Schematic wurde von " + player.getName() + " gesperrt"); + FightSystem.getMessage().sendPrefixless("LOCKSCHEM_LOCKED", player, ChatMessageType.ACTION_BAR); + fightTeam.broadcastSystem("LOCKSCHEM_LOCKED_BY", player.getName()); return false; } - - private void sendHelp(Player player) { - player.sendMessage(FightSystem.PREFIX + "/lockschem [TEAM]"); - } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/RemoveCommand.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/RemoveCommand.java index 29ba6d2..f7c9353 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/RemoveCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/RemoveCommand.java @@ -20,6 +20,7 @@ package de.steamwar.fightsystem.commands; import de.steamwar.fightsystem.ArenaMode; +import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentCommand; import org.bukkit.command.Command; @@ -41,7 +42,7 @@ public class RemoveCommand implements CommandExecutor { Player player = (Player) sender; if(args.length != 1){ - Commands.sendHelp(player); + FightSystem.getMessage().sendPrefixless("REMOVE_HELP", player); return false; } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/ReplayCommand.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/ReplayCommand.java index 170705b..cc81995 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/ReplayCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/ReplayCommand.java @@ -27,12 +27,14 @@ import de.steamwar.fightsystem.record.FileSource; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentCommand; import de.steamwar.sql.SteamwarUser; +import net.md_5.bungee.api.ChatMessageType; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.io.IOException; +import java.util.logging.Level; public class ReplayCommand implements CommandExecutor { @@ -50,20 +52,21 @@ public class ReplayCommand implements CommandExecutor { if(!Config.test()){ SteamwarUser user = SteamwarUser.get(player.getUniqueId()); if(!user.getUserGroup().isTeamGroup()){ - sender.sendMessage(FightSystem.PREFIX + "§cDieser Befehl ist zu diesem Kampfzeitpunkt nicht verfügbar."); + FightSystem.getMessage().sendPrefixless("REPLAY_UNAVAILABLE", sender, ChatMessageType.ACTION_BAR); return false; } } if(!FileRecorder.getFile().exists()){ - sender.sendMessage(FightSystem.PREFIX + "§cKein Replay vorhanden."); + FightSystem.getMessage().sendPrefixless("REPLAY_UNAVAILABLE", sender, ChatMessageType.ACTION_BAR); return false; } try { new FileSource(FileRecorder.getFile()); } catch (IOException e) { - sender.sendMessage(FightSystem.PREFIX + "§cDas Replay konnte nicht gestartet werden."); + FightSystem.getMessage().sendPrefixless("REPLAY_UNAVAILABLE", sender, ChatMessageType.ACTION_BAR); + FightSystem.getPlugin().getLogger().log(Level.SEVERE, "Replay could not be started", e); } 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 776c4a0..9384c9a 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/WinCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/WinCommand.java @@ -5,6 +5,7 @@ import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentCommand; +import net.md_5.bungee.api.ChatMessageType; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -24,12 +25,12 @@ public class WinCommand implements CommandExecutor { Player p = (Player) sender; if (p != FightSystem.getEventLeiter()) { - p.sendMessage(FightSystem.PREFIX + "§cDu bist kein Kampfleiter!"); + FightSystem.getMessage().sendPrefixless("NOT_FIGHTLEADER", p, ChatMessageType.ACTION_BAR); return false; } if(args.length == 0){ - p.sendMessage(FightSystem.PREFIX + "/win [Team or Tie]"); + FightSystem.getMessage().sendPrefixless("WIN_HELP", p); 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 8c8997f..9a74910 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/Countdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/Countdown.java @@ -21,12 +21,10 @@ package de.steamwar.fightsystem.countdown; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; -import de.steamwar.fightsystem.listener.BasicListener; import de.steamwar.fightsystem.record.GlobalRecorder; import de.steamwar.fightsystem.utils.FightUI; import de.steamwar.fightsystem.utils.SWSound; -import net.md_5.bungee.api.chat.BaseComponent; -import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.ChatMessageType; import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -81,22 +79,30 @@ public abstract class Countdown { smallestTime = countdown.time; } - smallestTime--; for(Countdown countdown : currentCountdowns){ countdown.time -= smallestTime; + if(countdown.time <= 1) + countdown.prepareFinish(); countdown.show(); } FightUI.addSubtitle("§7Sprung zum nächsten Ereignis"); } - private void broadcast(String message){ - GlobalRecorder.getInstance().actionBar(message); - BaseComponent[] msg = TextComponent.fromLegacyText(message); - for(Player p : Bukkit.getOnlinePlayers()) - BasicListener.toActionbar(p, msg); + 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)); } + 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())); + } + + protected void prepareFinish() {} + public int getTimeLeft(){ return time; } @@ -106,22 +112,17 @@ public abstract class Countdown { show(); } - void show(){ + private void show(){ switch (time) { case 900: case 600: case 300: case 180: case 120: - broadcast("§rNoch §a" + time / 60 + " §rMinuten " + countdownCounting()); + broadcast("COUNTDOWN_MINUTES", 60); break; case 60: case 30: case 20: case 15: case 10: case 5: case 4: case 3: case 2: - if(this.sound != null) - Fight.playSound(this.sound, 100.0F, 1.0F); - - broadcast("§rNoch §a" + time + " §rSekunden " + countdownCounting()); + broadcast("COUNTDOWN_SECONDS", 1); break; case 1: - if(this.sound != null) - Fight.playSound(this.sound, 100.0F, 1.0F); - - broadcast("§rNoch §aeine §rSekunde " + countdownCounting()); + prepareFinish(); + broadcast("COUNTDOWN_SECOND", 1); break; case 0: if(this.sound != null) diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EnternCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EnternCountdown.java index ec78cc6..1ecc374 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EnternCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EnternCountdown.java @@ -22,11 +22,9 @@ 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.listener.BasicListener; import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.utils.TechHider; -import net.md_5.bungee.api.chat.TextComponent; -import org.bukkit.entity.Player; +import net.md_5.bungee.api.ChatMessageType; import java.util.List; @@ -43,41 +41,23 @@ public class EnternCountdown extends Countdown { @Override public String countdownCounting() { - return "bis Entern erlaubt ist!"; + return "ENTERN_COUNTDOWN"; } @Override public void countdownFinished() { - fightPlayer.getPlayer().sendMessage(FightSystem.PREFIX + "§aEntern ist nun erlaubt!"); + FightSystem.getMessage().sendPrefixless("ENTERN_ALLOWED", fightPlayer.getPlayer(), ChatMessageType.ACTION_BAR); TechHider.reloadChunks(fightPlayer.getPlayer(), chunkPos, false); } @Override - void show(){ - Player player = fightPlayer.getPlayer(); - switch (time) { - case 900: case 600: case 300: case 180: case 120: - BasicListener.toActionbar(player, TextComponent.fromLegacyText("§rNoch §a" + time / 60 + " §rMinuten " + countdownCounting())); - break; - case 60: case 30: case 20: case 15: case 10: case 5: case 4: case 3: case 2: - player.playSound(player.getLocation(), sound, 100.0F, 1.0F); + protected void prepareFinish() { + chunkPos = TechHider.prepareChunkReload(fightPlayer.getPlayer(), false); + } - BasicListener.toActionbar(player, TextComponent.fromLegacyText("§rNoch §a" + time + " §rSekunden " + countdownCounting())); - break; - case 1: - player.playSound(player.getLocation(), sound, 100.0F, 1.0F); - - BasicListener.toActionbar(player, TextComponent.fromLegacyText("§rNoch §a1 §rSekunde " + countdownCounting())); - - chunkPos = TechHider.prepareChunkReload(player, false); - break; - case 0: - player.playSound(player.getLocation(), sound, 100.0F, 2.0F); - - disable(); - countdownFinished(); - break; - default: - } + @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()); } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EventSpectateCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EventSpectateCountdown.java index a26a14d..61be26c 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EventSpectateCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/EventSpectateCountdown.java @@ -35,7 +35,7 @@ public class EventSpectateCountdown extends Countdown { @Override public String countdownCounting() { - return "bis der Server gestoppt wird!"; + return "SHUTDOWN_COUNTDOWN"; } @Override diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java index 5ab54d7..3b688f1 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java @@ -35,7 +35,7 @@ public class NoPlayersOnlineCountdown extends Countdown implements Listener { super(Config.NoPlayerOnlineDuration, null, false); new StateDependentListener(ArenaMode.AntiReplay, FightState.PreLeaderSetup, this); - new StateDependentCountdown(ArenaMode.AntiReplay, FightState.PreLeaderSetup, this){ + new StateDependentCountdown(ArenaMode.AntiReplay, FightState.PreLeaderSetup, this) { @Override public void enable() { if(Bukkit.getOnlinePlayers().isEmpty()) @@ -46,7 +46,7 @@ public class NoPlayersOnlineCountdown extends Countdown implements Listener { @Override public String countdownCounting() { - return "bis der Server gestoppt wird!"; + return "SHUTDOWN_COUNTDOWN"; } @EventHandler diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java index a388fbd..70c3f79 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PostSchemCountdown.java @@ -34,7 +34,7 @@ public class PostSchemCountdown extends Countdown { @Override public String countdownCounting() { - return "bis die Kits verteilt werden!"; + return "POST_SCHEM_COUNTDOWN"; } @Override diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java index 9a5dac4..faca110 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java @@ -35,7 +35,7 @@ public class PreRunningCountdown extends Countdown { @Override public String countdownCounting() { - return "bis die Arena freigegeben ist!"; + return "PRE_RUNNING_COUNTDOWN"; } @Override diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreSchemCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreSchemCountdown.java index f9c007a..61547c9 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreSchemCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/PreSchemCountdown.java @@ -35,7 +35,7 @@ public class PreSchemCountdown extends Countdown { @Override public String countdownCounting() { - return "bis eine Public-Schematic gewählt wird!"; + return "PRE_SCHEM_COUNTDOWN"; } @Override diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java index 92ac120..9d330c7 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java @@ -35,7 +35,7 @@ public class SpectateOverCountdown extends Countdown { @Override public String countdownCounting() { - return "bis die Arena zurückgesetzt wird!"; + return "SPECTATE_COUNTDOWN"; } @Override diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java index 5232087..14d269b 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java @@ -33,7 +33,7 @@ public class TimeOverCountdown extends Countdown { @Override public String countdownCounting() { - return "bis der Kampf vorbei ist!"; + return "RUNNING_COUNTDOWN"; } @Override diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/event/HellsBells.java b/FightSystem_Core/src/de/steamwar/fightsystem/event/HellsBells.java index a19a3ae..da03e38 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/event/HellsBells.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/event/HellsBells.java @@ -22,9 +22,9 @@ package de.steamwar.fightsystem.event; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.countdown.Countdown; -import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependent; +import de.steamwar.fightsystem.utils.SWSound; import de.steamwar.fightsystem.winconditions.Winconditions; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -32,8 +32,6 @@ import org.bukkit.World; import org.bukkit.entity.EntityType; import org.bukkit.scheduler.BukkitTask; -import java.util.Arrays; -import java.util.List; import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; @@ -50,23 +48,11 @@ public class HellsBells { private int currentDrops = 0; private HellsBellsCountdown currentCountdown; private BukkitTask currentDropping; - private final List startMessages = Arrays.asList("§c!!Achtung!! Bomber im Anflug, noch ca. eine Minute bis zur Ankunft.", - "§cBomber im Anflug, ca. eine Minute bis zur Ankunft.", - "§cBomber auf dem Radar gesichtet, geschätzte Ankunftszeit: eine Minute.", - "§cUnbekanntes Flugobjekt gesichtet, trifft in ca. einer Minute ein.", - "§cFlugobjekt gesichtet. Ankunft in ca. einer Minute.", - "§cBomber erschienen, Ankunft ca. eine Minute."); - private final List stateSwapMessages = Arrays.asList("§aDie Bomben fallen nun schneller.", - "§aMehr Bomber im Anflug.", - "§aZusätzliche Bomber gesichtet.", - "§aDas Bombardement scheint sich zu erhöhen."); public void startCountdown() { if (current == State.PRE) { - FightSystem.broadcast(startMessages.get(random.nextInt(startMessages.size()))); current = current.getNext(); } else if (current != State.LAST && currentDrops >= current.SWITCH_AFTER) { - FightSystem.broadcast(stateSwapMessages.get(random.nextInt(stateSwapMessages.size()))); currentDrops = 0; } @@ -80,7 +66,6 @@ public class HellsBells { AtomicInteger length = new AtomicInteger(20 + random.nextInt(direction.getLength(zLength, xLength) - 20)); int width = 5 + random.nextInt(5); - Bukkit.getLogger().log(Level.INFO, "Calculating Starts"); int xOffset = getStart(direction.getLength(xLength, zLength), direction.getLength(length.get(), width)); int zOffset = getStart(direction.getLength(zLength, xLength), direction.getLength(width, length.get())); int yOffset = getHeightStart(); @@ -145,7 +130,7 @@ public class HellsBells { @Override public String countdownCounting() { - return "bis die Bomben fallen"; + return "HELLS_BELLS_COUNTDOWN"; } @Override diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightPlayer.java b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightPlayer.java index f0c59bf..f86bb61 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightPlayer.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightPlayer.java @@ -34,10 +34,6 @@ public class FightPlayer { private int kills; private EnternCountdown enternCountdown = null; - public void sendMessage(String message) { - this.player.sendMessage(message); - } - FightPlayer(Player player, FightTeam team) { this.player = player; this.team = team; diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightSchematic.java b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightSchematic.java index 2c91709..1465c70 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightSchematic.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightSchematic.java @@ -72,7 +72,7 @@ public class FightSchematic extends StateDependent { try { clipboard = schem.load(); } catch (IOException e) { - team.broadcast("§cSchematic konnte nicht geladen werden"); + team.broadcastSystem("SCHEMATIC_UNLOADABLE"); Bukkit.getLogger().log(Level.SEVERE, e, () -> "Couldn't load Schematic " + schem.getSchemName()); } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java index 7696963..c9c56d9 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java @@ -34,6 +34,7 @@ import de.steamwar.fightsystem.utils.*; import de.steamwar.inventory.SWItem; import de.steamwar.sql.Schematic; import de.steamwar.sql.SteamwarUser; +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.*; @@ -186,9 +187,12 @@ public class FightTeam { } } - public void broadcast(String message) { - BaseComponent[] msg = TextComponent.fromLegacyText(message); - players.forEach((player, fp) -> BountifulWrapper.impl.toActionbar(player, msg)); + public void broadcast(String message, Object... params) { + players.forEach((player, fp) -> FightSystem.getMessage().sendPrefixless(message, player, ChatMessageType.ACTION_BAR, params)); + } + + public void broadcastSystem(String message, Object... params) { + players.forEach((player, fp) -> FightSystem.getMessage().send(message, player, params)); } public void broadcastChat(String message) { diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java b/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java index 6324d15..656af58 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java @@ -24,6 +24,7 @@ import de.steamwar.core.Core; import de.steamwar.fightsystem.ArenaMode; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; +import de.steamwar.fightsystem.countdown.Countdown; import de.steamwar.fightsystem.countdown.EventSpectateCountdown; import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightTeam; @@ -102,6 +103,7 @@ public class PacketProcessor { packetDecoder[0xa0] = () -> send(ChatMessageType.CHAT); packetDecoder[0xa1] = () -> send(ChatMessageType.ACTION_BAR); packetDecoder[0xa2] = () -> send(ChatMessageType.SYSTEM); + packetDecoder[0xa3] = this::countdown; packetDecoder[0xb0] = () -> pasteSchem(Fight.getBlueTeam()); packetDecoder[0xb1] = () -> pasteSchem(Fight.getRedTeam()); packetDecoder[0xb2] = this::teams; @@ -248,6 +250,14 @@ public class PacketProcessor { }); } + private void countdown() throws IOException { + String message = source.readUTF(); + int displaytime = source.readInt(); + String appendix = source.readUTF(); + + Bukkit.getOnlinePlayers().forEach(p -> Countdown.sendCountdownMessage(p, message, displaytime, appendix)); + } + private void arenaInfo() throws IOException { rotateZ = source.readBoolean() != Config.blueNegZ(); arenaMinY = Byte.toUnsignedInt(source.readByte()); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/record/Recorder.java b/FightSystem_Core/src/de/steamwar/fightsystem/record/Recorder.java index e75a016..903ddcf 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/record/Recorder.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/record/Recorder.java @@ -108,8 +108,9 @@ public interface Recorder { * * * ChatPacket (0xA0) + String message - * ActionBarPacket (0xA1) + String message + * DEPRECATED ActionBarPacket (0xA1) + String message * SystemPacket (0xA2) + String message + * CountdownPacket (0xA3) + String message, int displaytime, String appendix * * BlueSchemPacket (0xB0) + int blueSchemId * RedSchemPacket (0xB1) + int redSchemId @@ -228,14 +229,14 @@ public interface Recorder { write(0xa0, s); } - default void actionBar(String s) { - write(0xa1, s); - } - default void systemChat(String s) { write(0xa2, s); } + default void countdown(String message, int displaytime, String appendix) { + write(0xa3, message, displaytime, appendix); + } + default void teamIds(int blueTeamId, int redTeamId) { write(0xb2, blueTeamId, redTeamId); } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeTechKO.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeTechKO.java index 0e4d069..88fbf70 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeTechKO.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/WinconditionTimeTechKO.java @@ -115,6 +115,7 @@ public class WinconditionTimeTechKO extends Wincondition { @Override public final String countdownCounting() { + //TODO: ARRRG! return "bis " + team.getColoredName() + " §feinen Schuss abgegeben haben muss!"; }