下面列出了怎么用org.bukkit.scoreboard.Objective的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 void updateScoreboardTimer() {
if (this.status != GameStatus.RUNNING || !getOriginalOrInheritedScoreaboard()) {
return;
}
Objective obj = this.gameScoreboard.getObjective("display");
if (obj == null) {
obj = this.gameScoreboard.registerNewObjective("display", "dummy");
}
obj.setDisplayName(this.formatScoreboardTitle());
for (GamePlayer player : players) {
player.player.setScoreboard(gameScoreboard);
}
}
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 void updateScoreboardTimer() {
if (this.status != GameStatus.RUNNING || !getOriginalOrInheritedScoreaboard()) {
return;
}
Objective obj = this.gameScoreboard.getObjective("display");
if (obj == null) {
obj = this.gameScoreboard.registerNewObjective("display", "dummy");
}
obj.setDisplayName(this.formatScoreboardTitle());
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;
}
/**
* Update the global score for all worlds
*/
private void updateGlobalScores() {
for (World world : Bukkit.getWorlds()) {
//Do not update worlds with disabled climate-engines:
WorldClimateEngine climateEngine = ClimateEngine.getInstance().getClimateEngine(world.getUID());
if (climateEngine != null && climateEngine.isEnabled()) {
//Get the scoreboard for this world:
Scoreboard scoreboard = getScoreboard(world.getUID(), false);
//Get its objective (scoreboard title / group):
Objective objective = null;
if (scoreboard != null) {
objective = scoreboard.getObjective(GLOBAL_WARMING);
}
//Update the title to show this world's temperature:
if (objective != null) {
double temperature = climateEngine.getTemperature();
objective.setDisplayName(climateEngine.formatTemp(temperature));
}
}
}
}
/**
* Display a player's score
* - Uses the player's associated-world scoreboard
* - Note: the player may be in a different world, that's ok
* - Player names are mapped to color warmth (based on their score)
*/
private void updatePlayerScore(GPlayer gPlayer) {
if (gPlayer != null) {
//Do not update associated-worlds with disabled climate-engines:
// - Ignore offline players (e.g., someone completing an offline player's bounty)
Player onlinePlayer = gPlayer.getOnlinePlayer();
if (onlinePlayer != null && ClimateEngine.getInstance().isClimateEngineEnabled(gPlayer.getAssociatedWorldId())) {
//Update the player's score:
Scoreboard scoreboard = getScoreboard(gPlayer);
if (scoreboard != null) {
Objective objective = scoreboard.getObjective(GLOBAL_WARMING);
if (objective != null) {
Team team = scoreboard.getPlayerTeam(onlinePlayer);
if (team != null) {
team.setColor(Colorizer.getScoreColor(gPlayer.getCarbonScore()));
objective.getScore(onlinePlayer).setScore(gPlayer.getCarbonScore());
}
}
}
}
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void displayScoreboard(final PlayerJoinEvent event) {
final Player player = event.getPlayer();
final User user = userStore.getUser(player);
final PlayerId playerId = tc.oc.api.bukkit.users.Users.playerId(player);
final Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
final Objective objective = getOrCreateObjective(scoreboard, player.getName(), "dummy");
final String raindropsName = ChatColor.AQUA + "Raindrops";
objective.setDisplayName(renderer.renderLegacy(generalFormatter.brandName(), event.getPlayer()));
objective.getScore(raindropsName).setScore(2);
Utils.displayScoreboard(player, objective);
setRaindropsCount(player, user.raindrops());
GizmoUtils.setGizmo(player, Gizmos.emptyGizmo, true);
}
private void setRaindropsCount(Player player, int count) {
if(player == null) return;
final Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
Objective objective = scoreboard.getObjective(player.getName());
Integer oldCount = raindrops.get(player);
if(oldCount != null) {
Utils.removeScore(player, String.format("%,d", oldCount));
}
Utils.addScore(player, objective, String.format("%,d", count), 1);
raindrops.put(player, count);
Utils.giveGhastTear(player, count);
}
private void sendObjective(Objective obj, ObjectiveMode mode) {
try {
Object objHandle = NMS.getHandle(obj);
Object packetObj = NMS.PACKET_OBJ.newInstance(
objHandle,
mode.ordinal()
);
NMS.sendPacket(packetObj, player);
} catch(InstantiationException | IllegalAccessException
| InvocationTargetException | NoSuchMethodException e) {
LOGGER.error("Error while creating and sending objective packet. (Unsupported Minecraft version?)", e);
}
}
private void sendObjectiveDisplay(Objective obj) {
try {
Object objHandle = NMS.getHandle(obj);
Object packet = NMS.PACKET_DISPLAY.newInstance(
1,
objHandle
);
NMS.sendPacket(packet, player);
} catch(InstantiationException | IllegalAccessException
| InvocationTargetException | NoSuchMethodException e) {
LOGGER.error("Error while creating and sending display packet. (Unsupported Minecraft version?)", e);
}
}
private void refreshPing() {
Set<Player> offlined = new HashSet<>();
Bukkit.getOnlinePlayers().stream().filter(((Predicate<Player>) playerPing30s::containsKey).negate()).forEach(l -> playerPing30s.put(l, new LinkedBlockingDeque<>(30)));
playerPing30s.forEach((player, pings) -> {
if (!player.isOnline()) {
offlined.add(player);
return;
}
if (pings.size() == 30) pings.poll();
int playerPing = PlayerUtils.getPing(player);
pings.add(playerPing);
if (plugin.cfg.ping_tab) {
Scoreboard scoreboard = player.getScoreboard();
Objective playerPingObj = scoreboard.getObjective("nyaautilsping");
if (playerPingObj != null) {
playerPingObj.getScore(player.getName()).setScore(playerPing);
}
}
});
offlined.forEach(playerPing30s::remove);
}
public void removeScoreboard(Player player) {
UUID uuid = player.getUniqueId();
CustomScoreBoard customScoreBoard = this.customScoreBoardMap.remove(uuid);
if(customScoreBoard == null) return;
customScoreBoard.disableScoreboard();
if(shouldSavePrevious() && this.previousScoreboardMap.containsKey(uuid)) {
Scoreboard previousScoreboard = this.previousScoreboardMap.get(uuid);
if(previousScoreboard == null) return;
Objective objective = previousScoreboard.getObjective("combatlogx");
if(objective != null) return;
player.setScoreboard(previousScoreboard);
}
}
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);
}
public void decrementTimer() {
if (timeleft <= 0) {
if (!ended) {
CivMessage.sendArena(this, "Time is up! Nobody Wins!");
ArenaManager.declareDraw(this);
ended = true;
}
} else {
this.timeleft--;
for (ArenaTeam team : this.teams.values()) {
Objective obj = objectives.get(team.getName()+";score");
Score score = obj.getScore("Time Left");
score.setScore(timeleft);
}
}
}
@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());
}
}
}
public void updateScore(User user) {
if (! FunnyGuilds.getInstance().getPluginConfiguration().dummyEnable) {
return;
}
Scoreboard scoreboard = this.user.getCache().getScoreboard();
if (scoreboard == null) {
FunnyGuilds.getInstance().getPluginLogger().debug(
"We're trying to update Dummy score but scoreboard hasn't been initialized yet" +
"(maybe player left the game while updating?)");
return;
}
Objective objective = scoreboard.getObjective(OBJECTIVE_NAME);
if (objective == null || ! objective.getName().equals(OBJECTIVE_NAME)) {
this.initialize();
} else {
objective.getScore(user.getName()).setScore(user.getRank().getPoints());
}
}
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 ImmutableSet<Objective> getObjectivesByCriteria(String criteria) throws IllegalArgumentException {
Validate.notNull(criteria, "Criteria cannot be null");
ImmutableSet.Builder<Objective> objectives = ImmutableSet.builder();
for (ScoreObjective netObjective : (Collection<ScoreObjective>) this.board.getScoreObjectives()) {
CraftObjective objective = new CraftObjective(this, netObjective);
if (objective.getCriteria().equals(criteria)) {
objectives.add(objective);
}
}
return objectives.build();
}
public ImmutableSet<Objective> getObjectives() {
return ImmutableSet.copyOf(Iterables.transform((Collection<ScoreObjective>) this.board.getScoreObjectives(), new Function<ScoreObjective, Objective>() {
@Override
public Objective apply(ScoreObjective input) {
return new CraftObjective(CraftScoreboard.this, input);
}
}));
}
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);
}
/**
* 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);
}
}
private void setupScoreboard() {
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
for(Team team : scoreboard.getTeams()) {
team.unregister();
}
for(Objective objective : scoreboard.getObjectives()) {
objective.unregister();
}
}
private static Objective getOrCreateObjective(Scoreboard scoreboard, String name, String criteria) {
Objective obj = scoreboard.getObjective(name);
if(obj == null) {
obj = scoreboard.registerNewObjective(name, criteria);
}
return obj;
}
public static void displayScoreboard(Player player, Objective objective) {
ScoreboardServer server = (ScoreboardServer) ((CraftScoreboard) objective.getScoreboard()).getHandle();
ScoreboardObjective nmsObjective = ((CraftObjective) objective).getHandle();
List<Packet<?>> packets = server.getScoreboardScorePacketsForObjective(nmsObjective);
for(Packet packet : packets) {
sendPacket(player, packet);
}
sendPacket(player, new PacketPlayOutScoreboardDisplayObjective(1, nmsObjective));
}
public static void addScore(Player player, Objective objective, String name, int value) {
ScoreboardScore score = new ScoreboardScore(((CraftScoreboard)objective.getScoreboard()).getHandle(), ((CraftObjective) objective).getHandle() , name);
score.setScore(value);
PacketPlayOutScoreboardScore packet = new PacketPlayOutScoreboardScore(score);
sendPacket(player, packet);
}
private void swapBuffers() {
sendObjectiveDisplay(this.buffer);
Objective temp = this.buffer;
this.buffer = this.objective;
this.objective = temp;
}