PandaLib/pandalib-paper/src/main/java/fr/pandacube/lib/paper/players/PaperOffPlayer.java

133 lines
3.8 KiB
Java
Raw Normal View History

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;
import fr.pandacube.lib.players.standalone.AbstractOffPlayer;
2022-07-22 02:16:45 +02: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.
*/
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 Bukkits {@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;
}
/*
* 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
}