diff --git a/resources/plugin.yml b/resources/plugin.yml index ed5fcad..f2adee1 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -86,6 +86,10 @@ commands: description: Commande de modération usage: /modo permission: pandacraft.modo + ghost: + description: mystère :3 + usage: /ghost + permission: pandacraft.ghost @@ -177,19 +181,16 @@ permissions: description: Utiliser la commande coeur default: true -#### à ajouter pandacraft.muco: description: Utiliser la commande muco default: op # pandacraft.muco.sitemembre donne accès à la liste de commande nommé "sitemembre" -#### à ajouter pandacraft.muco.*: description: Utiliser toutes les listes de commandes muco default: op -#### à ajouter pandacraft.modo: description: Utiliser la commande modo default: op @@ -203,7 +204,9 @@ permissions: description: Utiliser les plus hauts niveau de sanction default: op - + pandacraft.ghost: + description: Utiliser la commande ghost et avoir tout les pouvoirs qui y sont associés + default: false pandacraft.antispam.exempt: description: Ignoré par le système anti-spam diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/AbstractCommandExecutor.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/AbstractCommandExecutor.java index 4d1d06d..5a28080 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/AbstractCommandExecutor.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/AbstractCommandExecutor.java @@ -11,7 +11,7 @@ import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils; * Classe parente de toutes les classes devant prendre en charge l'exécution d'une commande Minecraft */ -/* package */ abstract class AbstractCommandExecutor implements CommandExecutor { +public abstract class AbstractCommandExecutor implements CommandExecutor { protected PandacraftUtils plugin = PandacraftUtils.getInstance(); @@ -36,7 +36,8 @@ import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils; - public boolean isValidPlayerName(String name) { + public static boolean isValidPlayerName(String name) { + if (name == null) return false; return name.matches("[0-9a-zA-Z_]{2,16}"); } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandAfk.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandAfk.java index 9a39e8b..2ba1297 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandAfk.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandAfk.java @@ -67,19 +67,16 @@ public class CommandAfk extends AbstractCommandExecutor { if (execute_self) { Player p = (Player)sender; - OnlinePlayer ap = OnlinePlayerManager.get(p); - if (ap == null) - plugin.getLogger().severe("Cant find AfkPlayer with name "+p.getName()+" when performing command /afk"); - else - ap.performAfkCommand(); + OnlinePlayerManager.get(p).toggleAFK(); return true; } else if (execute_other && other_player != null) { OnlinePlayer ap = OnlinePlayerManager.get(other_player); if (ap == null) - plugin.getLogger().severe("Cant find AfkPlayer with name "+other_player.getName()+" when performing command /afk "); - ap.adminToggleAfk(); + plugin.getLogger().severe("Cant find Player with name "+other_player.getName()+" when performing command /afk "); + else + ap.toggleAFK(); return true; } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandCubo.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandCubo.java index 5c6eda4..7472712 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandCubo.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandCubo.java @@ -621,7 +621,6 @@ public class CommandCubo extends AbstractCommandExecutor { - private void onCommandListe(Player commandSender, String owner, int page) { List cubos = plugin.survivalCuboManager.getPlayerCubo(owner, commandSender.getWorld()); @@ -651,7 +650,6 @@ public class CommandCubo extends AbstractCommandExecutor { - private void onCommandInfo(Player commandSender, Cubo insideCubo) { Vector size = insideCubo.getSize(); Vector midpoint = insideCubo.getMinimumPoint().getMidpoint(insideCubo.getMaximumPoint()); @@ -676,7 +674,6 @@ public class CommandCubo extends AbstractCommandExecutor { - private void onCommandSupprimer(Player commandSender, Cubo insideCubo) { String proprio_cubo = insideCubo.getOwnerName(); @@ -712,7 +709,6 @@ public class CommandCubo extends AbstractCommandExecutor { - private void onCommandAjouter(Player commandSender, Cubo insideCubo, String newMember) { insideCubo.addMember(newMember); @@ -730,7 +726,6 @@ public class CommandCubo extends AbstractCommandExecutor { - private void onCommandEnlever(Player commandSender, Cubo insideCubo, String oldMember) { insideCubo.removeMember(oldMember); diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandModo.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandModo.java index e2eaa57..9f3d202 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandModo.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandModo.java @@ -501,7 +501,6 @@ public class CommandModo extends AbstractCommandExecutor { - /** * @param duration en seconde diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandStaff.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandStaff.java index 373dadd..f4763dd 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandStaff.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandStaff.java @@ -142,7 +142,7 @@ public class CommandStaff extends AbstractCommandExecutor { if (p != null && p.isOnline()) { // le joueur est en ligne sender.sendMessage(ChatColor.GREEN+"-----------------------------------------------"); - sender.sendMessage(p.getName()+ChatColor.RESET+" : "+wp.getMessage()+" - "+ChatColor.ITALIC+"Il y a "+TimeUtil.durationToString((new Date()).getTime() - wp.getDate().getTime())); + sender.sendMessage(p.getDisplayName()+ChatColor.RESET+" : "+wp.getMessage()+" - "+ChatColor.ITALIC+"Il y a "+TimeUtil.durationToString((new Date()).getTime() - wp.getDate().getTime())); sender.sendMessage(ChatColor.GREEN+"Vous avez été téléporté vers ce joueur"); ((Player)sender).teleport(p.getLocation()); sender.sendMessage(ChatColor.GREEN+"-----------------------------------------------"); diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/Command_Selection.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/Command_Selection.java index a5d2c10..eec689c 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/Command_Selection.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/Command_Selection.java @@ -61,12 +61,12 @@ public class Command_Selection extends AbstractCommandExecutor { if (op.hasPlayerForWiewingHisWESelection(otherP)) { op.removePlayerForWiewingHisWESelection(otherP); - sender.sendMessage(ChatColor.GREEN+"Affichage de la sélection de "+ChatColor.GRAY+otherP.getName()+ChatColor.GREEN+" désactivé."); + sender.sendMessage(ChatColor.GREEN+"Affichage de la sélection de "+ChatColor.GRAY+otherP.getDisplayName()+ChatColor.GREEN+" désactivé."); } else { op.addPlayerForWiewingHisWESelection(otherP); - sender.sendMessage(ChatColor.GREEN+"Affichage de la sélection de "+ChatColor.GRAY+otherP.getName()+ChatColor.GREEN+" activé."); + sender.sendMessage(ChatColor.GREEN+"Affichage de la sélection de "+ChatColor.GRAY+otherP.getDisplayName()+ChatColor.GREEN+" activé."); } } @@ -76,7 +76,7 @@ public class Command_Selection extends AbstractCommandExecutor { sender.sendMessage(ChatColor.GREEN+"Affichage de la sélection activé. Si vous ne voyez pas les particules, activez les dans vos options Minecraft."); if (otherP != null) { op.addPlayerForWiewingHisWESelection(otherP); - sender.sendMessage(ChatColor.GREEN+"Affichage de la sélection de "+ChatColor.GRAY+otherP.getName()+ChatColor.GREEN+" activé."); + sender.sendMessage(ChatColor.GREEN+"Affichage de la sélection de "+ChatColor.GRAY+otherP.getDisplayName()+ChatColor.GREEN+" activé."); } } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/NoPvpProtectManager.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/NoPvpProtectManager.java index 5412038..f7f3561 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/NoPvpProtectManager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/NoPvpProtectManager.java @@ -4,6 +4,7 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.modules.protection; import java.util.List; import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils; +import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager; import org.bukkit.GameMode; import org.bukkit.Location; @@ -78,6 +79,9 @@ public class NoPvpProtectManager { // on ne compte pas le poseur (sinon, on y arrivera pas x) ) if (pl == p || pl.getGameMode() == GameMode.CREATIVE) continue; + + if (OnlinePlayerManager.get(pl).isVanished()) + continue; Location ent_loc = pl.getLocation(); if (ent_loc.distance(block_loc) < distance) @@ -118,6 +122,9 @@ public class NoPvpProtectManager { if (pl == p || pl.getGameMode() == GameMode.CREATIVE) continue; + if (OnlinePlayerManager.get(pl).isVanished()) + continue; + Location ent_loc = pl.getLocation(); if (ent_loc.distance(block_loc) < distance) @@ -160,7 +167,9 @@ public class NoPvpProtectManager { if (pl == p || pl.getGameMode() == GameMode.CREATIVE) continue; - + if (OnlinePlayerManager.get(pl).isVanished()) + continue; + Location ent_loc = pl.getLocation(); if (ent_loc.distance(block_loc) < distance) { // un joueur autre que celui qui a pos§ est trop proche @@ -197,6 +206,9 @@ public class NoPvpProtectManager { // on ne compte pas le poseur (sinon, on y arrivera pas x) ) et on ignorent ceux qui fly if (pl == p || pl.isFlying()) continue; + + if (OnlinePlayerManager.get(pl).isVanished()) + continue; Location pl_loc = pl.getLocation().getBlock().getLocation(); @@ -237,10 +249,13 @@ public class NoPvpProtectManager { // on fait le tour de tout les joueurs de la map for (Player pl : pls) { - // on ignore ceux en cr§atif + // on ignore ceux en créatif if (pl.getGameMode() == GameMode.CREATIVE) continue; + if (OnlinePlayerManager.get(pl).isVanished()) + continue; + Location pl_loc = pl.getLocation().getBlock().getLocation(); @@ -253,9 +268,6 @@ public class NoPvpProtectManager { - - - Location pl_loc_floor = new Location(pl_loc.getWorld(), Math.floor(pl.getLocation().getX()), Math.floor(pl.getLocation().getY()), Math.floor(pl.getLocation().getZ())); Location pl_loc_inner_block = pl.getLocation().subtract(pl_loc_floor); diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/SurvivalCuboManager.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/SurvivalCuboManager.java index 4712f53..e401531 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/SurvivalCuboManager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/SurvivalCuboManager.java @@ -291,7 +291,7 @@ public class SurvivalCuboManager { return wgCubo.getMembers().getPlayers(); } - public String getUserFriendlyMembersNames() { + public String getUserFriendlyMembersNames() { if (forSale()) return ""; return wgCubo.getMembers().toUserFriendlyString(); } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/TamedEntityProtectManager.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/TamedEntityProtectManager.java index 6c7a9d8..4123272 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/TamedEntityProtectManager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/protection/TamedEntityProtectManager.java @@ -1,6 +1,7 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.modules.protection; import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils; +import net.mc_pandacraft.java.plugin.pandacraftutils.players.OffPlayer; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager; import org.bukkit.ChatColor; @@ -114,7 +115,8 @@ public class TamedEntityProtectManager { if (owner instanceof Player) // si le joueur est en ligne return ((Player) owner).getDisplayName(); - return owner.getName(); + + return new OffPlayer(owner.getName()).getDisplayName(); } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/staff/StaffQueueManager.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/staff/StaffQueueManager.java index f0414bd..1fd3db8 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/staff/StaffQueueManager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/staff/StaffQueueManager.java @@ -126,11 +126,11 @@ public class StaffQueueManager { ArrayList lines = new ArrayList(); if (!selectedPlayers.isEmpty()) { - lines.add("En traitement :"); + lines.add(ChatColor.GREEN+"En traitement:"); lines.addAll(selectedPlayers); } if (!newPlayers.isEmpty()) { - lines.add("En attente :"); + lines.add(ChatColor.GOLD+"En attente :"); lines.addAll(newPlayers); } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorChatSend.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorChatSend.java index 44d4ae7..15d6d13 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorChatSend.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorChatSend.java @@ -5,6 +5,7 @@ import org.bukkit.ChatColor; import ru.tehkode.permissions.PermissionUser; import ru.tehkode.permissions.bukkit.PermissionsEx; import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.Response; +import net.mc_pandacraft.java.plugin.pandacraftutils.players.OffPlayer; public class RequestExecutorChatSend extends AbstractRequestExecutor { @@ -24,7 +25,7 @@ public class RequestExecutorChatSend extends AbstractRequestExecutor { if (permUser == null) return new Response(false, "user_not_exist : user is not registered in permission plugin"); - String displayName = permUser.getPrefix() + permUser.getName() + permUser.getSuffix(); + String displayName = new OffPlayer(dataSplit[0]).getDisplayName(); String finalMessage = "["+ChatColor.GRAY+"Console"+ChatColor.RESET+"]<"+displayName+ChatColor.RESET+"> "+dataSplit[1]; diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorPrivateMessage.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorPrivateMessage.java index 9a10023..9fd00b6 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorPrivateMessage.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorPrivateMessage.java @@ -7,9 +7,8 @@ import org.bukkit.entity.Player; import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.Console; -import ru.tehkode.permissions.PermissionUser; -import ru.tehkode.permissions.bukkit.PermissionsEx; import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.Response; +import net.mc_pandacraft.java.plugin.pandacraftutils.players.OffPlayer; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager; import net.mc_pandacraft.java.plugin.pandacraftutils.plugin_interface.EssentialsInterface; @@ -27,10 +26,6 @@ public class RequestExecutorPrivateMessage extends AbstractRequestExecutor { return new Response(false, "bad_data : at least two space"); - PermissionUser permUser = PermissionsEx.getUser(dataSplit[0]); - - if (permUser == null) - return new Response(false, "user_src_not_exist : user is not registered in permission plugin"); CommandSender cible; String cibleName; @@ -44,7 +39,7 @@ public class RequestExecutorPrivateMessage extends AbstractRequestExecutor { if (p == null || !p.isOnline()) { plugin.getLogger().warning(ChatColor.RED+dataSplit[1]+" n'est pas en ligne"); - return new Response(false, "user_dest_not_online"); + return new Response(false, "user_doest_not_online"); } cible = p; @@ -53,7 +48,7 @@ public class RequestExecutorPrivateMessage extends AbstractRequestExecutor { - String displayName = "["+ChatColor.GRAY+"Console"+ChatColor.GOLD+"]"+permUser.getPrefix() + permUser.getName() + permUser.getSuffix(); + String displayName = "["+ChatColor.GRAY+"Console"+ChatColor.GOLD+"]"+ (new OffPlayer(dataSplit[0]).getDisplayName()); String finalMessageToUser = ChatColor.GOLD+"["+displayName+ChatColor.GOLD+" -> moi] "+ChatColor.RESET+dataSplit[2]; diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/players/OffPlayer.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/players/OffPlayer.java new file mode 100644 index 0000000..a1e84d6 --- /dev/null +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/players/OffPlayer.java @@ -0,0 +1,252 @@ +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; + } + + + + + /** + * @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()) return null; + return offP; + } + + + + + public User getEssentialsUser() { + return EssentialsInterface.getPlugin().getOfflineUser(playerName); + } + + + + /** + * @return l'instance xAuth du joueur, ou null si aucune donnée n'est présente à propos du joueur + */ + public xAuthPlayer getXAuthPlayer() { + xAuthPlayer xAP = xAuth.getPlugin().getPlayerManager().getPlayer(playerName); + if (xAP.getAccountId() == -1) + return null; + return xAP; + } + + + + 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 + * hasPermission("pandacraft.grade.test") revient à appeler + * + * @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 true si le joueur est dans le groupe spécifié, false 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 true si le joueur n'est pas inscrit, false sinon + */ + public boolean isGuest() { + return isInGroup("default"); + } + + /** + * Indique si le joueur s'est inscrit sur le site + * @return true si c'est le cas, false sinon + */ + public boolean isRegistered() { + return !isGuest(); + } + + /** + * Indique si le joueur fait parti du staff + * @return true si c'est le cas, false 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); + } + } + + +} diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/players/OnlinePlayer.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/players/OnlinePlayer.java index 70ed68b..0a2675d 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/players/OnlinePlayer.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/players/OnlinePlayer.java @@ -14,21 +14,31 @@ import net.mc_pandacraft.java.plugin.pandacraftutils.plugin_interface.Essentials import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; -import de.luricos.bukkit.xAuth.xAuth; -import ru.tehkode.permissions.bukkit.PermissionsEx; - -public class OnlinePlayer { +public class OnlinePlayer extends OffPlayer { private final Player player; private final PandacraftUtils plugin = PandacraftUtils.getInstance(); public OnlinePlayer(Player p) { + super(p); + if (p == null) throw new IllegalArgumentException("Player can't be null"); player = p; } public Player getPlayer() { return player; } + + @Override + public Player getBukkitOnlinePlayer() { + return getPlayer(); + } + + @Override + public OfflinePlayer getBukkitOfflinePlayer() { + return getPlayer(); + } @@ -58,17 +68,12 @@ public class OnlinePlayer { player.getServer().broadcastMessage(message); } - public void performAfkCommand() { + public void toggleAFK() { setAfk(!isAfk()); if (!isAfk()) isDoingAction(); } - public void adminToggleAfk() { - setAfk(!isAfk()); - if (!isAfk()) - isDoingAction(); - } public double getDurationSinceLastAction() { return (System.currentTimeMillis() - timeLastAction)/1000D; @@ -325,7 +330,7 @@ public class OnlinePlayer { public boolean isAuthenticated() { - return xAuth.getPlugin().getPlayerManager().getPlayer(player).isAuthenticated(); + return getXAuthPlayer().isAuthenticated(); } @@ -349,82 +354,5 @@ public class OnlinePlayer { - /* - * 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. Cettemé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) - * @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); - } - return player.hasPermission(permission); - } - - /** - * Récupère la liste des groupes dans lequel le joueur se trouve - * @return - */ - public String[] getGroups() { - try { - return PermissionsEx.getUser(player).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 true si le joueur est dans le groupe spécifié, false 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 true si le joueur n'est pas inscrit, false sinon - */ - public boolean isGuest() { - return isInGroup("default"); - } - - /** - * Indique si le joueur s'est inscrit sur le site - * @return true si c'est le cas, false sinon - */ - public boolean isRegistered() { - return !isGuest(); - } - - /** - * Indique si le joueur fait parti du staff - * @return true si c'est le cas, false sinon - */ - public boolean isInStaff() { - return isInGroup("admins") || - isInGroup("devs") || - isInGroup("modos") || - isInGroup("archis") || - isInGroup("guides"); - } }