12
1

join anytime #359

Zusammengeführt
Lixfel hat 9 Commits von joinAnytime nach master 2023-06-25 20:11:51 +02:00 zusammengeführt
8 geänderte Dateien mit 49 neuen und 18 gelöschten Zeilen
Nur Änderungen aus Commit 1a2eabaea4 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -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}
Veraltet
Review

§7Join §e{0}?

`§7Join §e{0}`?
Veraltet
Review

Colorcode vor dem Parameter macht keinen Sinn, da der gefärbte Teamname eingesetzt wird.

Colorcode vor dem Parameter macht keinen Sinn, da der gefärbte Teamname eingesetzt wird.
JOIN_REQUEST_CONFIRMATION=§7Join request submitted
JOIN_REQUEST_NOTIFICATION=§e{0} §7requests joining team {1}§8. §7Accept or decline using §8/§erequests
Veraltet
Review

...requests joining your team?

...requests joining your team?
Veraltet
Review

Nein, kann auch das andere Team sein (nach Kampfbeginn)

Nein, kann auch das andere Team sein (nach Kampfbeginn)
REQUESTS=§7Open join requests

Datei anzeigen

@ -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

Datei anzeigen

@ -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;

Datei anzeigen

@ -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;
Review

Weiß nicht, ob es so geil ist, das Interface des geleavten Spielers immer noch herauszugeben.

Weiß nicht, ob es so geil ist, das Interface des geleavten Spielers immer noch herauszugeben.
Review

Das ist zwingend notwendig für das korrekte Funktionieren des Kampfsystems und war auch bislang immer so, nur dass beim Rejoin des Spielers der dann halt nichts mehr mit dem alten Spieler zu tun hatte (was mit diesem PR dann allerdings katastrophal wäre).

Das ist zwingend notwendig für das korrekte Funktionieren des Kampfsystems und war auch bislang immer so, nur dass beim Rejoin des Spielers der dann halt nichts mehr mit dem alten Spieler zu tun hatte (was mit diesem PR dann allerdings katastrophal wäre).
}
public boolean isLiving() {

Datei anzeigen

@ -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<Player, FightPlayer> players = new HashMap<>();
private final Map<UUID, FightPlayer> 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<Player> playerSet = new HashSet<>(players.keySet());
for(Player player : playerSet){
if(!Bukkit.getOnlinePlayers().contains(player))
Set<UUID> 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<Player> 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<Player> 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<ProtocolUtils.ChunkPos> 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<ProtocolUtils.ChunkPos> chunksToReload = FightSystem.getTechHider().prepareChunkReload(player, true);
players.remove(player);
players.remove(player.getUniqueId());
team.removeEntry(player.getName());
Permanent.getSpectatorTeam().addEntry(player.getName());

Datei anzeigen

@ -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) {

Datei anzeigen

@ -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);
}
}

Datei anzeigen

@ -12,6 +12,7 @@ api-version: "1.13"
commands:
ak:
request:
Review

Die sind doch mit dem CommandFramework garnicht nötig?

Die sind doch mit dem CommandFramework garnicht nötig?
Review

Das FightSystem nutzt das CommandFramework aufgrund der komplexeren (De-)Aktivierungs- und Initialisierungsbedingungen nicht.

Das FightSystem nutzt das CommandFramework aufgrund der komplexeren (De-)Aktivierungs- und Initialisierungsbedingungen nicht.
requests:
leave:
ready: