263 lines
5.6 KiB
Java
263 lines
5.6 KiB
Java
package net.mc_pandacraft.java.plugin.pandacraftutils.players;
|
|
|
|
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
|
|
import net.mc_pandacraft.java.plugin.pandacraftutils.commands.AbstractCommandExecutor;
|
|
import net.mc_pandacraft.java.plugin.pandacraftutils.plugin_interface.EssentialsInterface;
|
|
|
|
import org.bukkit.OfflinePlayer;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import ru.tehkode.permissions.PermissionUser;
|
|
import ru.tehkode.permissions.bukkit.PermissionsEx;
|
|
|
|
import com.earth2me.essentials.User;
|
|
|
|
import de.luricos.bukkit.xAuth.xAuth;
|
|
import de.luricos.bukkit.xAuth.xAuthPlayer;
|
|
|
|
/**
|
|
* Représente un joueur du serveur, qu'il soit en ligne ou non.
|
|
* @author Marc Baloup
|
|
*
|
|
*/
|
|
public class OffPlayer {
|
|
|
|
private PandacraftUtils plugin = PandacraftUtils.getInstance();
|
|
|
|
private String playerName;
|
|
|
|
|
|
|
|
|
|
|
|
public OffPlayer(String name) {
|
|
if (!AbstractCommandExecutor.isValidPlayerName(name))
|
|
throw new RuntimeException("Invalid player name : "+name);
|
|
|
|
playerName = name;
|
|
}
|
|
|
|
public OffPlayer(OfflinePlayer p) {
|
|
this(p.getName());
|
|
}
|
|
|
|
public OffPlayer(User p) {
|
|
this(p.getName());
|
|
}
|
|
|
|
|
|
|
|
|
|
public String getName() {
|
|
return playerName;
|
|
}
|
|
|
|
public String getCastCorrectedName() {
|
|
return getEssentialsUser().getName();
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* @return l'instance Bukkit du joueur en ligne, ou null si il n'est pas en ligne
|
|
*/
|
|
public Player getBukkitOnlinePlayer() {
|
|
return plugin.getServer().getPlayerExact(playerName);
|
|
}
|
|
|
|
|
|
|
|
public boolean isOnline() {
|
|
return (getBukkitOnlinePlayer() != null);
|
|
}
|
|
|
|
|
|
/**
|
|
* @return l'instance Bukkit du joueur (en ligne ou non), ou null si il n'a jamais existé sur le serveur
|
|
*/
|
|
public OfflinePlayer getBukkitOfflinePlayer() {
|
|
OfflinePlayer offP = plugin.getServer().getOfflinePlayer(playerName);
|
|
if (offP == null || (!offP.hasPlayedBefore() && !offP.isOnline())) return null;
|
|
return offP;
|
|
}
|
|
|
|
|
|
|
|
public boolean hasPlayedBefore() {
|
|
return (getBukkitOfflinePlayer() != null && getEssentialsUser() != null);
|
|
}
|
|
|
|
|
|
|
|
|
|
public User getEssentialsUser() {
|
|
User u = EssentialsInterface.getPlugin().getOfflineUser(playerName);
|
|
if (isOnline())
|
|
u.setBase(getBukkitOnlinePlayer());
|
|
return u;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* @return l'instance xAuth du joueur, ou null si aucune donnée n'est présente à propos du joueur
|
|
*/
|
|
public xAuthPlayer getXAuthPlayer() {
|
|
return xAuth.getPlugin().getPlayerManager().getPlayer(playerName);
|
|
}
|
|
|
|
|
|
|
|
public PermissionUser getPermissionExUser() {
|
|
return PermissionsEx.getUser(playerName);
|
|
}
|
|
|
|
|
|
|
|
|
|
public String getDisplayName() {
|
|
Player p = getBukkitOnlinePlayer();
|
|
if (p != null)
|
|
return p.getDisplayName();
|
|
|
|
User essU = getEssentialsUser();
|
|
|
|
return (essU == null) ? getName() : essU.getNick(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* Grades
|
|
*/
|
|
/**
|
|
* Récupère le groupe parent direct ayant le poids le plus fort
|
|
* @return le groupe
|
|
*/
|
|
public String getGroup() {
|
|
String[] groups = getGroups();
|
|
return (groups != null && groups.length > 0) ? groups[0] : PermissionsEx.getPermissionManager().getDefaultGroup().getName();
|
|
}
|
|
|
|
/**
|
|
* Défini si le joueur à la permission dont le noeux est passé sous forme de
|
|
* chaine de caractère. Cette méthode ajoute une surcouche par rapport à la méthode
|
|
* Player.hasPermission(String) permettant de tester si un joueur est dans un groupe, de
|
|
* la même manière que OnlinePlayer.isInGroup(String). En d'autre terme, appeler
|
|
* <code>hasPermission("pandacraft.grade.test")</code> revient à appeler
|
|
* <code></code>
|
|
* @param permission la permission testée
|
|
* @return si le joueur a la permission
|
|
*/
|
|
public boolean hasPermission(String permission) {
|
|
String permissionGroupPrefix = "pandacraft.grade.";
|
|
if (permission != null && permission.startsWith(permissionGroupPrefix)) {
|
|
String group = permission.substring(permissionGroupPrefix.length());
|
|
return isInGroup(group);
|
|
}
|
|
|
|
Player p = getBukkitOnlinePlayer();
|
|
if (p != null)
|
|
return p.hasPermission(permission);
|
|
|
|
User u = getEssentialsUser();
|
|
if (u != null)
|
|
return u.hasPermission(permission);
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Récupère la liste des groupes dans lequel le joueur se trouve
|
|
* @return
|
|
*/
|
|
public String[] getGroups() {
|
|
try {
|
|
return getPermissionExUser().getGroupsNames();
|
|
} catch (NoClassDefFoundError e) {
|
|
String[] g = {"default"};
|
|
return g;
|
|
}
|
|
}
|
|
/**
|
|
* Indique si le joueur est dans le groupe Spécifié
|
|
* @param group Le groupe par rapport au plugin de permission
|
|
* @return <i>true</i> si le joueur est dans le groupe spécifié, <i>false</i> sinon
|
|
*/
|
|
public boolean isInGroup(String group) {
|
|
if (group == null) return false;
|
|
return group.equalsIgnoreCase(getGroup());
|
|
}
|
|
|
|
/**
|
|
* Indique si le joueur est un nouveau joueur (si il ne s'est pas inscrit sur le site)
|
|
* @return <i>true</i> si le joueur n'est pas inscrit, <i>false</i> sinon
|
|
*/
|
|
public boolean isGuest() {
|
|
return isInGroup("default");
|
|
}
|
|
|
|
/**
|
|
* Indique si le joueur s'est inscrit sur le site
|
|
* @return <i>true</i> si c'est le cas, <i>false</i> sinon
|
|
*/
|
|
public boolean isRegistered() {
|
|
return !isGuest();
|
|
}
|
|
|
|
/**
|
|
* Indique si le joueur fait parti du staff
|
|
* @return <i>true</i> si c'est le cas, <i>false</i> sinon
|
|
*/
|
|
public boolean isInStaff() {
|
|
return isInGroup("admins") ||
|
|
isInGroup("devs") ||
|
|
isInGroup("modos") ||
|
|
isInGroup("archis") ||
|
|
isInGroup("guides");
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@SuppressWarnings("serial")
|
|
public class PlayerNeverConnectedToServerException extends RuntimeException {
|
|
private PlayerNeverConnectedToServerException(String name, String reason) {
|
|
super("Never played before : "+name+". Because : "+reason);
|
|
}
|
|
}
|
|
|
|
|
|
}
|