I'm trying to make a paycheck plugin and I've gotten the basics down. However I've noticed that the first time you get payed it's the correct time which is 15 minutes. However each time you get payed the countdown gets faster and faster making you get the paycheck quicker. Here is the code Code: package me.plisov.payday.listeners; import java.io.File; import java.io.IOException; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.plugin.Plugin; import me.plisov.payday.Enable; import ru.tehkode.permissions.bukkit.PermissionsEx; public class onJoin implements Listener { Enable plugin; public onJoin(Enable plugin){ this.plugin = plugin; } int amount = 50; int minute = 20 * 60; int hour = minute * 60; int day = hour * 24; int week = day * 7; int month = week * 4; int year = month * 12; @SuppressWarnings("deprecation") @EventHandler public void onPlayerJoin(PlayerJoinEvent event) throws IOException { Player player = (Player) event.getPlayer(); if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Peasant")) { amount = 50; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Serf")) { amount = 75; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Merchant")) { amount = 100; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Knight")) { amount = 150; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Noble")) { amount = 200; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("King")) { amount = 250; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("DemiGod")) { amount = 300; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Immortal")) { amount = 400; } FileConfiguration config = null; File file = new File("plugins" + File.separator + "PayDay" + File.separator + "users" + File.separator + player.getUniqueId() + " (" + player.getName() + ")" + ".yml"); if(!file.exists()) { System.out.println("File Created: " + event.getPlayer().getUniqueId() + ".yml" + " (" + event.getPlayer().getName() + ")"); try { file.createNewFile(); } catch (IOException e) { //e.printStackTrace(); } config = YamlConfiguration.loadConfiguration(file); config.set("Player.Name", event.getPlayer().getName()); config.set("Player.Rank", PermissionsEx.getUser(player).getGroups()[0].getName()); config.set("Player.Time-Left", 300); config.set("Player.Time-Max", 300); config.set("Player.Amount-Recieved", amount); try { config.save(file); } catch (IOException e) { } } config = YamlConfiguration.loadConfiguration(file); if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Peasant")) { config.set("Player.Rank", PermissionsEx.getUser(player).getGroups()[0].getName()); config.set("Player.Amount-Recieved", amount); config.save(file); Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { public void run() { FileConfiguration config = null; File file = new File("plugins" + File.separator + "PayDay" + File.separator + "users" + File.separator + player.getUniqueId() + " (" + player.getName() + ")" + ".yml"); config = YamlConfiguration.loadConfiguration(file); int timeLeft = config.getInt("Plater.Time-Left"); int timeMax = config.getInt("Plater.Time-Max"); if(config.getInt("Player.Time-Left") <= 0) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $50"); config.set("Player.Time-Left", timeMax); try { config.save(file); } catch (IOException e) { } } else { if(player.isOnline()) { timeLeft--; config.set("Player.Time-Left", timeLeft); try { config.save(file); } catch (IOException e) { } } else { return; } } } }, 20L, 200L); } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Serf")) { config.set("Player.Rank", PermissionsEx.getUser(player).getGroups()[0].getName()); config.set("Player.Amount-Recieved", amount); config.save(file); Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { public void run() { FileConfiguration config = null; File file = new File("plugins" + File.separator + "PayDay" + File.separator + "users" + File.separator + player.getUniqueId() + " (" + player.getName() + ")" + ".yml"); config = YamlConfiguration.loadConfiguration(file); int timeLeft = config.getInt("Plater.Time-Left"); int timeMax = config.getInt("Plater.Time-Max"); if(config.getInt("Player.Time-Left") <= 0) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $75"); timeLeft = timeMax; config.set("Player.Time-Left", timeMax); try { config.save(file); } catch (IOException e) { } } else { if(player.isOnline()) { timeLeft--; config.set("Player.Time-Left", timeLeft); try { config.save(file); } catch (IOException e) { } } else { return; } } } }, 20L, 200L); } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Merchant")) { config.set("Player.Rank", PermissionsEx.getUser(player).getGroups()[0].getName()); config.set("Player.Amount-Recieved", amount); config.save(file); Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { public void run() { FileConfiguration config = null; File file = new File("plugins" + File.separator + "PayDay" + File.separator + "users" + File.separator + player.getUniqueId() + " (" + player.getName() + ")" + ".yml"); config = YamlConfiguration.loadConfiguration(file); int timeLeft = config.getInt("Plater.Time-Left"); int timeMax = config.getInt("Plater.Time-Max"); if(config.getInt("Player.Time-Left") <= 0) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $100"); timeLeft = timeMax; config.set("Player.Time-Left", timeMax); try { config.save(file); } catch (IOException e) { } } else { if(player.isOnline()) { timeLeft--; config.set("Player.Time-Left", timeLeft); try { config.save(file); } catch (IOException e) { } } else { return; } } } }, 20L, 200L); } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Knight")) { config.set("Player.Rank", PermissionsEx.getUser(player).getGroups()[0].getName()); config.set("Player.Amount-Recieved", amount); config.save(file); Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { public void run() { FileConfiguration config = null; File file = new File("plugins" + File.separator + "PayDay" + File.separator + "users" + File.separator + player.getUniqueId() + " (" + player.getName() + ")" + ".yml"); config = YamlConfiguration.loadConfiguration(file); int timeLeft = config.getInt("Plater.Time-Left"); int timeMax = config.getInt("Plater.Time-Max"); if(config.getInt("Player.Time-Left") <= 0) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $150"); timeLeft = timeMax; config.set("Player.Time-Left", timeMax); try { config.save(file); } catch (IOException e) { } } else { if(player.isOnline()) { timeLeft--; config.set("Player.Time-Left", timeLeft); try { config.save(file); } catch (IOException e) { } } else { return; } } } }, 20L, 200L); } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Noble")) { config.set("Player.Rank", PermissionsEx.getUser(player).getGroups()[0].getName()); config.set("Player.Amount-Recieved", amount); config.save(file); Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { public void run() { FileConfiguration config = null; File file = new File("plugins" + File.separator + "PayDay" + File.separator + "users" + File.separator + player.getUniqueId() + " (" + player.getName() + ")" + ".yml"); config = YamlConfiguration.loadConfiguration(file); int timeLeft = config.getInt("Plater.Time-Left"); int timeMax = config.getInt("Plater.Time-Max"); if(config.getInt("Player.Time-Left") <= 0) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $200"); timeLeft = timeMax; config.set("Player.Time-Left", timeMax); try { config.save(file); } catch (IOException e) { } } else { if(player.isOnline()) { timeLeft--; config.set("Player.Time-Left", timeLeft); try { config.save(file); } catch (IOException e) { } } else { return; } } } }, 20L, 200L); } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("King")) { config.set("Player.Rank", PermissionsEx.getUser(player).getGroups()[0].getName()); config.set("Player.Amount-Recieved", amount); config.save(file); Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { public void run() { FileConfiguration config = null; File file = new File("plugins" + File.separator + "PayDay" + File.separator + "users" + File.separator + player.getUniqueId() + " (" + player.getName() + ")" + ".yml"); config = YamlConfiguration.loadConfiguration(file); int timeLeft = config.getInt("Plater.Time-Left"); int timeMax = config.getInt("Plater.Time-Max"); if(config.getInt("Player.Time-Left") <= 0) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $250"); timeLeft = timeMax; config.set("Player.Time-Left", timeMax); try { config.save(file); } catch (IOException e) { } } else { if(player.isOnline()) { timeLeft--; config.set("Player.Time-Left", timeLeft); try { config.save(file); } catch (IOException e) { } } else { return; } } } }, 20L, 200L); } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("DemiGod")) { config.set("Player.Rank", PermissionsEx.getUser(player).getGroups()[0].getName()); config.set("Player.Amount-Recieved", amount); config.save(file); Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { public void run() { FileConfiguration config = null; File file = new File("plugins" + File.separator + "PayDay" + File.separator + "users" + File.separator + player.getUniqueId() + " (" + player.getName() + ")" + ".yml"); config = YamlConfiguration.loadConfiguration(file); int timeLeft = config.getInt("Plater.Time-Left"); int timeMax = config.getInt("Plater.Time-Max"); if(config.getInt("Player.Time-Left") <= 0) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $300"); timeLeft = timeMax; config.set("Player.Time-Left", timeMax); try { config.save(file); } catch (IOException e) { } } else { if(player.isOnline()) { timeLeft--; config.set("Player.Time-Left", timeLeft); try { config.save(file); } catch (IOException e) { } } else { return; } } } }, 20L, 200L); } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Immortal")) { config.set("Player.Rank", PermissionsEx.getUser(player).getGroups()[0].getName()); config.set("Player.Amount-Recieved", amount); config.save(file); Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { public void run() { FileConfiguration config = null; File file = new File("plugins" + File.separator + "PayDay" + File.separator + "users" + File.separator + player.getUniqueId() + " (" + player.getName() + ")" + ".yml"); config = YamlConfiguration.loadConfiguration(file); int timeLeft = config.getInt("Plater.Time-Left"); int timeMax = config.getInt("Plater.Time-Max"); if(config.getInt("Player.Time-Left") <= 0) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $400"); timeLeft = timeMax; config.set("Player.Time-Left", timeMax); try { config.save(file); } catch (IOException e) { } } else { if(player.isOnline()) { timeLeft--; config.set("Player.Time-Left", timeLeft); try { config.save(file); } catch (IOException e) { } } else { return; } } } }, 20L, 200L); } } }
@plisov May I suggest that you use 1 runnable that handles everything instead of making a new one every join? Will highly reduce the amount of code.
Em. I don't really know how to do that given the circumstances I have currently. For each rank they get paid a different amount.
Alright, I'll try that. Besides that however, do you have any idea as to why the countdown speeds up?
Ah. Okay so I assume this is what you meant. However when I join the time-left is automatically set to 0 and it doesn't reset back to 300. Code: package me.plisov.payday.listeners; import java.io.File; import java.io.IOException; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import me.plisov.payday.Enable; import ru.tehkode.permissions.bukkit.PermissionsEx; public class onPlayerJoin implements Listener { Enable plugin; public onPlayerJoin(Enable plugin){ this.plugin = plugin; } int amount = 50; @SuppressWarnings("deprecation") @EventHandler public void onPlayerJoinEvent(PlayerJoinEvent event) throws IOException { Player player = (Player) event.getPlayer(); if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Peasant")) { amount = 50; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Serf")) { amount = 75; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Merchant")) { amount = 100; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Knight")) { amount = 150; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Noble")) { amount = 200; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("King")) { amount = 250; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("DemiGod")) { amount = 300; } else if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Immortal")) { amount = 400; } FileConfiguration config = null; File file = new File("plugins" + File.separator + "PayDay" + File.separator + "users" + File.separator + player.getUniqueId() + " (" + player.getName() + ")" + ".yml"); if(!file.exists()) { System.out.println("File Created: " + event.getPlayer().getUniqueId() + ".yml" + " (" + event.getPlayer().getName() + ")"); try { file.createNewFile(); } catch (IOException e) { //e.printStackTrace(); } config = YamlConfiguration.loadConfiguration(file); config.set("Player.Name", event.getPlayer().getName()); config.set("Player.Rank", PermissionsEx.getUser(player).getGroups()[0].getName()); config.set("Player.Time-Left", 300); config.set("Player.Time-Max", 300); config.set("Player.Amount-Recieved", amount); try { config.save(file); } catch (IOException e) { } } config = YamlConfiguration.loadConfiguration(file); Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { public void run() { FileConfiguration config = null; File file = new File("plugins" + File.separator + "PayDay" + File.separator + "users" + File.separator + player.getUniqueId() + " (" + player.getName() + ")" + ".yml"); config = YamlConfiguration.loadConfiguration(file); int timeLeft = config.getInt("Player.Time-Left"); int timeMax = config.getInt("Player.Time-Max"); timeLeft--; try { config.save(file); } catch (IOException e1) { } if(config.getInt("Player.Time-Left") <= 0) { if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Peasant")) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $" + amount); } if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Serf")) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $" + amount); } if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Merchant")) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $" + amount); } if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Knight")) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $" + amount); } if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Noble")) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $" + amount); } if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("King")) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $" + amount); } if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("DemiGod")) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $" + amount); } if(PermissionsEx.getUser(player).getGroups()[0].getName().equalsIgnoreCase("Immortal")) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "eco give " + player.getName() + " " + amount); player.sendMessage("You have recieved your paycheck of $" + amount); } config.set("Player.Time-Left", timeMax); try { config.save(file); } catch (IOException e) { } } else { if(player.isOnline()) { timeLeft--; config.set("Player.Time-Left", timeLeft); try { config.save(file); } catch (IOException e) { } } else { return; } } } }, 20L, 200L); } }
That's correct. I don't want them getting paid at the same exact time. Each player will get paid when their time is up
@plisov Then you make a HashMap<UUID,Time> Then you can still use the same runnable AND everybody will get paid when it is their time.