SteamWar/BungeeCore
Archiviert
13
2

Added Multi Leader Feature #196

Manuell gemergt
Lixfel hat 5 Commits von Multi_Leader nach master 2021-04-13 07:26:24 +02:00 zusammengeführt
4 geänderte Dateien mit 75 neuen und 43 gelöschten Zeilen

Datei anzeigen

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

Hier muss nach dem target geprüft werden (glaube ich). Bitte nochmal gedanklich durchgehen.

Hier muss nach dem target geprüft werden (glaube ich). Bitte nochmal gedanklich durchgehen.
Veraltet
Review

sollte gefixt sein

sollte gefixt sein
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
Veraltet
Review

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

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");

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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