Solved Team Prefix resets after relogging

Discussion in 'Plugin Development' started by KilboxNoUltra, Aug 16, 2014.

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

    KilboxNoUltra

    I think title explains itself. I am using Scoreboards to make teams and I assign Prefixes for them, but as soon as I relog, the prefix is gone. Please help.

    Code:java
    1. public class GuildWorldCommandExecutor implements CommandExecutor{
    2. private final String[] homeArgs = {"rusles", "Azorius", "town"};
    3. private GuildWorld plugin;
    4. public static ScoreboardManager manager = Bukkit.getScoreboardManager();
    5. public static Scoreboard board = this.manager.getNewScoreboard();
    6.  
    7.  
    8. // private final String[] colours = {"blue"};
    9.  
    10. public GuildWorldCommandExecutor(GuildWorld plugin) {
    11. this.plugin = plugin;
    12. }
    13.  
    14. @Override
    15. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    16. if (sender instanceof Player) {
    17. Player gamer = (Player) sender;
    18. String commandName = cmd.getName();
    19. String playerName = gamer.getName();
    20. if (commandName.equalsIgnoreCase("guilds")) {
    21.  
    22. if (args.length==2) {
    23. if (args[0].equalsIgnoreCase("create")) {
    24. if (!(plugin.getConfig().getConfigurationSection("guilds").contains(args[1]))) {
    25. ArrayList<String> guildList = (ArrayList<String>)plugin.getConfig().getStringList("guildList");
    26. boolean pass = true;
    27. int size = guildList.size();
    28.  
    29.  
    30.  
    31. for (int i = 0; i<size; i++) {
    32. ArrayList<String> membersList = (ArrayList<String>)plugin.getConfig().getStringList("guilds." + guildList.get(i) +".members");
    33. int membersSize = membersList.size();
    34. for (int j = 0; j<membersSize; j++) {
    35. String temp = plugin.getConfig().getStringList("guilds." + guildList.get(i) +".members").get(j);
    36. if (temp.equals(playerName)) {
    37. pass = false;
    38. }
    39. }
    40. }
    41.  
    42. if (pass == true) {
    43. ArrayList<String> guildMembers = new ArrayList<String>();
    44. guildMembers.add(playerName);
    45. guildList.add(args[1]);
    46. plugin.getConfig().set("guildList", guildList);
    47. plugin.getConfig().set("guilds." + args[1] +".guildmaster", playerName);
    48. plugin.getConfig().set("guilds." + args[1] +".members", guildMembers);
    49. plugin.getConfig().set("guilds." + args[1] +".invites", new ArrayList<String>());
    50.  
    51. sender.sendMessage("Guild created!");
    52. plugin.saveConfig();
    53.  
    54. Team newGuild = board.registerNewTeam(args[1]);
    55. newGuild.setAllowFriendlyFire(false);
    56. newGuild.setPrefix(ChatColor.BLUE + args[1] + " ");
    57. gamer.setScoreboard(board);
    58. newGuild.addPlayer(gamer);
    59. gamer.setDisplayName(ChatColor.BLUE + "KilboxNoUltra");
    60. gamer.setPlayerListName(ChatColor.BLUE + "KilboxNoUltra");
    61.  
    62. return true;
    63. } else {
    64. sender.sendMessage("You are already part of another guild!");
    65. }
    66. } else {
    67. sender.sendMessage("Guild with that name already exists!");
    68. }
    69. } else if (args[0].equalsIgnoreCase("join")){
    70. ArrayList<String> guildList = (ArrayList<String>)plugin.getConfig().getStringList("guildList");
    71. boolean pass = true;
    72. boolean invited = false;
    73. int size = guildList.size();
    74.  
    75. /////////// Check if a name of a player is on the list
    76. for (int i = 0; i<size; i++) {
    77. ArrayList<String> membersList = (ArrayList<String>)plugin.getConfig().getStringList("guilds." + guildList.get(i) +".members");
    78. int membersSize = membersList.size();
    79. for (int j = 0; j<membersSize; j++) {
    80. String temp = plugin.getConfig().getStringList("guilds." + guildList.get(i) +".members").get(j);
    81. if (temp.equals(playerName)) {
    82. pass = false;
    83. }
    84. }
    85. }
    86. //////////// Check if a name of a player is on the list
    87.  
    88. if (pass == true) {
    89. if (plugin.getConfig().getConfigurationSection("guilds").contains(args[1])) {
    90. ArrayList<String> invitesList = (ArrayList<String>)plugin.getConfig().getStringList("guilds." + args[1] + ".invites");
    91. for (int i = 0; i<invitesList.size();i++) {
    92. if (invitesList.get(i).equals(playerName)) {
    93. invited = true;
    94. invitesList.remove(playerName);
    95. plugin.getConfig().set("guilds." + args[1] + ".invites", invitesList);
    96. }
    97. }
    98. if (invited==true) {
    99. ArrayList<String> membersList = (ArrayList<String>)plugin.getConfig().getStringList("guilds." + args[1] + ".members");
    100. membersList.add(playerName);
    101. plugin.getConfig().set("guilds." + args[1] +".members", membersList);
    102. sender.sendMessage("You joined the guild!");
    103. plugin.saveConfig();
    104.  
    105. Team invitingTeam = board.getTeam(args[1]);
    106. gamer.setScoreboard(board);
    107. invitingTeam.addPlayer(gamer);
    108. gamer.setDisplayName(ChatColor.BLUE + playerName);
    109. gamer.setPlayerListName(ChatColor.BLUE + playerName);
    110.  
    111. return true;
    112. } else {
    113. sender.sendMessage("You have not been invited to this guild!");
    114. }
    115. } else {
    116. sender.sendMessage("Guild with that name does not exis!t");
    117. return false;
    118. }
    119. } else {
    120. sender.sendMessage("You are already part of a guild!");
    121. return false;
    122. }
    123. } else if (args[0].equalsIgnoreCase("invite")) {
    124. ArrayList<String> guildList = (ArrayList<String>)plugin.getConfig().getStringList("guildList");
    125. int size = guildList.size();
    126.  
    127. for (int i = 0; i<size; i++) {
    128. ArrayList<String> membersList = (ArrayList<String>)plugin.getConfig().getStringList("guilds." + guildList.get(i) +".members");
    129. int membersSize = membersList.size();
    130. for (int j=0;j<membersSize;j++) {
    131. if (membersList.get(j).equalsIgnoreCase(args[1])) {
    132. sender.sendMessage("That player is already part of your guild!");
    133. return false;
    134. }
    135. }
    136. String temp = plugin.getConfig().getString("guilds." + guildList.get(i) +".guildmaster");
    137. if (temp.equals(playerName)) {
    138. ArrayList<String> invitesList = (ArrayList<String>)plugin.getConfig().getStringList("guilds."
    139. + guildList.get(i) + ".invites");
    140. invitesList.add(args[1]);
    141. plugin.getConfig().set("guilds." + guildList.get(i) + ".invites", invitesList);
    142. sender.sendMessage("An invite has been sent");
    143. plugin.saveConfig();
    144. // Player invitedPlayer = Bukkit.getPlayerExact(args[1]);
    145. // if (invitedPlayer.isOnline()) {
    146. // invitedPlayer.sendMessage("You have been invited to "+guildList.get(i)+ " guild!");
    147. // }
    148. for (Player p : Bukkit.getOnlinePlayers()) {
    149. if (p.getName().equalsIgnoreCase(args[1])) {
    150. p.sendMessage("You have been invited to "+guildList.get(i)+ " guild!");
    151. }
    152. }
    153. return true;
    154. }
    155. }
    156. sender.sendMessage("You are not part of any guild!");
    157. } else {
    158. sender.sendMessage("Usage: /guilds create [guildname]; /guilds join [guildname]; /guilds leave");
    159. return false;
    160. }
    161. } else if (args.length==1){
    162. if (args[0].equalsIgnoreCase("leave")){
    163. ArrayList<String> guildList = (ArrayList<String>)plugin.getConfig().getStringList("guildList");
    164. int size = guildList.size();
    165.  
    166. for (int i = 0; i<size; i++) {
    167. ArrayList<String> membersList = (ArrayList<String>)plugin.getConfig().getStringList("guilds." + guildList.get(i) +".members");
    168. int membersSize = membersList.size();
    169. String guildmaster = plugin.getConfig().getString("guilds." + guildList.get(i) +".guildmaster");
    170. for (int j = 0; j<membersSize; j++) {
    171. if (membersList.get(j).equals(playerName)) {
    172. membersList.remove(playerName);
    173. plugin.getConfig().set("guilds." + guildList.get(i) + ".members", membersList);
    174. if (guildmaster.equalsIgnoreCase(playerName)) {
    175. plugin.getConfig().getConfigurationSection("guilds").set(guildList.get(i), null);
    176. guildList.remove(guildList.get(i));
    177. plugin.getConfig().set("guildList", guildList);
    178. plugin.saveConfig();
    179. }
    180. sender.sendMessage("You left the guild!");
    181. plugin.saveConfig();
    182. return true;
    183. }
    184. }
    185. }
    186. sender.sendMessage("You are not part of any guild!");
    187. } else {
    188. sender.sendMessage("Usage: /guilds create [guildname]; /guilds join [guildname]; /guilds leave");
    189. return false;
    190. }
    191. } else {
    192. sender.sendMessage("Usage: /guilds create [guildname]; /guilds join [guildname]; /guilds leave");
    193. return false;
    194. }
    195. }
    196. } else {
    197. sender.sendMessage("You must be a Player");
    198. return false;
    199. }
    200. return false;
    201. }
    202. }
    203.  
     
  2. Offline

    TopTobster5

    Can you show us your code please.
     
  3. Offline

    KilboxNoUltra

    edited original post
     
  4. Offline

    TopTobster5

    KilboxNoUltra I think it resets when the player logs out. You need to have a PlayerJoinEvent which adds the prefix again once a player joins the server.
     
  5. Offline

    KilboxNoUltra

    That's what I though about as well so, I am already working on it. Althought that's really strange because you add a prefix to a team, not particular name:confused:
     
  6. Offline

    TopTobster5

    KilboxNoUltra The player is not added back to the team probably then.
     
  7. Offline

    SpaceManiac

    It's probably something simpler: the player's scoreboard is reset to the default, you need to set it back to "board" when they join. The team should remember players even if they relog.
     
  8. Offline

    KilboxNoUltra


    By Testing checked that team still exists, also I am still part of a team, so it didn't remove me.


    Tried to set my Scorboard to board, I get an error that it cannot get a scoreboard yet. If not during logging, the when should I get it?

    EDIT: Did testing with PlayerEggThrowEvent, it actually works so, you were right I just need to add players to the scoreboard, but there is still the same question of when I should do it.

    My new PlayerListener class
    Code:java
    1. package io.github.kilboxnoultra.guildworld;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.entity.Player;
    6. import org.bukkit.event.EventHandler;
    7. import org.bukkit.event.Listener;
    8. import org.bukkit.event.player.PlayerLoginEvent;
    9. import org.bukkit.scoreboard.Team;
    10.  
    11. public class PlayerListener implements Listener{
    12.  
    13. GuildWorld plugin;
    14.  
    15. public PlayerListener(GuildWorld plugin) {
    16. plugin.getServer().getPluginManager().registerEvents(this, plugin);
    17. this.plugin = plugin;
    18. }
    19.  
    20. @EventHandler
    21. public void onLogin(PlayerLoginEvent event) {
    22.  
    23. Player logger = event.getPlayer();
    24. Team loggersTeam = GuildWorldCommandExecutor.board.getPlayerTeam(logger);
    25. if (loggersTeam != null) {
    26. logger.setScoreboard(GuildWorldCommandExecutor.board);
    27. // logger.setDisplayName(ChatColor.BLUE + "KilboxNoUltra");
    28. // logger.setPlayerListName(ChatColor.BLUE + "KilboxNoUltra");
    29. }
    30. }
    31. }
    32.  
     
  9. Offline

    SpaceManiac

    I would give PlayerJoinEvent a try rather than PlayerLoginEvent.
     
  10. Offline

    KilboxNoUltra

    I tried that, It's too early as well, although it doesn't throw an error anymore, it is still a bit too early for the nametags and such too update.
     
  11. Offline

    AoH_Ruthless

    KilboxNoUltra
    Schedule a tick delay before setting scoreboard. If that still is too early, set a 5 tick delay.
     
  12. Offline

    KilboxNoUltra


    Never worked with schedulers before. Can you help me and tell me the way I should set it up?

    Edit: I did it, and it works now! Thanks for the help to all of you!
     
Thread Status:
Not open for further replies.

Share This Page