2022-11-06 19:16:37 +01:00
|
|
|
|
package fr.pandacube.lib.paper.players;
|
2022-07-22 02:16:45 +02:00
|
|
|
|
|
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
|
import org.bukkit.OfflinePlayer;
|
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
import org.bukkit.scoreboard.Team;
|
|
|
|
|
|
2022-08-10 03:04:12 +02:00
|
|
|
|
import fr.pandacube.lib.players.standalone.AbstractOffPlayer;
|
2022-07-22 02:16:45 +02:00
|
|
|
|
|
2022-12-12 17:29:31 +01:00
|
|
|
|
import java.util.function.UnaryOperator;
|
|
|
|
|
|
2022-08-10 19:25:06 +02:00
|
|
|
|
/**
|
|
|
|
|
* Represents any player on a paper server, either offline or online.
|
|
|
|
|
*/
|
2022-08-10 03:04:12 +02:00
|
|
|
|
public interface PaperOffPlayer extends AbstractOffPlayer {
|
2022-07-22 02:16:45 +02:00
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* General data and state
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
default boolean isOnline() {
|
2022-08-10 19:25:06 +02:00
|
|
|
|
return getBukkitPlayer() != null;
|
2022-07-22 02:16:45 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Related class instances
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
PaperOnlinePlayer getOnlineInstance();
|
|
|
|
|
|
|
|
|
|
/**
|
2022-08-10 19:25:06 +02:00
|
|
|
|
* Returns the Bukkit online {@link Player} instance of this player, or null if not available (offline).
|
|
|
|
|
* @return the Bukkit online {@link Player} instance of this player, or null if not available (offline).
|
2022-07-22 02:16:45 +02:00
|
|
|
|
*/
|
|
|
|
|
default Player getBukkitPlayer() {
|
|
|
|
|
return Bukkit.getPlayer(getUniqueId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get the Bukkit’s {@link OfflinePlayer} instance for this player.
|
|
|
|
|
* May represent a player that never joined the server before.
|
|
|
|
|
* @return an instance of {@link OfflinePlayer} for this player.
|
|
|
|
|
*/
|
|
|
|
|
default OfflinePlayer getBukkitOfflinePlayer() {
|
|
|
|
|
return Bukkit.getOfflinePlayer(getUniqueId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Display name
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* Get the display name of the user, in legacy format.
|
|
|
|
|
* @return the display name of the player.
|
|
|
|
|
*
|
|
|
|
|
* @implNote This default implementation gets the display name from bukkit (if the player is online).
|
|
|
|
|
* If its different to the player name, it returns it. Otherwise, it tries to generate the team displayname with {@link #getTeamDisplayName()}.
|
|
|
|
|
* If the player is not in a team, then the player name is used.
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
default String getDisplayName() {
|
|
|
|
|
String name = getName();
|
|
|
|
|
Player p = getBukkitPlayer();
|
2022-07-22 18:37:15 +02:00
|
|
|
|
@SuppressWarnings("deprecation")
|
2022-07-22 02:16:45 +02:00
|
|
|
|
String bukkitDispName = p != null ? p.getDisplayName() : name;
|
|
|
|
|
if (!name.equals(bukkitDispName))
|
|
|
|
|
return bukkitDispName;
|
|
|
|
|
String teamDispName = getTeamDisplayName();
|
|
|
|
|
return teamDispName == null ? name : teamDispName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Computes and returns the the name of the player with the prefix, suffix and color of the team the player is in.
|
|
|
|
|
* @return The legacy formated player display name, if he is in a {@link Team}, or null otherwise.
|
|
|
|
|
*/
|
|
|
|
|
default String getTeamDisplayName() {
|
|
|
|
|
String name = getName();
|
|
|
|
|
Team team = Bukkit.getScoreboardManager().getMainScoreboard().getEntryTeam(name);
|
|
|
|
|
if (team == null)
|
|
|
|
|
return null;
|
2022-07-22 18:37:15 +02:00
|
|
|
|
@SuppressWarnings("deprecation")
|
2022-07-22 02:16:45 +02:00
|
|
|
|
String teamPrefix = team.getPrefix();
|
2022-07-22 18:37:15 +02:00
|
|
|
|
@SuppressWarnings("deprecation")
|
2022-07-22 02:16:45 +02:00
|
|
|
|
String teamSuffix = team.getSuffix();
|
2022-07-22 18:37:15 +02:00
|
|
|
|
@SuppressWarnings("deprecation")
|
2022-07-22 02:16:45 +02:00
|
|
|
|
String teamColor = team.getColor().toString();
|
|
|
|
|
|
|
|
|
|
return teamPrefix + teamColor + name + teamSuffix;
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-12 17:29:31 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Player config
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
default String getConfig(String key) throws Exception {
|
|
|
|
|
return PaperPlayerConfigStorage.get(getUniqueId(), key);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
default String getConfig(String key, String deflt) throws Exception {
|
|
|
|
|
return PaperPlayerConfigStorage.get(getUniqueId(), key, deflt);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
default void setConfig(String key, String value) throws Exception {
|
|
|
|
|
PaperPlayerConfigStorage.set(getUniqueId(), key, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
default void updateConfig(String key, String deflt, UnaryOperator<String> updater) throws Exception {
|
|
|
|
|
PaperPlayerConfigStorage.update(getUniqueId(), key, deflt, updater);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
default void unsetConfig(String key) throws Exception {
|
|
|
|
|
PaperPlayerConfigStorage.unset(getUniqueId(), key);
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-22 02:16:45 +02:00
|
|
|
|
}
|