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