My Schedulers cancel theirselves automatically

Discussion in 'Plugin Development' started by Dealyise, Jul 8, 2014.

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

    Dealyise

    Basically what I've said in the title, my schedulers stop working after some time and I dont know why.
    Especially my Scoreboard & Payday Timer, they stop working after I login myself for any reason.

    Login class:
    Code:java
    1. package me.Temphis.sys;
    2.  
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5. import java.util.Date;
    6.  
    7. import org.bukkit.Bukkit;
    8. import org.bukkit.command.Command;
    9. import org.bukkit.command.CommandExecutor;
    10. import org.bukkit.command.CommandSender;
    11. import org.bukkit.entity.Player;
    12.  
    13. public class LoginCommand implements CommandExecutor {
    14. public static System plugin;
    15.  
    16. @SuppressWarnings("unused")
    17. @Override
    18. public boolean onCommand(CommandSender sender, Command cmd, String label,
    19. String[] args) {
    20. if(args.length == 1){
    21. plugin.sql.openConnection();
    22. boolean isNotOnline1 = false;
    23. ResultSet getQuery4 = plugin
    24. .sql.ReturnQuery("SELECT * FROM account WHERE username='"
    25. + sender.getName() + "' AND online='0'");
    26. try{
    27. while(getQuery4.next()){
    28. isNotOnline1 = true;
    29. }
    30. }catch (SQLException e) {
    31. e.printStackTrace();
    32. }
    33. plugin.sql.closeConnection();
    34. if(isNotOnline1 == true){
    35. plugin.sql.openConnection();
    36. boolean isRegistered = false;
    37. ResultSet getQuery = plugin
    38. .sql.ReturnQuery("SELECT * FROM account WHERE username='"
    39. + sender.getName() + "'");
    40. try{
    41. while(getQuery.next()){
    42. isRegistered = true;
    43. }
    44. }catch (SQLException e) {
    45. e.printStackTrace();
    46. }
    47. plugin.sql.closeConnection();
    48. if(isRegistered == true){
    49. plugin.sql.openConnection();
    50. boolean rightPassword = false;
    51. ResultSet getQuery2 = plugin
    52. .sql.ReturnQuery("SELECT * FROM account WHERE username='"
    53. + sender.getName() + "' AND passwort='" + sysFunc.md5Java(args[0]) + "'");
    54. try{
    55. while(getQuery2.next()){
    56. rightPassword = true;
    57. }
    58. }catch (SQLException e) {
    59. e.printStackTrace();
    60. }
    61. plugin.sql.closeConnection();
    62. if(rightPassword == true){
    63.  
    64. doLogin((Player) sender);
    65.  
    66.  
    67. }else{
    68. sysFunc.msg((Player) sender, "Falsches Passwort!");
    69. }
    70. }else{
    71. sysFunc.msg((Player) sender, "Du bist nicht registriert!");
    72. sysFunc.msg((Player) sender, "Bitte registriere dich vorher mit /register!");
    73. }
    74. }else{
    75. sysFunc.msg((Player) sender, "Du bist bereits eingeloggt!");
    76. }
    77.  
    78. }else{
    79. sysFunc.msg((Player) sender, "/login <Passwort>");
    80. }
    81.  
    82.  
    83. return false;
    84. }
    85.  
    86. @SuppressWarnings("deprecation")
    87. public void doLogin(final Player p){
    88.  
    89.  
    90. plugin.sql.openConnection();
    91. plugin.sql.queryUpdate("UPDATE account SET online='1' WHERE username='" + p.getName() + "'");
    92. plugin.sql.queryUpdate("UPDATE account SET logintries='0' WHERE username='" + p.getName() + "'");
    93.  
    94. String ip = p.getAddress().toString();
    95. String[] splitip = ip.split("/");
    96. String[] splitip2 = splitip[1].split(":");
    97. String newIP = splitip2[0];
    98. long currentUnix = new Date().getTime()/1000;
    99. long logintime = currentUnix + 180;
    100. plugin.sql.queryUpdate("UPDATE account SET `lastlogin`='" + logintime + "' WHERE username='" + p.getName() + "'");
    101. plugin.sql.queryUpdate("UPDATE account SET `lastip`='" + newIP + "' WHERE username='" + p.getName() + "'");
    102. long newTime = (int) (currentUnix + 10);//(int) (currentUnix + (60*60*1));
    103. DataModifier.setPlayerData("lastpayday", p, null, (int) newTime);
    104. sysFunc.msg(p, "Du wurdest erfolgreich eingeloggt!");
    105. sysFunc.msg(p, "Viel Spaß wünscht dir CrimeZone!");
    106. // if(plugin.packetRed.isRed((Player) sender)){
    107.  
    108. // }else{
    109. // plugin.packetRed.removeRed((Player)sender);
    110. // plugin.packetRed.addRed((Player)sender);
    111. // }
    112. paydayFunc.loginSchleife.remove(p.getName());
    113. sysFunc.removeLoginQueue(p);
    114. plugin.sql.closeConnection();
    115.  
    116.  
    117.  
    118. }
    119. }
    120.  


    Payday Scheduler Class:
    Code:java
    1. package me.Temphis.sys;
    2.  
    3.  
    4.  
    5.  
    6.  
    7. import java.util.ArrayList;
    8. import java.util.Date;
    9.  
    10. import org.bukkit.entity.Player;
    11. import org.bukkit.scheduler.BukkitRunnable;
    12.  
    13.  
    14. public class paydayFunc{
    15. public static System plugin;
    16. public static boolean taskRunning = false;
    17. public static int taskId;
    18. public static ArrayList<String>loginSchleife = new ArrayList<String>();
    19.  
    20. public static void startTask() {
    21. if (taskRunning) return;
    22. taskRunning = true;
    23. long interval = Math.round(1 * 20.0);
    24. taskId = plugin.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin,
    25. new paydayTask(), interval, interval);
    26. }
    27. public static void endTask() {
    28. if (!taskRunning) return;
    29. taskRunning = false;
    30. plugin.getServer().getScheduler().cancelTask(taskId);
    31. }
    32.  
    33. public static class paydayTask implements Runnable {
    34. public void run() {
    35. try{
    36. checkPayday();
    37. }catch(Exception ex){
    38. System.log.info("Payday Timer ist gecrasht -> " + ex.getMessage());
    39. ex.printStackTrace();
    40. }
    41. }
    42. }
    43.  
    44. public static void checkPayday(){
    45. for(Player p : plugin.getServer().getOnlinePlayers()){
    46.  
    47. if(loginSchleife.contains(p.getName())){
    48. System.log.info("Spieler " + p.getName() + " ist noch in der Loginschleife:");
    49. System.log.info("Alle Spieler in der Login Liste: " + loginSchleife);
    50. }else{
    51. int currentUnix = (int) (new Date().getTime()/1000);
    52. int paydayUnix = Integer.parseInt(DataModifier.playerData("lastpayday", p));
    53. int newTime = currentUnix + 10;//(int) (currentUnix + (60*60*1));
    54.  
    55. //p.sendMessage("UNIX 1: " + currentUnix);
    56. //p.sendMessage("UNIX 2: " + paydayUnix);
    57. //p.sendMessage("Unix 3: " + newTime);
    58. DataModifier.setPlayerData("lastpayday", p, null, newTime);
    59. // int currentMoney = Integer.parseInt(DataModifier.playerData("money", p));
    60. //p.sendMessage("Money 1: " + currentMoney);
    61.  
    62.  
    63. int exp = Integer.parseInt(DataModifier.playerData("exp", p));
    64. //p.sendMessage("EXP 1: " + exp);
    65. // int level = exp / 80;
    66. //p.sendMessage("Level 1: " + level);
    67. int giveEXP = exp + 10;
    68. //p.sendMessage("EXP 2: " + giveEXP);
    69. DataModifier.setPlayerData("exp", p, null, giveEXP);
    70. int currentMoneyNew = Integer.parseInt(DataModifier.playerData("money", p));
    71. //p.sendMessage("Money 2: " + currentMoneyNew);
    72. int levelNew = exp / 80;
    73. //p.sendMessage("Level 2: " + levelNew);
    74. int payMoney = 500 * levelNew;
    75. //p.sendMessage("Money 3: " + payMoney);
    76. int newAmount = currentMoneyNew + payMoney;
    77. //p.sendMessage("Money 4: " + newAmount);
    78. DataModifier.setPlayerData("money", p, null, newAmount);
    79. sysFunc.msg(p, "Payday erhalten!");
    80. sysFunc.msg(p, "+10 EXP und $" + payMoney + " !" );
    81. System.log.info("Spieler " + p.getName() + " hat einen Payday erhalten! Money: $" + newAmount + "");
    82.  
    83.  
    84.  
    85.  
    86. }
    87. }
    88. }
    89. }
    90.  


    Scoreboard Scheduler Class:
    Code:java
    1. package me.Temphis.sys;
    2.  
    3. import java.text.DateFormat;
    4. import java.text.SimpleDateFormat;
    5. import java.util.ArrayList;
    6. import java.util.Date;
    7.  
    8. import me.Temphis.sys.timeRunner.timeTask;
    9.  
    10. import org.bukkit.Location;
    11. import org.bukkit.entity.Player;
    12. import org.bukkit.scoreboard.DisplaySlot;
    13. import org.bukkit.scoreboard.Objective;
    14. import org.bukkit.scoreboard.Score;
    15. import org.bukkit.scoreboard.Scoreboard;
    16. import org.bukkit.scoreboard.ScoreboardManager;
    17.  
    18. public class scoreboardTimer {
    19. public static ArrayList<Player>sbJoin = new ArrayList<Player>();
    20. public static System plugin;
    21. public static boolean taskRunning = false;
    22. public static int taskId;
    23. public static void startTask() {
    24. if (taskRunning) return;
    25. taskRunning = true;
    26. long interval = Math.round(1 * 20.0);
    27. taskId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin,
    28. new timeTask2(), interval, interval);
    29. }
    30. public static void endTask() {
    31. if (!taskRunning) return;
    32. taskRunning = false;
    33. plugin.getServer().getScheduler().cancelTask(taskId);
    34. }
    35.  
    36. public static class timeTask2 implements Runnable {
    37. @SuppressWarnings("deprecation")
    38. public void run() {
    39. ScoreboardManager manager = plugin.getServer().getScoreboardManager();
    40. Scoreboard board = manager.getNewScoreboard();
    41. Objective obj = board.registerNewObjective("test", "dummy");
    42. //Setting where to display the scoreboard/objective (either SIDEBAR, PLAYER_LIST or BELOW_NAME)
    43. obj.setDisplaySlot(DisplaySlot.SIDEBAR);
    44.  
    45. //Setting the display name of the scoreboard/objective
    46. obj.setDisplayName("§6-§b=§3[§eInfo§3]§b=§6-");
    47. Score score = obj.getScore(plugin.getServer().getOfflinePlayer("§3[§6Uhrzeit§3]")); //Get a fake offline player
    48. DateFormat dateFormat = new SimpleDateFormat("HH:mm");
    49. DateFormat dateFormat2 = new SimpleDateFormat("HH:mm:ss");
    50. Date date = new Date();
    51. String currentHour = dateFormat2.format(date);
    52. String[] time = currentHour.split(":");
    53. System.log.info("Es ist jetzt " + dateFormat.format(date));
    54. Score score2 = obj.getScore(plugin.getServer().getOfflinePlayer("§e" + dateFormat.format(date))); //Get a fake offline player
    55. Score score3 = obj.getScore(plugin.getServer().getOfflinePlayer("")); //Get a fake offline player
    56. score.setScore(2);
    57. score2.setScore(1);
    58. score3.setScore(3);
    59. for(Player player: plugin.getServer().getOnlinePlayers()){
    60. player.setScoreboard(board);
    61. }
    62.  
    63.  
    64. }
    65. }
    66.  
    67. }
    68.  


    My onEnable Method:
    Code:java
    1. public void onEnable() {
    2.  
    3.  
    4.  
    5. //Registriere die Klassen
    6. this.sql = new SysDB();
    7. new AutoRespawn(this);
    8. java.lang.System.out.println("@@@[System] Initializing Classes...");
    9.  
    10.  
    11. // Sage Klassen das System die MainPlugin ist
    12. sysFunc.plugin = this;
    13. scoreboardTimer.plugin = this;
    14. RegisterCommand.plugin = this;
    15. LoginCommand.plugin = this;
    16. PlayerJoin.plugin = this;
    17. EXPListener.plugin = this;
    18. timeRunner.plugin = this;
    19. paydayFunc.plugin = this;
    20. java.lang.System.out.println("@@@[System] Initializing Subclasses...");
    21.  
    22. //Reset der Settings
    23. java.lang.System.out.println("@@@[System] Initializing Settings...");
    24. DataModifier.resetToggle();
    25.  
    26.  
    27. //Starte Tasks
    28. //PlayerJoin.startTask();
    29. timeRunner.startTask();
    30. scoreboardTimer.startTask();
    31. paydayFunc.startTask();
    32. java.lang.System.out.println("@@@[System] Initializing Tasks...");
    33.  
    34. // Alle Listener registrieren
    35. java.lang.System.out.println("@@@[System] Initializing Listeners...");
    36. sysFunc.register(new PlayerJoin(), this);
    37. sysFunc.register(new PlayerLogin(), this);
    38. sysFunc.register(new SignHandle(), this);
    39. sysFunc.register(new EXPListener(), this);
    40.  
    41.  
    42.  
    43.  
    44.  
    45.  
    46. }


    I am really out of ideas, they just stop working after some time. Here, a little log where you can see exactly what I mean:
    Code:
    11:48:45 [INFO] Temphis[/****] logged in with entity id 456 at ([world] 145.88227051294248, 72.0, -5.129174245974443)
    11:48:45 [INFO] Es ist jetzt 11:48
    11:48:46 [INFO] Es ist jetzt 11:48
    11:48:47 [INFO] Es ist jetzt 11:48
    11:48:48 [INFO] Es ist jetzt 11:48
    11:48:49 [INFO] Es ist jetzt 11:48
    11:48:50 [INFO] Es ist jetzt 11:48
    11:48:51 [INFO] Es ist jetzt 11:48
    11:48:52 [INFO] Es ist jetzt 11:48
    11:48:53 [INFO] Es ist jetzt 11:48
    11:48:54 [INFO] Es ist jetzt 11:48
    11:48:55 [INFO] Temphis issued server command: /login ****
    11:48:55 [INFO] Es ist jetzt 11:48
    11:48:56 [INFO] Es ist jetzt 11:48
    11:48:57 [INFO] Es ist jetzt 11:48
    11:48:58 [INFO] Es ist jetzt 11:48
    11:48:59 [INFO] Es ist jetzt 11:48
    **And here he stops, at 11:48:59, right after the login. If I join with a session login, everything works fine without problems, but when I login, it cancel itself.**
    The Login Process in onPlayerJoin:
    Code:java
    1. @EventHandler
    2. public void onPlayerJoin(PlayerJoinEvent e){
    3. scoreboardTimer.sbJoin.add(e.getPlayer());
    4.  
    5. if(scoreboardTimer.sbJoin.size() > 0){
    6. if(!scoreboardTimer.taskRunning){
    7. scoreboardTimer.startTask();
    8. }
    9. }
    10. e.setJoinMessage(e.getPlayer().getDisplayName() + " §7hat den Server §6betreten§7!");
    11. try{
    12. DataModifier.getPlayerData(e.getPlayer());
    13. String inJail = jail.checkJailTime(e.getPlayer());
    14. if(inJail != "Nein"){
    15. final Location loc = new Location(sysFunc.plugin.getServer().getWorld("world"), 99.12157, 64.000, 53.00666, (float)14.43837, (float)91.41412);
    16. e.getPlayer().teleport(loc);
    17. EXPListener.jailList.put(e.getPlayer(), 0);
    18. }
    19. }catch(Exception ex){
    20.  
    21. }
    22. plugin.sql.openConnection();
    23. boolean isAlreadyRegistered = false;
    24. ResultSet getQuery = plugin
    25. .sql.ReturnQuery("SELECT * FROM account WHERE username='"
    26. + e.getPlayer().getName() + "'");
    27. try{
    28. while(getQuery.next()){
    29. isAlreadyRegistered = true;
    30. }
    31. }catch (SQLException ex) {
    32. ex.printStackTrace();
    33. }
    34.  
    35. if (isAlreadyRegistered == true) {
    36. long currentUnix = new Date().getTime()/1000;
    37. int logintime = Integer.parseInt(DataModifier.playerData("lastlogin", e.getPlayer()));
    38. if(currentUnix < logintime){
    39. String lastip = DataModifier.playerData("lastip", e.getPlayer());
    40. Player pl = e.getPlayer();
    41. pl.sendMessage("UNIX stimmt");
    42. String ip = pl.getAddress().toString();
    43. String[] splitip = ip.split("/");
    44. String[] splitip2 = splitip[1].split(":");
    45. String newIP = splitip2[0];
    46. pl.sendMessage("LastIP: " + lastip);
    47. pl.sendMessage("NewIP: " + newIP);
    48. if(lastip.equalsIgnoreCase(newIP)){
    49. pl.sendMessage("IP stimmt");
    50. plugin.sql.openConnection();
    51. plugin.sql.queryUpdate("UPDATE account SET `online`='1' WHERE `username`='" + pl.getName() + "'");
    52. plugin.sql.queryUpdate("UPDATE account SET `logintries`='0' WHERE `username`='" + pl.getName() + "'");
    53.  
    54.  
    55. plugin.sql.queryUpdate("UPDATE account SET `lastlogin`='" + logintime + "' WHERE `username`='" + pl.getName() + "'");
    56. plugin.sql.queryUpdate("UPDATE account SET `lastip`='" + newIP + "' WHERE `username`='" + pl.getName() + "'");
    57.  
    58. sysFunc.msg(pl, "Du wurdest automatisch eingeloggt (Session-Login)!");
    59. sysFunc.msg(pl, "Viel Spaß wünscht dir CrimeZone!");
    60.  
    61.  
    62. plugin.sql.closeConnection();
    63. }else{
    64. sysFunc.msg(e.getPlayer(), "Hallo! Bitte logge dich mit deinen Daten via /login ein!");
    65. plugin.sql.closeConnection();
    66. login.add(e.getPlayer());
    67. paydayFunc.loginSchleife.add(e.getPlayer().getName());
    68. if(login.size() >= 1){
    69. startTask();
    70. }
    71. }
    72. }else{
    73. e.getPlayer().sendMessage("Nix stimmt");
    74. sysFunc.msg(e.getPlayer(), "Hallo! Bitte logge dich mit deinen Daten via /login ein!");
    75. plugin.sql.closeConnection();
    76. login.add(e.getPlayer());
    77. paydayFunc.loginSchleife.add(e.getPlayer().getName());
    78. if(login.size() >= 1){
    79. startTask();
    80. }
    81. }
    82.  
    83.  
    84. }else{
    85. sysFunc.msg(e.getPlayer(), "Hallo! Bitte registriere dich via /register!");
    86. plugin.sql.closeConnection();
    87. login.add(e.getPlayer());
    88. paydayFunc.loginSchleife.add(e.getPlayer().getName());
    89. if(login.size() >= 1){
    90. startTask();
    91. }
    92.  
    93. }
    94.  
    95.  
    96. }


    Like I said above, I am really out of ideas and I need a fix asap!
    Please guys, can you help me out?

    greetz
     
Thread Status:
Not open for further replies.

Share This Page