Add spigot constraint for 48-char sidebar text
Spigot has a method `addEntry(String)` for Teams that doesn't block, unlike the OfflinePlayer option. If the server doesn't have this method, lines are limited to 16 characters as usual.
This commit is contained in:
parent
ff2e32feff
commit
0487ca77e5
@ -1,16 +1,19 @@
|
||||
package com.massivecraft.factions.scoreboards;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.scoreboard.DisplaySlot;
|
||||
import org.bukkit.scoreboard.Objective;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
|
||||
public class BufferedObjective {
|
||||
private static final Method addEntryMethod;
|
||||
private static final int MAX_LINE_LENGTH;
|
||||
|
||||
private final Scoreboard scoreboard;
|
||||
private final String baseName;
|
||||
|
||||
@ -25,6 +28,25 @@ public class BufferedObjective {
|
||||
|
||||
private final Map<Integer, String> contents = new HashMap<Integer, String>();
|
||||
|
||||
static {
|
||||
// Check for long line support.
|
||||
// We require use of Spigot's `addEntry(String)` method on
|
||||
// Teams, as adding OfflinePlayers to a team is far too slow.
|
||||
|
||||
Method addEntryMethodLookup = null;
|
||||
try {
|
||||
addEntryMethodLookup = Team.class.getMethod("addEntry", String.class);
|
||||
} catch (NoSuchMethodException ignored) {}
|
||||
|
||||
addEntryMethod = addEntryMethodLookup;
|
||||
|
||||
if (addEntryMethod != null) {
|
||||
MAX_LINE_LENGTH = 48;
|
||||
} else {
|
||||
MAX_LINE_LENGTH = 16;
|
||||
}
|
||||
}
|
||||
|
||||
public BufferedObjective(Scoreboard scoreboard) {
|
||||
this.scoreboard = scoreboard;
|
||||
this.baseName = createBaseName();
|
||||
@ -63,8 +85,8 @@ public class BufferedObjective {
|
||||
}
|
||||
|
||||
public void setLine(int lineNumber, String content) {
|
||||
if (content.length() > 48) {
|
||||
content = content.substring(0, 48);
|
||||
if (content.length() > MAX_LINE_LENGTH) {
|
||||
content = content.substring(0, MAX_LINE_LENGTH);
|
||||
}
|
||||
content = ChatColor.translateAlternateColorCodes('&', content);
|
||||
|
||||
@ -106,7 +128,9 @@ public class BufferedObjective {
|
||||
team.setSuffix(split.next());
|
||||
}
|
||||
|
||||
team.addPlayer(Bukkit.getOfflinePlayer(name));
|
||||
try {
|
||||
addEntryMethod.invoke(team, name);
|
||||
} catch (ReflectiveOperationException ignored) {}
|
||||
buffer.getScore(name).setScore(entry.getKey());
|
||||
} else {
|
||||
buffer.getScore(entry.getValue()).setScore(entry.getKey());
|
||||
|
Loading…
Reference in New Issue
Block a user