Solved Repeating Scheduler

Discussion in 'Plugin Development' started by Setes, Jul 2, 2018.

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

    Setes

    My Problem is that my Scheduler repeat the task to often

    My Run-task:
    Code:
    public void run() {
                 
                    int durst = getConfig().getInt("Config." + p.getDisplayName() + ".durst");
                    if (p.isSprinting()) {
                        p.sendMessage("Test");
                        durst = durst - 5;
                        getConfig().set("Config." + p.getDisplayName() + ".durst", durst);
                        saveConfig();
                    } else {
    
                        Bukkit.getScheduler().cancelTask(count);
    
                    }
                }
    
            }, 0L, 240000000L);
    My Chat-Log:
     
    Last edited: Jul 3, 2018
  2. Offline

    timtower Administrator Administrator Moderator

    @Setes Post the full code please.
     
  3. Offline

    Setes

    Code:
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.entity.EntityDamageByEntityEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import me.setes.dp.cmd.show;
    
    public class main extends JavaPlugin implements Listener, CommandExecutor {
        static int count;
    
        public void onEnable() {
            registerCommnad();
            loadConfig();
            PluginManager pm = Bukkit.getServer().getPluginManager();
            pm.registerEvents(this, this);
        }
    
        public void loadConfig() {
            getConfig().options().copyDefaults(true);
            saveConfig();
        }
    
        private void registerCommnad() {
            getCommand("testdurst").setExecutor(this);
            getCommand("showdurst").setExecutor(new show(this));
        }
    
        @EventHandler
        public void onJoin(PlayerJoinEvent e) {
            Player p = e.getPlayer();
            int durst = getConfig().getInt("Config." + p.getDisplayName() + ".durst");
            if (durst <= 0) {
                if (!(p.hasPlayedBefore())) {
                    getConfig().set("Config." + p.getDisplayName() + ".durst", 200);
                    saveConfig();
                }
            }
    
            p.sendMessage("Durst:" + durst);
        }
    
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onDrink(PlayerInteractEvent e) {
            Player p = e.getPlayer();
            int durst = getConfig().getInt("Config." + p.getDisplayName() + ".durst");
            if (e.getAction().equals(Action.RIGHT_CLICK_AIR)) {
                if (p.getItemInHand().getType() == Material.GLASS_BOTTLE) {
                    if (durst <= 150) {
                        getConfig().set("Config." + p.getDisplayName() + ".durst", durst + 50);
                        saveConfig();
                    } else {
                        getConfig().set("Config." + p.getDisplayName() + ".durst", 200);
                        saveConfig();
                    }
                }
            }
            if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
                if (p.getItemInHand().getType() == Material.GLASS_BOTTLE) {
                    if (durst <= 150) {
                        getConfig().set("Config." + p.getDisplayName() + ".durst", durst + 50);
                        saveConfig();
                    } else {
                        getConfig().set("Config." + p.getDisplayName() + ".durst", 200);
                        saveConfig();
                    }
                }
            }
            if (e.getAction().equals(Action.LEFT_CLICK_AIR)) {
                durst = durst - 2;
                if (durst <= 0) {
                    durst = 0;
                }
                getConfig().set("Config." + p.getDisplayName() + ".durst", durst);
                saveConfig();
            }
    
        }
    
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onHit(EntityDamageByEntityEvent e) {
    
            if (e.getDamager() instanceof Player) {
                Player p = (Player) e.getDamager();
                int durst = getConfig().getInt("Config." + p.getDisplayName() + ".durst");
                if (p.getItemInHand().getType().equals(Material.WOOD_SWORD)) {
                    durst = durst - 12;
                    if (durst <= 0) {
                        durst = 0;
                    }
                } else if (p.getItemInHand().getType().equals(Material.STONE_SWORD)) {
                    durst = durst - 14;
                    if (durst <= 0) {
                        durst = 0;
                    }
                } else if (p.getItemInHand().getType().equals(Material.IRON_SWORD)) {
                    durst = durst - 15;
                    if (durst <= 0) {
                        durst = 0;
                    }
                } else if (p.getItemInHand().getType().equals(Material.GOLD_SWORD)) {
                    durst = durst - 20;
                    if (durst <= 0) {
                        durst = 0;
                    }
                } else if (p.getItemInHand().getType().equals(Material.DIAMOND_SWORD)) {
                    durst = durst - 14;
                    if (durst <= 0) {
                        durst = 0;
                    }
                } else {
                    durst = durst - 10;
                    if (durst <= 0) {
                        durst = 0;
                    }
                }
                getConfig().set("Config." + p.getDisplayName() + ".durst", durst);
                saveConfig();
            }
        }
    
        @EventHandler
        public void onMove(PlayerMoveEvent e) {
            Player p = e.getPlayer();
    
            count = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
    
                @Override
                public void run() {
                   
                    int durst = getConfig().getInt("Config." + p.getDisplayName() + ".durst");
                    if (p.isSprinting()) {
                        p.sendMessage("Test");
                        durst = durst - 5;
                        getConfig().set("Config." + p.getDisplayName() + ".durst", durst);
                        saveConfig();
                    } else {
    
                        Bukkit.getScheduler().cancelTask(count);
    
                    }
                }
    
            }, 0L, 240000000L);
        }
    
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            Player p = (Player) sender;
    
            if (sender instanceof Player) {
                if (label.equalsIgnoreCase("testdurst")) {
                    getConfig().set("Config." + p.getDisplayName() + ".durst", 100);
                    saveConfig();
                }
            }
    
            return true;
    
        }
    
    }
    
    I only want know what is wrong with the onMove-methode. The others do what they have to do...
     
  4. Offline

    timtower Administrator Administrator Moderator

    @Setes the onMove starta a new eunnable every time it gets called.
    And that is per player.
    Assuming that you have 5 players that are all moving: 100 new runnabkes per second.
     
  5. Offline

    Setes

    and how can I fix this or what can I take to make it better
     
  6. Offline

    timtower Administrator Administrator Moderator

    @Setes Start it once and let it handle all players.
     
  7. Offline

    Setes

    can i do this with a "for" loop insite of the runnable?
     
  8. Offline

    timtower Administrator Administrator Moderator

    To go over all players? Yes, you can.
     
  9. Offline

    Setes

    i don't get it how can i do this
     
  10. Offline

    timtower Administrator Administrator Moderator

    Start one in the onEnable and make a for loop over all online players
     
  11. Offline

    Setes

    Thanks for helping me ^^
     
Thread Status:
Not open for further replies.

Share This Page