Added Multi Leader Feature #196
@ -38,6 +38,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import java.time.Instant;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static de.steamwar.bungeecore.Storage.teamInvitations;
|
||||
|
||||
@ -90,13 +91,14 @@ public class TeamCommand extends BasicCommand {
|
||||
Message.send("TEAM_HELP_LEAVE", sender);
|
||||
|
||||
Team team = Team.get(user.getTeam());
|
||||
if(team.getTeamLeader() == user.getId()){
|
||||
if(user.isLeader()){
|
||||
Message.send("TEAM_HELP_INVITE", sender);
|
||||
Message.send("TEAM_HELP_REMOVE", sender);
|
||||
Message.send("TEAM_HELP_KUERZEL", sender);
|
||||
Message.send("TEAM_HELP_NAME", sender);
|
||||
Message.send("TEAM_HELP_COLOR", sender);
|
||||
Message.send("TEAM_HELP_LEADER", sender);
|
||||
Message.send("TEAM_HELP_STEP_BACK", sender);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -122,6 +124,9 @@ public class TeamCommand extends BasicCommand {
|
||||
case "join":
|
||||
join(player, user, args);
|
||||
break;
|
||||
case "stepback":
|
||||
stepBack(player,user,team);
|
||||
break;
|
||||
case "leave":
|
||||
leave(player, user, team);
|
||||
break;
|
||||
@ -137,8 +142,8 @@ public class TeamCommand extends BasicCommand {
|
||||
case "changename":
|
||||
changename(player, user, team, args);
|
||||
break;
|
||||
case "changeleader":
|
||||
changeleader(player, user, team, args);
|
||||
case "promote":
|
||||
promote(player, user, team, args);
|
||||
break;
|
||||
case "changecolor":
|
||||
changeColor(player, user, team);
|
||||
@ -225,18 +230,31 @@ public class TeamCommand extends BasicCommand {
|
||||
Message.send("TEAM_JOIN_JOINED", player, Team.get(t).getTeamName());
|
||||
}
|
||||
|
||||
private void stepBack(ProxiedPlayer player, SteamwarUser user, Team team) {
|
||||
if(notLeader(player, user, team))
|
||||
return;
|
||||
|
||||
if(team.size() > 1 && team.getMembers().stream().map(SteamwarUser::get).filter(member -> user != member).noneMatch(SteamwarUser::isLeader)){
|
||||
Message.send("TEAM_OTHER_LEADER_REQUIRED", player);
|
||||
return;
|
||||
}
|
||||
|
||||
user.setLeader(false);
|
||||
Message.send("TEAM_STEP_BACK", player);
|
||||
}
|
||||
|
||||
private void leave(ProxiedPlayer player, SteamwarUser user, Team team){
|
||||
if(notInTeam(player, user))
|
||||
return;
|
||||
|
||||
if(team.getTeamLeader() == user.getId() && team.size() > 1){
|
||||
Message.send("TEAM_LEAVE_OTHER_LEADER", player);
|
||||
if(team.size() > 1 && user.isLeader() && team.getMembers().stream().map(SteamwarUser::get).filter(member -> user != member).noneMatch(SteamwarUser::isLeader)){
|
||||
Message.send("TEAM_OTHER_LEADER_REQUIRED", player);
|
||||
return;
|
||||
}
|
||||
|
||||
user.setTeam(0);
|
||||
|
||||
if(team.getTeamLeader() == user.getId()){
|
||||
if(user.isLeader() && team.size() > 0){
|
||||
team.disband();
|
||||
}
|
||||
|
||||
@ -296,7 +314,7 @@ public class TeamCommand extends BasicCommand {
|
||||
return;
|
||||
}
|
||||
|
||||
if (team.getTeamLeader() == target.getId()) {
|
||||
if (target.isLeader()) {
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Veraltet
|
||||
Message.send("TEAM_REMOVE_NOT_LEADER", player);
|
||||
return;
|
||||
}
|
||||
@ -363,7 +381,7 @@ public class TeamCommand extends BasicCommand {
|
||||
Message.send("TEAM_NAME_CHANGED", player);
|
||||
}
|
||||
|
||||
private void changeleader(ProxiedPlayer player, SteamwarUser user, Team team, String[] args){
|
||||
private void promote(ProxiedPlayer player, SteamwarUser user, Team team, String[] args){
|
||||
if(notLeader(player, user, team))
|
||||
return;
|
||||
|
||||
@ -386,8 +404,8 @@ public class TeamCommand extends BasicCommand {
|
||||
return;
|
||||
}
|
||||
|
||||
team.setTeamLeader(target.getId());
|
||||
Message.send("TEAM_LEADER_CHANGED", player, args[1]);
|
||||
target.setLeader(true);
|
||||
Message.send("TEAM_LEADER_PROMOTED", player, args[1]);
|
||||
}
|
||||
|
||||
private String playerName(SteamwarUser user){
|
||||
@ -408,17 +426,15 @@ public class TeamCommand extends BasicCommand {
|
||||
}
|
||||
|
||||
Message.sendPrefixless("TEAM_INFO_TEAM", player, team.getTeamName(), team.getTeamColor(), team.getTeamKuerzel());
|
||||
Message.sendPrefixless("TEAM_INFO_LEADER", player, playerName(SteamwarUser.get(team.getTeamLeader())));
|
||||
|
||||
if(team.getMembers().size() > 1) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
List<Integer> members = team.getMembers();
|
||||
for (int i : members) {
|
||||
if (i == team.getTeamLeader())
|
||||
continue;
|
||||
sb.append(playerName(SteamwarUser.get(i))).append(" ");
|
||||
}
|
||||
Message.sendPrefixless("TEAM_INFO_MEMBER", player, sb.toString());
|
||||
List<SteamwarUser> users = team.getMembers().stream().map(SteamwarUser::get).collect(Collectors.toList());
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Warum wurde hier beim map nicht auch 'SteamwarUser::get' verwendet, was oben schon verwendet wurde? Warum wurde hier beim map nicht auch 'SteamwarUser::get' verwendet, was oben schon verwendet wurde?
|
||||
|
||||
Message.sendPrefixless("TEAM_INFO_LEADER", player, getMemberList(users, true));
|
||||
|
||||
String members = getMemberList(users, false);
|
||||
|
||||
if(members.length() > 0) {
|
||||
Message.sendPrefixless("TEAM_INFO_MEMBER", player, members);
|
||||
}
|
||||
|
||||
Set<Event> events = TeamTeilnahme.getEvents(team.getTeamId());
|
||||
@ -430,6 +446,16 @@ public class TeamCommand extends BasicCommand {
|
||||
}
|
||||
}
|
||||
|
||||
private String getMemberList(List<SteamwarUser> users, boolean leaders) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for(SteamwarUser user : users) {
|
||||
zOnlyKroks markierte diese Unterhaltung als gelöst
Veraltet
YoyoNow
hat
Hier ist ein doppelspace nach 'user' Hier ist ein doppelspace nach 'user'
|
||||
if(user.isLeader() == leaders) {
|
||||
sb.append(playerName(user)).append(" ");
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private void list(ProxiedPlayer player, String[] args){
|
||||
|
||||
final int TEAMS_PER_PAGE = 10;
|
||||
@ -458,7 +484,7 @@ public class TeamCommand extends BasicCommand {
|
||||
Team tm = all.get(i);
|
||||
|
||||
Message.sendPrefixless("TEAM_LIST_TEAM", player, Message.parse("TEAM_LIST_TEAM_HOVER", player),
|
||||
new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/team info " + tm.getTeamKuerzel()), tm.getTeamColor(), tm.getTeamKuerzel(), tm.getTeamName(), SteamwarUser.get(tm.getTeamLeader()).getUserName());
|
||||
new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/team info " + tm.getTeamKuerzel()), tm.getTeamColor(), tm.getTeamKuerzel(), tm.getTeamName());
|
||||
}
|
||||
|
||||
TextComponent beforePage = new TextComponent("««");
|
||||
@ -593,7 +619,7 @@ public class TeamCommand extends BasicCommand {
|
||||
private boolean notLeader(ProxiedPlayer player, SteamwarUser user, Team team){
|
||||
if(notInTeam(player, user))
|
||||
return true;
|
||||
if(team.getTeamLeader() != user.getId()){
|
||||
if(!user.isLeader()){
|
||||
Message.send("TEAM_NOT_LEADER", player);
|
||||
return true;
|
||||
}
|
||||
@ -615,6 +641,7 @@ public class TeamCommand extends BasicCommand {
|
||||
tab.add("create");
|
||||
tab.add("join");
|
||||
tab.add("invite");
|
||||
tab.add("stepback");
|
||||
tab.add("leave");
|
||||
tab.add("info");
|
||||
tab.add("remove");
|
||||
|
@ -44,6 +44,7 @@ public class SteamwarUser {
|
||||
private String userName;
|
||||
private UserGroup userGroup;
|
||||
private int team;
|
||||
private boolean leader;
|
||||
private Map<Punishment.PunishmentType, Punishment> punishments;
|
||||
|
||||
private static final Map<String, SteamwarUser> usersByName = new HashMap<>();
|
||||
@ -66,6 +67,7 @@ public class SteamwarUser {
|
||||
userName = rs.getString("UserName");
|
||||
userGroup = UserGroup.getUsergroup(rs.getString("UserGroup"));
|
||||
team = rs.getInt("Team");
|
||||
leader = rs.getBoolean("Leader");
|
||||
usersById.put(id, this);
|
||||
usersByName.put(userName.toLowerCase(), this);
|
||||
usersByUUID.put(uuid, this);
|
||||
@ -127,6 +129,7 @@ public class SteamwarUser {
|
||||
public void setTeam(int team){
|
||||
this.team = team;
|
||||
SQL.update("Update UserData SET Team = ? WHERE id = ?", team, id);
|
||||
setLeader(false);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
@ -261,4 +264,13 @@ public class SteamwarUser {
|
||||
throw new SecurityException("Could not load First Join");
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isLeader() {
|
||||
return leader;
|
||||
}
|
||||
|
||||
public void setLeader(boolean leader) {
|
||||
this.leader = leader;
|
||||
SQL.update("Update UserData SET Leader = ? WHERE id = ?", leader, id);
|
||||
}
|
||||
}
|
||||
|
@ -33,17 +33,15 @@ public class Team {
|
||||
private final int teamId;
|
||||
private String teamKuerzel;
|
||||
private String teamName;
|
||||
private int teamLeader;
|
||||
private String teamColor;
|
||||
|
||||
private static final List<Team> teamCache = new LinkedList<>();
|
||||
private static final Team pub = new Team(0, "PUB", "Öffentlich", 0, "8");
|
||||
private static final Team pub = new Team(0, "PUB", "Öffentlich", "8");
|
||||
|
||||
private Team(int id, String kuerzel, String name, int leader, String color){
|
||||
private Team(int id, String kuerzel, String name, String color){
|
||||
teamId = id;
|
||||
teamKuerzel = kuerzel;
|
||||
teamName = name;
|
||||
teamLeader = leader;
|
||||
teamColor = color;
|
||||
if (id != 0) {
|
||||
teamCache.add(this);
|
||||
@ -51,7 +49,7 @@ public class Team {
|
||||
}
|
||||
|
||||
private Team(ResultSet rs) throws SQLException {
|
||||
this(rs.getInt("TeamID"), rs.getString("TeamKuerzel"), rs.getString("TeamName"), rs.getInt("TeamLeader"), rs.getString("TeamColor"));
|
||||
this(rs.getInt("TeamID"), rs.getString("TeamKuerzel"), rs.getString("TeamName"), rs.getString("TeamColor"));
|
||||
}
|
||||
|
||||
public static void create(String kuerzel, String name, int leader){
|
||||
@ -60,7 +58,7 @@ public class Team {
|
||||
|
||||
public static Team get(int id){
|
||||
if(id == -1)
|
||||
return new Team(-1, "?", "?", 0, "8");
|
||||
return new Team(-1, "?", "?", "8");
|
||||
if(id == 0)
|
||||
return pub;
|
||||
for(Team team : teamCache)
|
||||
@ -110,7 +108,7 @@ public class Team {
|
||||
}
|
||||
|
||||
private void updateDB(){
|
||||
SQL.update("INSERT INTO Team (TeamID, TeamKuerzel, TeamName, TeamLeader, TeamColor) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE TeamName = VALUES(TeamName), TeamKuerzel = VALUES(TeamKuerzel), TeamLeader = VALUES(TeamLeader), TeamColor = VALUES(TeamColor)", teamId, teamKuerzel, teamName, teamLeader, teamColor);
|
||||
SQL.update("INSERT INTO Team (TeamID, TeamKuerzel, TeamName, TeamColor) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE TeamName = VALUES(TeamName), TeamKuerzel = VALUES(TeamKuerzel), TeamColor = VALUES(TeamColor)", teamId, teamKuerzel, teamName, teamColor);
|
||||
}
|
||||
|
||||
public int getTeamId() {
|
||||
@ -135,15 +133,6 @@ public class Team {
|
||||
updateDB();
|
||||
}
|
||||
|
||||
public int getTeamLeader() {
|
||||
return teamLeader;
|
||||
}
|
||||
|
||||
public void setTeamLeader(int teamLeader) {
|
||||
this.teamLeader = teamLeader;
|
||||
updateDB();
|
||||
}
|
||||
|
||||
public String getTeamColor() {
|
||||
return teamColor;
|
||||
}
|
||||
|
@ -324,7 +324,8 @@ TEAM_HELP_REMOVE=§8/§7team remove §8- §7Entferne jemanden aus deinem Team.
|
||||
TEAM_HELP_KUERZEL=§8/§7team changekuerzel §8- §7Ändere dein Teamkürzel.
|
||||
TEAM_HELP_NAME=§8/§7team changename §8- §7Ändere deinen Teamnamen.
|
||||
TEAM_HELP_COLOR=§8/§7eteam changecolor §8- §7Ändere deine Teamfarbe.
|
||||
TEAM_HELP_LEADER=§8/§7eteam changeleader §8- §7Ernenne jemanden zum Teamleader.
|
||||
TEAM_HELP_LEADER=§8/§7eteam promote §8- §7Ernenne jemanden zum Teamleader.
|
||||
TEAM_HELP_STEP_BACK=§8/§7eteam stepback §8- §7Tritt als Leader zurück.
|
||||
|
||||
#Team Create
|
||||
TEAM_CREATE_USAGE=§8/§7team create §8[§eTeamkürzel§8] §8[§eTeamname§8]
|
||||
@ -338,9 +339,12 @@ TEAM_JOIN_NOT_BY_TEAM=§cVon diesem Team wurdest du nicht eingeladen.
|
||||
TEAM_JOIN_JOINED=§7Du bist dem Team §e{0} §7beigetreten!
|
||||
|
||||
#Team Leave
|
||||
TEAM_LEAVE_OTHER_LEADER=§cBitte ernenne zunächst ein anderes Teammitglied zum Leader!
|
||||
TEAM_OTHER_LEADER_REQUIRED=§cBitte ernenne zunächst ein anderes Teammitglied zum Leader!
|
||||
TEAM_LEAVE_LEFT=§7Du hast dein Team verlassen!
|
||||
|
||||
#Team Step Back
|
||||
TEAM_STEP_BACK=§7Du hast deinen Posten als Teamleader abgegeben§8!
|
||||
|
||||
#Team Invite
|
||||
TEAM_INVITE_USAGE=§8/§7team invite §8[§eSpieler§8]
|
||||
TEAM_INVITE_NO_PLAYER=§cDiesen Spieler gibt es nicht.
|
||||
@ -352,7 +356,7 @@ TEAM_INVITE_INVITED_TARGET=§7Du wurdest in das Team §{0}{1} §7eingeladen!
|
||||
#Team Remove
|
||||
TEAM_REMOVE_USAGE=§8/§7team remove §8[§eSpieler§8]
|
||||
TEAM_REMOVE_NOT_PLAYER=§cDiesen Spieler gibt es nicht.
|
||||
TEAM_REMOVE_NOT_LEADER=§cLeader entfernen sich nicht selbst.
|
||||
TEAM_REMOVE_NOT_LEADER=§cLeader können nicht rausgeworfen werden.
|
||||
TEAM_REMOVE_INVITE=§7Die Einladung wurde zurückgezogen.
|
||||
TEAM_REMOVE_NO_INVITE=§cDieser Spieler hat keine Einladung erhalten.
|
||||
TEAM_REMOVE_NOT_IN_TEAM=§cDieser Spieler ist nicht in deinem Team.
|
||||
@ -375,7 +379,7 @@ TEAM_NAME_TAKEN=§cEs gibt bereits ein Team mit diesem Namen.
|
||||
TEAM_LEADER_USAGE=§8/§7team changeleader §8[§eMember§8]
|
||||
TEAM_LEADER_NOT_USER=§cDen Spieler {0} gibt es nicht.
|
||||
TEAM_LEADER_NOT_MEMBER=§cDer Spieler ist nicht in deinem Team.
|
||||
TEAM_LEADER_CHANGED=§7Du hast den Spieler §e{0} §7zum Leader gemacht!
|
||||
TEAM_LEADER_PROMOTED=§7Du hast den Spieler §e{0} §7zum Leader gemacht!
|
||||
|
||||
#Team Info
|
||||
TEAM_INFO_USAGE=§8/§7team info §8[§eTeamname§8]
|
||||
@ -388,7 +392,7 @@ TEAM_INFO_EVENTS=§7Events§8: §e{0}
|
||||
TEAM_LIST_NOT_PAGE=§cKeine Seitenzahl angegeben
|
||||
TEAM_LIST_UNKNOWN_PAGE=§cUngültige Seitenzahl angegeben
|
||||
TEAM_LIST_HEADER=§7§lTeamliste §7{0}§8/§7{1}
|
||||
TEAM_LIST_TEAM=§{0}{1} §e{2} §8[§7{3}§8]
|
||||
TEAM_LIST_TEAM=§{0}{1} §e{2}
|
||||
TEAM_LIST_TEAM_HOVER=§7Teaminfo
|
||||
TEAM_LIST_PAGE=Seite
|
||||
TEAM_LIST_NEXT=§eNächste Seite
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Hier muss nach dem target geprüft werden (glaube ich). Bitte nochmal gedanklich durchgehen.
sollte gefixt sein