下面列出了怎么用org.bukkit.scoreboard.DisplaySlot的API类实例代码及写法,或者点击链接到github查看源代码。
public void updateScoreboard() {
if (!getOriginalOrInheritedScoreaboard()) {
return;
}
Objective obj = this.gameScoreboard.getObjective("display");
if (obj == null) {
obj = this.gameScoreboard.registerNewObjective("display", "dummy");
}
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
obj.setDisplayName(this.formatScoreboardTitle());
for (CurrentTeam team : teamsInGame) {
this.gameScoreboard.resetScores(this.formatScoreboardTeam(team, false, false));
this.gameScoreboard.resetScores(this.formatScoreboardTeam(team, false, true));
this.gameScoreboard.resetScores(this.formatScoreboardTeam(team, true, false));
Score score = obj.getScore(this.formatScoreboardTeam(team, !team.isBed, team.isBed && "RESPAWN_ANCHOR".equals(team.teamInfo.bed.getBlock().getType().name()) && Player116ListenerUtils.isAnchorEmpty(team.teamInfo.bed.getBlock())));
score.setScore(team.players.size());
}
for (GamePlayer player : players) {
player.player.setScoreboard(gameScoreboard);
}
}
private Sidebar(Party party) {
this.scoreboard = match.needModule(ScoreboardMatchModule.class).getScoreboard(party);
this.objective = this.scoreboard.registerNewObjective(IDENTIFIER, "dummy");
this.objective.setDisplayName(
StringUtils.left(
renderSidebarTitle(match.getMap().getTags(), match.getMap().getGamemode()), 32));
this.objective.setDisplaySlot(DisplaySlot.SIDEBAR);
for (int i = 0; i < MAX_ROWS; ++i) {
this.rows[i] = null;
this.scores[i] = -1;
this.players[i] = String.valueOf(ChatColor.COLOR_CHAR) + (char) i;
this.teams[i] = this.scoreboard.registerNewTeam(IDENTIFIER + "-row-" + i);
this.teams[i].setPrefix("");
this.teams[i].setSuffix("");
this.teams[i].addEntry(this.players[i]);
}
}
public void updateScoreboard() {
if (!getOriginalOrInheritedScoreaboard()) {
return;
}
Objective obj = this.gameScoreboard.getObjective("display");
if (obj == null) {
obj = this.gameScoreboard.registerNewObjective("display", "dummy");
}
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
obj.setDisplayName(this.formatScoreboardTitle());
for (CurrentTeam team : teamsInGame) {
this.gameScoreboard.resetScores(this.formatScoreboardTeam(team, false, false));
this.gameScoreboard.resetScores(this.formatScoreboardTeam(team, false, true));
this.gameScoreboard.resetScores(this.formatScoreboardTeam(team, true, false));
Score score = obj.getScore(this.formatScoreboardTeam(team, !team.isBed, team.isBed && "RESPAWN_ANCHOR".equals(team.teamInfo.bed.getBlock().getType().name()) && Player116ListenerUtils.isAnchorEmpty(team.teamInfo.bed.getBlock())));
score.setScore(team.players.size());
}
for (GamePlayer player : players) {
player.player.setScoreboard(gameScoreboard);
}
}
/**
* Get any scoreboard by world
* - Note: players should use their associated-world (not current-world)
*/
private Scoreboard getScoreboard(UUID worldId, boolean isCreateIfNotFound) {
Scoreboard scoreboard = null;
if (ClimateEngine.getInstance().isClimateEngineEnabled(worldId)) {
if (scoreboards.containsKey(worldId)) {
//Existing scoreboard:
scoreboard = scoreboards.get(worldId);
} else if (isCreateIfNotFound) {
//New scoreboard:
scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
scoreboards.put(worldId, scoreboard);
//Objective (scoreboard title / group):
Objective objective = scoreboard.registerNewObjective(
GLOBAL_WARMING,
"scores",
"Carbon Score");
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
}
}
return scoreboard;
}
private Sidebar(Party party) {
this.scoreboard = getMatch().needMatchModule(ScoreboardMatchModule.class).getScoreboard(party);
this.objective = this.scoreboard.registerNewObjective(IDENTIFIER, "dummy");
this.objective.setDisplayName(legacyTitle);
this.objective.setDisplaySlot(DisplaySlot.SIDEBAR);
for(int i = 0; i < MAX_ROWS; ++i) {
this.rows[i] = null;
this.scores[i] = -1;
this.players[i] = String.valueOf(ChatColor.COLOR_CHAR) + (char) i;
this.teams[i] = this.scoreboard.registerNewTeam(IDENTIFIER + "-row-" + i);
this.teams[i].setPrefix("");
this.teams[i].setSuffix("");
this.teams[i].addEntry(this.players[i]);
}
}
@Override
protected void execute(Event evt) {
if (!(player.getSingle(evt).isOnline())) {
Skript.error("The player is not online!");
} else {
if (player.getSingle(evt).getScoreboard().getObjective(DisplaySlot.SIDEBAR) != null) {
if (player.getSingle(evt).getScoreboard().getObjective(DisplaySlot.SIDEBAR)
.getScore(name.getSingle(evt).replace("\"", "")) != null) {
player.getSingle(evt).getScoreboard().resetScores(name.getSingle(evt).replace("\"", ""));
} else {
Skript.error("That score does not exist!");
}
} else {
Skript.error("No sidebar score has been set!");
}
}
}
@Override
protected void execute(Event evt) {
if (player == null || num == null || player.getSingle(evt).getScoreboard() == null) {
Skript.error("This player is either not online or has yet to have a scoreboard set for them");
return;
}
Scoreboard sb = player.getSingle(evt).getScoreboard();
Objective objective = sb.getObjective(DisplaySlot.SIDEBAR);
Score score;
if (name.getSingle(evt) == null){
Skript.warning("First arg in \"set score %string% in sidebar of %player% to %number%\" was null. " +
"Objective will now be named null.");
score = objective.getScore("null");
} else {
score = objective.getScore(name.getSingle(evt).replace("\"", ""));
}
score.setScore(num.getSingle(evt).intValue());
}
@Override
protected void execute(Event evt) {
for (Player p : players.getArray(evt)) {
if (!(p.isOnline())) {
Skript.error("The player is not online!");
continue;
}
try {
if (p.getScoreboard().getObjective("sidebarHold") != null) {
Objective objective = p.getScoreboard().getObjective(DisplaySlot.SIDEBAR);
objective.setDisplayName(name.getSingle(evt).replace("\"", ""));
} else {
Objective objectiveh = p.getScoreboard().registerNewObjective("sidebarHold", "dummy");
objectiveh.setDisplaySlot(DisplaySlot.SIDEBAR);
objectiveh.setDisplayName(name.getSingle(evt).replace("\"", ""));
}
} catch (IllegalArgumentException e){
Skript.error(e.getLocalizedMessage());
}
}
}
@Subscribe
public void onTeamScoreboardInitialize(TeamScoreboardInitializeEvent event) {
FlagTeam flag = (FlagTeam) getParent();
Scoreboard board = flag.getScoreboard();
if (board == null) {
return;
}
FlagScoreboard.GetScoreboardDisplayNameEvent getDisplayNameEvent = new FlagScoreboard.GetScoreboardDisplayNameEvent();
game.getEventBus().callEvent(getDisplayNameEvent);
String displayName = getDisplayNameEvent.getDisplayName();
objective = board.getObjective(FlagTeam.OBJECTIVE_NAME);
objective.setDisplayName(displayName);
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
}
public void setMatchInfo() {
Objective obj = null;
try {
obj = sb.getObjective(sbobjname);
obj.setDisplaySlot(null);
obj.unregister();
} catch (Exception e) {
}
Random r = new Random();
sbobjname = "KTP"+r.nextInt(10000000);
obj = sb.registerNewObjective(sbobjname, "dummy");
obj = sb.getObjective(sbobjname);
obj.setDisplayName(this.getScoreboardName());
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY+"Episode "+ChatColor.WHITE+episode)).setScore(5);
obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE+""+Bukkit.getServer().getOnlinePlayers().size()+ChatColor.GRAY+" joueurs")).setScore(4);
obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE+""+getAliveTeams().size()+ChatColor.GRAY+" teams")).setScore(3);
obj.getScore(Bukkit.getOfflinePlayer("")).setScore(2);
obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE+formatter.format(this.minutesLeft)+ChatColor.GRAY+":"+ChatColor.WHITE+formatter.format(this.secondsLeft))).setScore(1);
}
@Override
public void onCommand(CommandSender sender, String subCommand, String... args) {
if (!(sender instanceof Player)) {
//the console cannot have a scoreboard
sender.sendMessage("§4This command can only be executed by Players");
return;
}
//We checked that it can only be players
Player player = (Player) sender;
RefreshTask refreshTask = plugin.getRefreshTask();
if (refreshTask.contains(player)) {
if ("hide".equals(subCommand) || "toggle".equals(subCommand)) {
refreshTask.remove(player);
player.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
player.sendMessage(TOGGLE_MSG);
}
} else if ("show".equals(subCommand) || "toggle".equals(subCommand)) {
player.sendMessage(TOGGLE_MSG);
refreshTask.addToQueue(player);
}
}
private void handleDisplayPacket(Player player, PacketContainer packet) {
//Can be empty; if so it would just clear the slot
String objectiveId = packet.getStrings().read(0);
Optional<DisplaySlot> slot = SlotTransformer.fromId(packet.getIntegers().read(0));
//Packet receiving validation
if (!slot.isPresent() || objectiveId.length() > 16) {
return;
}
PlayerScoreboard scoreboard = manager.getScoreboard(player);
if (slot.get() == DisplaySlot.SIDEBAR) {
scoreboard.getObjective(objectiveId).ifPresent(obj -> scoreboard.sidebarObjective = obj);
} else {
scoreboard.getSidebarObjective().filter(objective -> objective.getId().equals(objectiveId))
.ifPresent(objective -> scoreboard.sidebarObjective = null);
}
}
private void updateLobbyScoreboard() {
if (status != GameStatus.WAITING || !getOriginalOrInheritedLobbyScoreaboard()) {
return;
}
gameScoreboard.clearSlot(DisplaySlot.SIDEBAR);
Objective obj = gameScoreboard.getObjective("lobby");
if (obj != null) {
obj.unregister();
}
obj = gameScoreboard.registerNewObjective("lobby", "dummy");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
obj.setDisplayName(this.formatLobbyScoreboardString(
Main.getConfigurator().config.getString("lobby-scoreboard.title", "§eBEDWARS")));
List<String> rows = Main.getConfigurator().config.getStringList("lobby-scoreboard.content");
int rowMax = rows.size();
if (rows == null || rows.isEmpty()) {
return;
}
for (String row : rows) {
if (row.trim().equals("")) {
for (int i = 0; i <= rowMax; i++) {
row = row + " ";
}
}
Score score = obj.getScore(this.formatLobbyScoreboardString(row));
score.setScore(rowMax);
rowMax--;
}
for (GamePlayer player : players) {
player.player.setScoreboard(gameScoreboard);
}
}
public Objective getObjective() {
Scoreboard scoreboard = getScoreboard();
if (scoreboard.getObjective("Assemble") == null) {
Objective objective = scoreboard.registerNewObjective("Assemble", "dummy");
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
objective.setDisplayName(getAssemble().getAdapter().getTitle(Bukkit.getPlayer(getUuid())));
return objective;
} else {
return scoreboard.getObjective("Assemble");
}
}
private void updateLobbyScoreboard() {
if (status != GameStatus.WAITING || !getOriginalOrInheritedLobbyScoreaboard()) {
return;
}
gameScoreboard.clearSlot(DisplaySlot.SIDEBAR);
Objective obj = gameScoreboard.getObjective("lobby");
if (obj != null) {
obj.unregister();
}
obj = gameScoreboard.registerNewObjective("lobby", "dummy");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
obj.setDisplayName(this.formatLobbyScoreboardString(
Main.getConfigurator().config.getString("lobby-scoreboard.title", "§eBEDWARS")));
List<String> rows = Main.getConfigurator().config.getStringList("lobby-scoreboard.content");
int rowMax = rows.size();
if (rows == null || rows.isEmpty()) {
return;
}
for (String row : rows) {
if (row.trim().equals("")) {
for (int i = 0; i <= rowMax; i++) {
row = row + " ";
}
}
Score score = obj.getScore(this.formatLobbyScoreboardString(row));
score.setScore(rowMax);
rowMax--;
}
for (GamePlayer player : players) {
player.player.setScoreboard(gameScoreboard);
}
}
public Objective getObjective(DisplaySlot slot) throws IllegalArgumentException {
Validate.notNull(slot, "Display slot cannot be null");
ScoreObjective objective = board.getObjectiveInDisplaySlot(CraftScoreboardTranslations.fromBukkitSlot(slot));
if (objective == null) {
return null;
}
return new CraftObjective(this, objective);
}
public void setDisplaySlot(DisplaySlot slot) throws IllegalStateException {
CraftScoreboard scoreboard = checkState();
Scoreboard board = scoreboard.board;
ScoreObjective objective = this.objective;
for (int i = 0; i < CraftScoreboardTranslations.MAX_DISPLAY_SLOT; i++) {
if (board.getObjectiveInDisplaySlot(i) == objective) {
board.setObjectiveInDisplaySlot(i, null);
}
}
if (slot != null) {
int slotNumber = CraftScoreboardTranslations.fromBukkitSlot(slot);
board.setObjectiveInDisplaySlot(slotNumber, getHandle());
}
}
public DisplaySlot getDisplaySlot() throws IllegalStateException {
CraftScoreboard scoreboard = checkState();
Scoreboard board = scoreboard.board;
ScoreObjective objective = this.objective;
for (int i = 0; i < CraftScoreboardTranslations.MAX_DISPLAY_SLOT; i++) {
if (board.getObjectiveInDisplaySlot(i) == objective) {
return CraftScoreboardTranslations.toBukkitSlot(i);
}
}
return null;
}
/**
* Determines the scoreboard slot value based on an internal Minecraft integer
* @param i the scoreboard slot value
*/
public ScoreboardSlot(int i) {
//Initialize displaySlot
switch(i) {
case 0: displaySlot = DisplaySlot.PLAYER_LIST; break;
case 1: displaySlot = DisplaySlot.SIDEBAR; break;
case 2: displaySlot = DisplaySlot.BELOW_NAME; break;
default: displaySlot = DisplaySlot.SIDEBAR; break;
}
//Initialize teamColor
switch(i) {
case 3: teamColor = ChatColor.BLACK; break;
case 4: teamColor = ChatColor.DARK_BLUE; break;
case 5: teamColor = ChatColor.DARK_GREEN; break;
case 6: teamColor = ChatColor.DARK_AQUA; break;
case 7: teamColor = ChatColor.DARK_RED; break;
case 8: teamColor = ChatColor.DARK_PURPLE; break;
case 9: teamColor = ChatColor.GOLD; break;
case 10: teamColor = ChatColor.GRAY; break;
case 11: teamColor = ChatColor.DARK_GRAY; break;
case 12: teamColor = ChatColor.BLUE; break;
case 13: teamColor = ChatColor.GREEN; break;
case 14: teamColor = ChatColor.AQUA; break;
case 15: teamColor = ChatColor.RED; break;
case 16: teamColor = ChatColor.LIGHT_PURPLE; break;
case 17: teamColor = ChatColor.YELLOW; break;
case 18: teamColor = ChatColor.WHITE; break;
default: teamColor = null; break;
}
}
/**
* Show or hide the scoreboard (UI)
*/
public void show(GPlayer gPlayer, boolean isVisible) {
if (!isEnabled) {
return;
}
Scoreboard scoreboard = getScoreboard(gPlayer);
if (isVisible) {
Objective objective = scoreboard.getObjective(GLOBAL_WARMING);
if (objective != null) {
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
}
} else {
scoreboard.clearSlot(DisplaySlot.SIDEBAR);
}
}
/**
* Creates a new scoreboard objective
*
* @param id the id of this objective
* @param displayName the initial display name
* @param displaySlot the initial display slot
* @param autoSubscribe if players should be automatically subscribed
*/
public PacketScoreboardObjective(String id, String displayName, DisplaySlot displaySlot, boolean autoSubscribe) {
Objects.requireNonNull(id, "id");
Preconditions.checkArgument(id.length() <= 16, "id cannot be longer than 16 characters");
this.id = id;
this.displayName = trimName(Text.colorize(Objects.requireNonNull(displayName, "displayName")));
this.displaySlot = Objects.requireNonNull(displaySlot, "displaySlot");
this.autoSubscribe = autoSubscribe;
}
@Override
public void setDisplaySlot(DisplaySlot displaySlot) {
Objects.requireNonNull(displaySlot, "displaySlot");
if (this.displaySlot == displaySlot) {
return;
}
this.displaySlot = displaySlot;
Protocol.broadcastPacket(this.subscribed, newDisplaySlotPacket(displaySlot));
}
private PacketContainer newDisplaySlotPacket(DisplaySlot displaySlot) {
// http://wiki.vg/Protocol#Display_Scoreboard
PacketContainer packet = new PacketContainer(PacketType.Play.Server.SCOREBOARD_DISPLAY_OBJECTIVE);
// set position
final int slot;
switch (displaySlot) {
case PLAYER_LIST:
slot = 0;
break;
case SIDEBAR:
slot = 1;
break;
case BELOW_NAME:
slot = 2;
break;
default:
throw new RuntimeException();
}
packet.getIntegers().write(0, slot);
// set objective name - The unique name for the scoreboard to be displayed.
packet.getStrings().write(0, getId());
return packet;
}
@Override
public PacketScoreboardObjective createObjective(String id, String title, DisplaySlot displaySlot, boolean autoSubscribe) {
Preconditions.checkArgument(id.length() <= 16, "id cannot be longer than 16 characters");
Preconditions.checkState(!this.objectives.containsKey(id), "id already exists");
PacketScoreboardObjective objective = new PacketScoreboardObjective(id, title, displaySlot, autoSubscribe);
if (autoSubscribe) {
for (Player player : Players.all()) {
objective.subscribe(player);
}
}
this.objectives.put(id, objective);
return objective;
}
@Override
public PacketScoreboardObjective createPlayerObjective(Player player, String id, String title, DisplaySlot displaySlot, boolean autoSubscribe) {
Preconditions.checkArgument(id.length() <= 16, "id cannot be longer than 16 characters");
Map<String, PacketScoreboardObjective> objectives = this.playerObjectives.computeIfAbsent(player.getUniqueId(), p -> new HashMap<>());
Preconditions.checkState(!objectives.containsKey(id), "id already exists");
PacketScoreboardObjective objective = new PacketScoreboardObjective(id, title, displaySlot, autoSubscribe);
if (autoSubscribe) {
objective.subscribe(player);
}
objectives.put(id, objective);
return objective;
}
public void Scoreboard(Player player) {
ScoreboardManager manager = Bukkit.getScoreboardManager();
Scoreboard board = manager.getNewScoreboard();
Objective objective = board.registerNewObjective("test", "dummy");
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
objective.setDisplayName("Scoreboard");
objective.getName();
Score score = objective.getScore(ChatColor.GREEN + "Kills:"); //Get a fake offline player
score.setScore(1);
}
public TpsPingTask(NyaaUtils plugin) {
this.plugin = plugin;
Scoreboard mainScoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
Objective pingObj = mainScoreboard.getObjective("nyaautilsping");
if (plugin.cfg.ping_tab) {
if (pingObj == null) {
pingObj = mainScoreboard.registerNewObjective("nyaautilsping", "dummy", "Ping");
}
pingObj.setDisplaySlot(DisplaySlot.PLAYER_LIST);
} else if (pingObj != null) {
pingObj.setDisplaySlot(null);
}
}
public Objective getObjective(DisplaySlot slot) throws IllegalArgumentException {
Validate.notNull(slot, "Display slot cannot be null");
net.minecraft.scoreboard.ScoreObjective objective = board.func_96539_a(CraftScoreboardTranslations.fromBukkitSlot(slot));
if (objective == null) {
return null;
}
return this.objectives.get(objective.getName());
}
public void setDisplaySlot(DisplaySlot slot) throws IllegalStateException {
CraftScoreboard scoreboard = checkState();
net.minecraft.scoreboard.Scoreboard board = scoreboard.board;
net.minecraft.scoreboard.ScoreObjective objective = this.objective;
for (int i = 0; i < CraftScoreboardTranslations.MAX_DISPLAY_SLOT; i++) {
if (board.func_96539_a(i) == objective) {
board.func_96530_a(i, null);
}
}
if (slot != null) {
int slotNumber = CraftScoreboardTranslations.fromBukkitSlot(slot);
board.func_96530_a(slotNumber, getHandle());
}
}
public DisplaySlot getDisplaySlot() throws IllegalStateException {
CraftScoreboard scoreboard = checkState();
net.minecraft.scoreboard.Scoreboard board = scoreboard.board;
net.minecraft.scoreboard.ScoreObjective objective = this.objective;
for (int i = 0; i < CraftScoreboardTranslations.MAX_DISPLAY_SLOT; i++) {
if (board.func_96539_a(i) == objective) {
return CraftScoreboardTranslations.toBukkitSlot(i);
}
}
return null;
}