001package fr.aumgn.bukkitutils.playerref; 002 003import java.util.HashMap; 004import java.util.Locale; 005import java.util.Map; 006 007import org.bukkit.Bukkit; 008import org.bukkit.OfflinePlayer; 009import org.bukkit.entity.Player; 010 011/** 012 * Hold a reference to a player. 013 */ 014public final class PlayerRef { 015 016 private static final Map<String, PlayerRef> playersRef = 017 new HashMap<String, PlayerRef>(); 018 019 public static PlayerRef get(OfflinePlayer player) { 020 return get(player.getName()); 021 } 022 023 public static PlayerRef get(String name) { 024 String lname = name.toLowerCase(Locale.ENGLISH); 025 if (!playersRef.containsKey(lname)) { 026 playersRef.put(lname, new PlayerRef(lname)); 027 } 028 029 return playersRef.get(lname); 030 } 031 032 private final String name; 033 034 private PlayerRef(String name) { 035 this.name = name; 036 } 037 038 public String getName() { 039 return name; 040 } 041 042 public String getDisplayName() { 043 Player player = getPlayer(); 044 if (player != null) { 045 return player.getDisplayName(); 046 } else { 047 return getName(); 048 } 049 } 050 051 public boolean isOnline() { 052 return (getPlayer() != null); 053 } 054 055 public boolean isOffline() { 056 return (getPlayer() == null); 057 } 058 059 public Player getPlayer() { 060 return Bukkit.getPlayerExact(name); 061 } 062 063 public OfflinePlayer getOfflinePlayer() { 064 return Bukkit.getOfflinePlayer(name); 065 } 066 067 @Override 068 public boolean equals(Object other) { 069 if (!(other instanceof PlayerRef)) { 070 return false; 071 } 072 073 return name.equals(((PlayerRef) other).name); 074 } 075 076 @Override 077 public int hashCode() { 078 return name.hashCode(); 079 } 080 081 @Override 082 public String toString() { 083 return name; 084 } 085}