package net.glowstone.net.message.play.scoreboard;
import com.flowpowered.network.Message;
import lombok.Data;
import org.bukkit.ChatColor;
import org.bukkit.scoreboard.Team;
import java.util.List;
@Data
public final class ScoreboardTeamMessage implements Message {
private final String teamName;
private final Action action;
// CREATE and METADATA only
private final String displayName;
private final String prefix;
private final String suffix;
private final int flags;
private final Team.OptionStatus nametagVisibility;
private final ChatColor color;
private final Team.OptionStatus collisionRule;
// CREATE, ADD_, and REMOVE_PLAYERS only
private final List<String> entries;
private ScoreboardTeamMessage(String teamName, Action action, String displayName, String prefix, String suffix, boolean friendlyFire, boolean seeInvisible, Team.OptionStatus nametagVisibility, Team.OptionStatus collisionRule, ChatColor color, List<String> entries) {
this.teamName = teamName;
this.action = action;
this.displayName = displayName;
this.prefix = prefix;
this.suffix = suffix;
flags = (friendlyFire ? 1 : 0) | (seeInvisible ? 2 : 0);
this.nametagVisibility = nametagVisibility;
this.collisionRule = collisionRule;
this.color = color;
this.entries = entries;
}
public static ScoreboardTeamMessage create(String teamName, String displayName, String prefix, String suffix, boolean friendlyFire, boolean seeInvisible, Team.OptionStatus nametagVisibility, Team.OptionStatus collisionRule, ChatColor color, List<String> players) {
return new ScoreboardTeamMessage(teamName, Action.CREATE, displayName, prefix, suffix, friendlyFire, seeInvisible, nametagVisibility, collisionRule, color, players);
}
public static ScoreboardTeamMessage remove(String teamName) {
return new ScoreboardTeamMessage(teamName, Action.REMOVE, null, null, null, false, false, null, null, ChatColor.RESET, null);
}
public static ScoreboardTeamMessage update(String teamName, String displayName, String prefix, String suffix, boolean friendlyFire, boolean seeInvisible, Team.OptionStatus nametagVisibility, Team.OptionStatus collisionRule, ChatColor color) {
return new ScoreboardTeamMessage(teamName, Action.UPDATE, displayName, prefix, suffix, friendlyFire, seeInvisible, nametagVisibility, collisionRule, color, null);
}
public static ScoreboardTeamMessage addPlayers(String teamName, List<String> entries) {
return new ScoreboardTeamMessage(teamName, Action.ADD_PLAYERS, null, null, null, false, false, null, null, ChatColor.RESET, entries);
}
public static ScoreboardTeamMessage removePlayers(String teamName, List<String> entries) {
return new ScoreboardTeamMessage(teamName, Action.REMOVE_PLAYERS, null, null, null, false, false, null, null, ChatColor.RESET, entries);
}
public enum Action {
CREATE,
REMOVE,
UPDATE,
ADD_PLAYERS,
REMOVE_PLAYERS
}
}