diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties index 664a643..0611c3e 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.properties @@ -251,6 +251,7 @@ JOIN_REQUEST=§7Request join JOIN_REQUEST_TITLE=Request join JOIN_REQUEST_ALREADY=§cYou have already sent a join request JOIN_REQUEST_TEAM=§eJoin {0} +JOIN_REQUEST_CONFIRMATION=§7Join request submitted JOIN_REQUEST_NOTIFICATION=§e{0} §7requests joining team {1}§8. §7Accept or decline using §8/§erequests REQUESTS=§7Open join requests diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties index 0e61182..0bd4755 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem_de.properties @@ -235,6 +235,7 @@ JOIN_REQUEST=§7Teambeitritt anfragen JOIN_REQUEST_TITLE=Teambeitritt anfragen JOIN_REQUEST_ALREADY=§cDu hast bereits ein Team um Beitritt angefragt JOIN_REQUEST_TEAM={0} §ebeitreten +JOIN_REQUEST_CONFIRMATION=§7Teambeitritt angefragt JOIN_REQUEST_NOTIFICATION=§e{0} §7möchte Team {1} §7beitreten§8. §7Akzeptiere oder lehne ab mit §8/§erequests REQUESTS=§7Offene Beitrittsanfragen diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/commands/RequestsCommand.java b/FightSystem_Core/src/de/steamwar/fightsystem/commands/RequestsCommand.java index 6ccaec9..36c2a1e 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/commands/RequestsCommand.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/commands/RequestsCommand.java @@ -22,6 +22,7 @@ package de.steamwar.fightsystem.commands; import de.steamwar.fightsystem.ArenaMode; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; +import de.steamwar.fightsystem.fight.FightPlayer; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.fight.JoinRequest; import de.steamwar.fightsystem.states.FightState; @@ -36,7 +37,8 @@ import java.util.function.BiConsumer; public class RequestsCommand implements CommandExecutor { public RequestsCommand() { - new StateDependentCommand(ArenaMode.VariableTeams, FightState.Setup, "requests", this); + new StateDependentCommand(ArenaMode.VariableTeams, FightState.AntiSpectate, "request", this); + new StateDependentCommand(ArenaMode.VariableTeams, FightState.AntiSpectate, "requests", this); } @Override @@ -44,6 +46,11 @@ public class RequestsCommand implements CommandExecutor { if(!(sender instanceof Player)) return false; Player player = (Player) sender; + FightPlayer fp = Fight.getFightPlayer(player); + if(fp == null || !(fp.isLeader() || fp.isLiving())) { + GUI.joinRequest(player); + return false; + } if(Commands.checkGetLeader(player) == null) return false; diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightPlayer.java b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightPlayer.java index 2b13154..322e6e8 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightPlayer.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightPlayer.java @@ -23,11 +23,15 @@ import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.countdown.EnternCountdown; import de.steamwar.sql.PersonalKit; import de.steamwar.sql.SteamwarUser; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import java.util.UUID; + public class FightPlayer { - private final Player player; + private final UUID uuid; + private Player player; private final FightTeam team; private boolean isOut; private Kit kit; @@ -35,6 +39,7 @@ public class FightPlayer { private EnternCountdown enternCountdown = null; FightPlayer(Player player, FightTeam team) { + this.uuid = player.getUniqueId(); this.player = player; this.team = team; this.isOut = false; @@ -70,7 +75,10 @@ public class FightPlayer { } public Player getPlayer() { - return this.player; + Player bukkit = Bukkit.getPlayer(uuid); + if(bukkit != player) + player = bukkit; + return player; } public boolean isLiving() { diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java index b396a3e..de3609a 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightTeam.java @@ -46,6 +46,7 @@ import org.bukkit.scoreboard.NameTagVisibility; import org.bukkit.scoreboard.Team; import java.util.*; +import java.util.function.Consumer; public class FightTeam { @@ -90,7 +91,7 @@ public class FightTeam { private FightPlayer leader; private int schemRank; - private final Map players = new HashMap<>(); + private final Map players = new HashMap<>(); private String name; private String prefix; @@ -164,11 +165,11 @@ public class FightTeam { } public void teleportToSpawn(){ - players.forEach((player, fp) -> player.teleport(spawn)); + players.forEach((player, fp) -> Objects.requireNonNull(Bukkit.getPlayer(player)).teleport(spawn)); } public FightPlayer getFightPlayer(Player player) { - return players.get(player); + return players.get(player.getUniqueId()); } public boolean allPlayersOut() { @@ -180,7 +181,7 @@ public class FightTeam { } public boolean isPlayerInTeam(Player player) { - return players.containsKey(player); + return players.containsKey(player.getUniqueId()); } public boolean canPlayerEntern(Player player) { @@ -199,22 +200,23 @@ public class FightTeam { ready = false; schematic.reset(); - Set playerSet = new HashSet<>(players.keySet()); - for(Player player : playerSet){ - if(!Bukkit.getOnlinePlayers().contains(player)) + Set playerSet = new HashSet<>(players.keySet()); + for(UUID uuid : playerSet){ + Player player = Bukkit.getPlayer(uuid); + if(player != null) removePlayer(player); } FightPlayer leaderBackup = leader; - playerSet.removeIf(player -> !Bukkit.getOnlinePlayers().contains(player)); + playerSet.removeIf(uuid -> Bukkit.getPlayer(uuid) == null); players.clear(); leader = null; if(leaderBackup != null){ - playerSet.remove(leaderBackup.getPlayer()); + playerSet.remove(leaderBackup.getPlayer().getUniqueId()); addMember(leaderBackup.getPlayer(), true); } - playerSet.forEach(p -> addMember(p, true)); + playerSet.forEach(uuid -> addMember(Bukkit.getPlayer(uuid), true)); if(ArenaMode.VariableTeams.contains(Config.mode) && isLeaderless()){ List onlinePlayers = new ArrayList<>(Bukkit.getOnlinePlayers()); @@ -229,15 +231,23 @@ public class FightTeam { } public void broadcast(String message, Object... params) { - players.forEach((player, fp) -> FightSystem.getMessage().sendPrefixless(message, player, ChatMessageType.ACTION_BAR, params)); + broadcast(player -> 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)); + broadcast(player -> FightSystem.getMessage().send(message, player, params)); } public void broadcastChat(Player sender, String message) { - players.forEach((player, fp) -> FightSystem.getMessage().sendPrefixless("TEAM_CHAT", player, ChatMessageType.CHAT, prefix, sender.getName(), message)); + broadcast(player -> FightSystem.getMessage().sendPrefixless("TEAM_CHAT", player, ChatMessageType.CHAT, prefix, sender.getName(), message)); + } + + private void broadcast(Consumer f) { + players.forEach((uuid, fightPlayer) -> { + Player player = Bukkit.getPlayer(uuid); + if(player != null) + f.accept(player); + }); } public void addMember(Player player) { @@ -248,7 +258,7 @@ public class FightTeam { final List chunksToReload = FightSystem.getTechHider().prepareChunkReload(player, false); FightPlayer fightPlayer = getFightPlayer(player) != null ? getFightPlayer(player) : new FightPlayer(player, this); fightPlayer.revive(); - players.put(player, fightPlayer); + players.put(player.getUniqueId(), fightPlayer); Permanent.getSpectatorTeam().removeEntry(player.getName()); team.addEntry(player.getName()); @@ -281,7 +291,7 @@ public class FightTeam { PersonalKitCreator.closeIfInKitCreator(player); List chunksToReload = FightSystem.getTechHider().prepareChunkReload(player, true); - players.remove(player); + players.remove(player.getUniqueId()); team.removeEntry(player.getName()); Permanent.getSpectatorTeam().addEntry(player.getName()); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/fight/JoinRequest.java b/FightSystem_Core/src/de/steamwar/fightsystem/fight/JoinRequest.java index d86df76..cf4acc6 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/fight/JoinRequest.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/fight/JoinRequest.java @@ -76,6 +76,7 @@ public class JoinRequest { } activeRequests.put(player, this); + FightSystem.getMessage().sendPrefixless("JOIN_REQUEST_CONFIRMATION", player, ChatMessageType.ACTION_BAR); } public boolean required(FightTeam decider) { diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java index 4ae1875..0c4fc57 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java @@ -25,6 +25,7 @@ import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightPlayer; import de.steamwar.fightsystem.fight.FightTeam; +import de.steamwar.fightsystem.fight.HotbarKit; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentListener; import de.steamwar.fightsystem.utils.BountifulWrapper; @@ -76,6 +77,7 @@ public class Permanent implements Listener { FightTeam team = Fight.getPlayerTeam(player); event.setRespawnLocation(team == null ? Config.SpecSpawn : team.getSpawn()); + HotbarKit.spectatorKit.loadToPlayer(player); } } diff --git a/FightSystem_Core/src/plugin.yml b/FightSystem_Core/src/plugin.yml index e405591..abc32f9 100644 --- a/FightSystem_Core/src/plugin.yml +++ b/FightSystem_Core/src/plugin.yml @@ -12,6 +12,7 @@ api-version: "1.13" commands: ak: + request: requests: leave: ready: