getting offline players..

Discussion in 'Plugin Development' started by Desle, Jul 15, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    Desle

    How to get offline players? I'm now using this, but it doesn't seem to work:
    Code:
                            if (rem.getServer().getOfflinePlayer(args[0]) == null) {
     
  2. Offline

    Loogeh

    Desle You need to store players somewhere (e.g a file or database) each time a player joins (or leaves your choice).
     
  3. Offline

    Desle

    u


    UGH...
    I've done that, but if they type "/remove e" then i check if the file contains e.. and then every E will get deleted, lol
     
  4. Offline

    Loogeh

    Desle Code please? I never really use files but i'll see what I can do
     
  5. Offline

    Desle


    My configuration file:
    Code:
    Desle:
      friends: dontremovethis,HerbertThPervert,
      recievedrequests: dontremovethis,
    HerbertThPervert:
      friends: dontremovethis,Desle,
      recievedrequests: dontremovethis,
    


    And my plugin code:

    Code:java
    1. package me.Desle.MoreFriends;
    2.  
    3. import java.util.logging.Logger;
    4.  
    5. import org.bukkit.ChatColor;
    6. import org.bukkit.command.Command;
    7. import org.bukkit.command.CommandSender;
    8. import org.bukkit.configuration.file.FileConfiguration;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.player.PlayerLoginEvent;
    13. import org.bukkit.plugin.PluginDescriptionFile;
    14. import org.bukkit.plugin.java.JavaPlugin;
    15.  
    16. public class Main extends JavaPlugin implements Listener {
    17.  
    18. public final Logger logger = Logger.getLogger("Minecraft");
    19. public static Main plugin;
    20.  
    21. public void onDisable() {
    22. PluginDescriptionFile pdf = getDescription();
    23. this.logger.info(pdf.getName() + " V" + pdf.getVersion()
    24. + " has succesfully been disabled");
    25. }
    26.  
    27. public void onEnable() {
    28. getConfig().options().copyDefaults(true);
    29. PluginDescriptionFile pdf = getDescription();
    30. getServer().getPluginManager().registerEvents(this, this);
    31. this.logger.info(pdf.getName() + " V" + pdf.getVersion()
    32. + " has succesfully been enabled.");
    33. saveConfig();
    34. }
    35.  
    36. @EventHandler
    37. public void onPlayerLoginEvent(PlayerLoginEvent event) {
    38. Player triggerer = event.getPlayer();
    39. getConfig().set(triggerer.getName() + ".friends", "dontremovethis,");
    40. getConfig().set(triggerer.getName() + ".recievedrequests",
    41. "dontremovethis,");
    42. saveConfig();
    43. }
    44.  
    45. @Override
    46. public boolean onCommand(CommandSender sender, Command command,
    47. String label, String[] args) {
    48. if (label.equalsIgnoreCase("remove")) {
    49. if (!sender.hasPermission("rpgfriends.remove")) {
    50. sender.sendMessage(ChatColor.RED + "" + ChatColor.BOLD
    51. + "ERROR: " + ChatColor.RED + "No permission!");
    52. } else if (sender.hasPermission("rpgfriends.remove")) {
    53. if (args.length != 1) {
    54. sender.sendMessage(ChatColor.RED + "" + ChatColor.BOLD
    55. + "USAGE:" + ChatColor.RED + " /remove <friend>");
    56. } else {
    57. Player rem = (Player) sender;
    58. if (rem.getServer().getPlayer(args[0]) != null) {
    59. Player rec = (Player) rem.getServer().getPlayer(args[0]);
    60. if (getConfig().getString(rem.getName() + ".friends")
    61. .contains(rec.getName() + ",")) {
    62. rec.sendMessage(ChatColor.RED
    63. + "You are no longer friends with "
    64. + ChatColor.BOLD + rem.getName());
    65. rem.sendMessage(ChatColor.RED
    66. + "You are no longer friends with "
    67. + ChatColor.BOLD + rec.getName());
    68. String exam3 = getConfig().getString(
    69. rem.getName() + ".friends");
    70.  
    71. exam3 = exam3.replaceAll(rec.getName() + ",", "");
    72. getConfig().set(rem.getName() + ".friends", exam3);
    73. saveConfig();
    74. String exam4 = getConfig().getString(
    75. rec.getName() + ".friends");
    76.  
    77. exam4 = exam4.replaceAll(rem.getName() + ",", "");
    78. getConfig().set(rec.getName() + ".friends", exam4);
    79. saveConfig();
    80. } else {
    81. rem.sendMessage(ChatColor.RED
    82. + "That player is not your friend!");
    83. }
    84. } else if (rem.getServer().getPlayer(args[0]) == null) {
    85. if (rem.getServer().getOfflinePlayer(args[0]) == null) {
    86. rem.sendMessage(ChatColor.RED
    87. + "That player does not exist!");
    88. rem.sendMessage(ChatColor.RED
    89. + "If the player is not online, type in the exact name!");
    90. } else {
    91. Player rec = (Player) rem.getServer()
    92. .getPlayer(args[0]);
    93. if (getConfig().getString(rem.getName() + ".friends")
    94. .contains(rec.getName() + ",")) {
    95. rem.sendMessage(ChatColor.RED
    96. + "You are no longer friends with "
    97. + ChatColor.BOLD + rec.getName());
    98. String exam7 = getConfig().getString(
    99. rem.getName() + ".friends");
    100.  
    101. exam7 = exam7.replaceAll(rec.getName() + ",", "");
    102. getConfig().set(rem.getName() + ".friends", exam7);
    103. saveConfig();
    104. String exam5 = getConfig().getString(
    105. rec.getName() + ".friends");
    106.  
    107. exam5 = exam5.replaceAll(rem.getName() + ",", "");
    108. getConfig().set(rec.getName() + ".friends", exam5);
    109. saveConfig();
    110. } else {
    111. rem.sendMessage(ChatColor.RED
    112. + "That player is not your friend!");
    113. }
    114. }
    115. }
    116. }
    117. }
    118. } else if (label.equalsIgnoreCase("add")) {
    119. Player p = (Player) sender;
    120. String pn = p.getName();
    121. if (!p.hasPermission("rpgfriends.add")) {
    122. p.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "ERROR: "
    123. + ChatColor.RED + "No permission!");
    124. } else if (p.hasPermission("rpgfriends.add")) {
    125. FileConfiguration cf = getConfig();
    126. if (args.length != 1) { // IF ARGS LENGTH IS SMALLER THEN 1,
    127. // SEND
    128. // THE RIGH T USAGE
    129. p.sendMessage(ChatColor.RED + "" + ChatColor.BOLD
    130. + "USAGE:" + ChatColor.RED + " /add <player>");
    131. } else {
    132. if (p.getServer().getPlayer(args[0]) == null) {
    133. p.sendMessage(ChatColor.RED + "" + ChatColor.BOLD
    134. + "ERROR:" + ChatColor.RED
    135. + " That player is not online!");
    136. } else {
    137. Player t = (Player) p.getServer().getPlayer(args[0]);
    138. String tn = t.getName();
    139. if (tn == pn) {
    140. p.sendMessage(ChatColor.RED + "" + ChatColor.BOLD
    141. + "ERROR:" + ChatColor.RED
    142. + " Can't add yourself as a friend!");
    143. } else {
    144. if (cf.getString(pn + ".friends")
    145. .contains("," + tn)) { // IF
    146. // ALREADY
    147. // FRIENDS
    148. p.sendMessage(ChatColor.RED + ""
    149. + ChatColor.BOLD + "ERROR:"
    150. + ChatColor.RED
    151. + " You're already friends with "
    152. + ChatColor.BOLD + tn);
    153. } else { // THE STUFF CONTINUES, SINCE THERES NO
    154. // REASON
    155. // TO STOP YET
    156. if (cf.getString(tn + ".recievedrequests")
    157. .contains(pn + "")) { // IF HE
    158. // ALREADY
    159. // INVITED
    160. // THE
    161. // TARGET
    162. p.sendMessage(ChatColor.RED
    163. + ""
    164. + ChatColor.BOLD
    165. + "ERROR:"
    166. + ChatColor.RED
    167. + " A request has already been sent to "
    168. + ChatColor.BOLD + tn
    169. + ChatColor.RED + " before!");
    170. } else {
    171. if (cf.getString(pn + ".recievedrequests")
    172. .contains(tn + "")) { // CHECKS
    173. // IF
    174. // PLAYER
    175. // ALREADY
    176. // HAS
    177. // INCOMING
    178. // REQUEST
    179. // FROM
    180. // TARGET
    181. p.sendMessage(ChatColor.RED
    182. + "You and " + ChatColor.BOLD
    183. + tn + ChatColor.RED
    184. + " are now friends!");
    185. t.sendMessage(ChatColor.RED
    186. + "You and " + ChatColor.BOLD
    187. + pn + ChatColor.RED
    188. + " are now friends!");
    189. cf.set(tn + ".friends",
    190. cf.getString(tn + ".friends")
    191. + pn + ",");
    192. cf.set(pn + ".friends",
    193. cf.getString(pn + ".friends")
    194. + tn + ",");
    195. String exam = cf.getString(tn
    196. + ".recievedrequests");
    197.  
    198. exam = exam.replaceAll(pn + ",", "");
    199. cf.set(tn + ".recievedrequests", exam);
    200. saveConfig();
    201.  
    202. String exam2 = cf.getString(pn
    203. + ".recievedrequests");
    204.  
    205. exam2 = exam2.replaceAll(tn + ",", "");
    206. cf.set(pn + ".recievedrequests", exam2);
    207. saveConfig();
    208. } else {
    209. cf.set(tn + ".recievedrequests",
    210. cf.getString(tn
    211. + ".recievedrequests")
    212. + pn + ",");
    213. saveConfig();
    214. t.sendMessage(ChatColor.RED
    215. + ""
    216. + ChatColor.BOLD
    217. + pn
    218. + ChatColor.RED
    219. + " requested to become friends!");
    220. t.sendMessage(ChatColor.RED
    221. + "To accept, type /add "
    222. + ChatColor.BOLD + pn);
    223. p.sendMessage(ChatColor.RED
    224. + "Requested " + ChatColor.BOLD
    225. + tn + ChatColor.RED
    226. + " to become friends!");
    227. }
    228. }
    229. }
    230. }
    231. }
    232. }
    233. }
    234. }
    235. return false;
    236. }
    237. }
    238.  
     
  6. Offline

    Loogeh

    Desle So you're saying every character 'e' is being removed but not the full name?
     
  7. Offline

    Desle


    I guess? if you do getConfig().getString(args[0]).replace(args[0], "")... Right?
    Can't i do something with " if (rem.getServer().getPlayer(args[0]).hasPlayedBefore() == false) {"
     
  8. Offline

    Loogeh

    Desle Sorry I can't say I know why it removes every e. Also, i'm not sure if those hasPlayedBefore methods actually work lol. If I want to get if a player has played before I store every player who joins in a MySQL database and then make a boolean method which checks if the MySQL table contains the player's name. Then, if it contains it, it returns true but if it doesn't it returns false.
     
  9. Offline

    Desle


    Yes, but say somoene likes to be a jerk, and fills in "e" as a player name.. it'll check if the database contains an e..
     
  10. Offline

    Loogeh

    Desle No, you would do a Result Set and do a query for the database which would be like this.
    Code:
    SELECT player FROM your_table_here WHERE player=' + player.getName + "'"
    and then you would do an if statement like if(rs.next()). if rs.next = true then it means that the column player in your table contains the player. then do an else statement and inside that else statement you would send the sender a message saying "That player doesn't exist" or something like that.

    If you're trying to make a friends system you would have a table that stores a player and their friend. Then you would do a query which would be like
    Code:
    SELECT friend FROM your_table_here WHERE player=' + player.getName() + "'"
     
  11. Offline

    xTrollxDudex

    Desle
    I'm just learning about arrays right now but try this:
    Code:java
    1. //declare an array
    2. Player[] players = rem.getServer().getOfflinePlayers();
    3. List l = Arrays.asList(players)
    4.  
    5. if(l.contains(args[0])){
    6. //stuff
    7. } else if(!(l.contains(args[0])){
    8. rem.sendMessage("This player has never played before!");
    9. }

    If it doesn't work, change line 2 to Player[] players = new rem.getServer().getOfflinePlayers();
    Notice that Players is plural in the code

    Edit: I haven't tried this yet so if all else fails, use List<Player> l or List<Player[]> l instead of List l
     
  12. Offline

    Desle


    lol sorry i have no clue what youre saying.. not that experienced with java, i'm not even using lists, check my config above
     
  13. Offline

    Loogeh

    Desle Yeah that would be a little complicated for someone new to java. I'm no expert but I remember when I was very new to java and I would have had no idea what I just said. xTrollxDudex Might have an easier way of explaining storing names.
     
    xTrollxDudex likes this.
  14. Offline

    xTrollxDudex

    I have no idea how to use MySQL I'm not even on that part for my battledome plugin :O I used arrays to get the offline players which is waaaaay easier, and I even provided the code for it
     
  15. Offline

    Loogeh

    xTrollxDudex Yeah I was just talking about using arrays or files or something other than databases.
     
    xTrollxDudex likes this.
  16. Offline

    rsod

    Code:java
    1. public HashSet<String> getOfflinePlayers(){
    2. HashSet<String> players = new HashSet<String>();
    3. File folder = new File("world/players");
    4. for (File fileEntry : folder.listFiles()) {
    5. if (!fileEntry.isDirectory()) {
    6. String fname = fileEntry.getName();
    7. String[] parts = fname.split("\\.");
    8. if(parts.length != 2) continue; //assuming no dots in player names
    9. if(!parts[1].equalsIgnoreCase("dat")) continue;
    10. players.add(parts[0]);
    11. }
    12. }
    13. return players;
    14. }
     
  17. Offline

    Desle


    How do i implement this..?
     
  18. Offline

    xTrollxDudex

    Desle
    Use my method
     
    Desle likes this.
  19. Offline

    Desle


    But that will lose all the things it saved on restart right?
     
  20. Offline

    xTrollxDudex

    Desle
    You know what? I have no idea. It would be a good thing to find out
     
  21. Offline

    slayr288

    xTrollxDudex Desle
    Yes, anything stored in memory will be lost once the plugin is unloaded. i.e lists, hashmaps, strings, exc..
     
  22. Offline

    xTrollxDudex

    slayr288
    Basically it's converting a bukkit method to get te offline players; bukkit probably stores that safely...
     
  23. Offline

    aaomidi

    This is NOT a good way to make sure a player that is Offline has played on the server before, use this instead:
    Code:java
    1. if(!(rem.getServer().getOfflinePlayer(args[0]).hasPlayedBefore())){
    2. //do derp
    3. }else{
    4. //do herp
    5. }
    6.  
     
Thread Status:
Not open for further replies.

Share This Page