Solved Spawn cooldown

Discussion in 'Spigot Plugin Development' started by KCVault, Feb 14, 2018.

Thread Status:
Not open for further replies.
  1. Hey! I'm doing a counter, when a player perform the command /spawn, a countdown start and the player will teleport to the spawn. When a player move when he is in the countdown, the player can't perform the command and when he move the countdown be canceled.
    Can someone help me?
    Code:
    Code (Java):
    if(sub.equalsIgnoreCase("setspawn")){
                                if(p.hasPermission("potpvp.setspawn")){
                                    Main.instance.getConfig().set("spawn.world", p.getLocation().getWorld().getName());
                                    Main.instance.getConfig().set("spawn.x", p.getLocation().getBlockX());
                                    Main.instance.getConfig().set("spawn.y", p.getLocation().getBlockY());
                                    Main.instance.getConfig().set("spawn.z", p.getLocation().getBlockZ());
                                    Main.instance.getConfig().options().copyDefaults(true);
                                    Main.instance.saveConfig();
                                    p.sendMessage("§aSpawn seted!");
                                    return true;
                                }else{p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.instance.getConfig().getString("noPermissions")));return true;}
                            }
                            if(sub.equalsIgnoreCase("spawn")){
                                if(p.hasPermission("potpvp.spawn")){
                                    if (Main.instance.getConfig().getConfigurationSection("spawn") == null) {
                                        p.getPlayer().sendMessage("§cThe spawn has not yet been set!");
                                        return true;
                                    }else if(Main.instance.getConfig().getConfigurationSection("spawn") != null){
                                        if(contadorempezado == false) {
                                               contadorempezado = true;
                                               new BukkitRunnable(){
                                                  public void run(){
                                                      if(contador > 1) {
                                                           contador = contador-1;
                                                           DecimalFormat df = new DecimalFormat("#.#");
                                                           p.sendMessage(Bukkit.getPluginManager().getPlugin("PotPvP").getConfig()
                                                                   .getString("messages.spawn-cooldown").replace('&', '§')
                                                                   .replace("{time}", df.format(contador)));
                                                       } else {
                                                           this.cancel();
                                                           Main.instance.getConfig().getString("messages.spawn").replace("&", "§");
                                                           contador = Main.instance.getConfig().getInt("spawn-cooldown");
                                                           World w = Bukkit.getWorld(Main.instance.getConfig().getString("Spawn.world"));
                                                           double x = Main.instance.getConfig().getDouble("Spawn.x");
                                                           double y = Main.instance.getConfig().getDouble("Spawn.y");
                                                           double z = Main.instance.getConfig().getDouble("Spawn.z");
                                                           p.teleport(new Location(w,x,y,z));
                                                           Bukkit.getScheduler().runTaskLater(Main.instance, new Runnable(){
                                                                @Override
                                                                public void run() {
                                                                   contadorempezado = false;
                                                                }
                                                           }, Main.instance.getConfig().getInt("spawn-cooldown")*20L);
                                                       }
                                                  }
                                                }.runTaskTimer(Main.instance, 20L, 20L);
                                             
                                             
                                           }else if(contadorempezado == true){
                                               Main.instance.getConfig().getString("messages.spawn-start-cooldown").replace("&", "§");
                                           }
    and
    Code (Text):
    @EventHandler
        public void onMove(PlayerMoveEvent e){
            if(CommandClass.contadorempezado=true){
                Main.instance.getConfig().getString("messages.spawn-cancel").replace("&", "§");
                CommandClass.contadorempezado=false;
            }
        }
    This don't go and the console send me this error:
    HTML:
    [19:48:02 WARN]: [PotPvP] Task #7 for PotPvP v1.9 generated an exception
    java.lang.IllegalArgumentException: Name cannot be null
            at org.apache.commons.lang.Validate.notNull(Validate.java:192) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.getWorld(CraftServer.java:1014) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at org.bukkit.Bukkit.getWorld(Bukkit.java:496) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at com.zjar84.potpvp.cmds.PvP$1.run(PvP.java:99) ~[?:?]
            at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftTask.run(CraftTask.java:71) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:723) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at java.lang.Thread.run(Thread.java:745) [?:1.8.0_112]
    Extra: [​IMG]
    Just up to here go the plugin. (And the cooldown have 5 seconds, no only 4).
     
  2. There is a null variable at line 99 that couses the error.
     
  3. Thanks for the help! :D But when a player move, the countdown isn't cancelled and the console don't send errors. Help?
     
    #3 KCVault, Feb 14, 2018
    Last edited: Feb 14, 2018
  4. You need to check for contadorempezado in the bukkit runnable.
     
  5. how can I do it?
    This don't go:
    Code (Java):
    if(contadorempezado == false) {
    contadorempezado = true;
    }
     
  6. My "Player movement class" isn't = to the onCommand class for more balance. How can I do it? I have it but don't go:
    Code (Java):
    @EventHandler
        public void onMove(PlayerMoveEvent e){
            if(CommandClass.contadorempezado=false){
                Main.instance.getConfig().getString("messages.spawn-cancel").replace("&", "§");
                CommandClass.this.onCommand();
            }
        }
     
  7. The onMove event is suposed cancel the delay right?
     
  8. upload_2018-2-14_20-7-10.png Nope, this don't work.
     
  9. But what is the onMove event suposed to do? Does it need to cancel the tp?
     
  10. You need to create a onMove event in the bukkit runnable and cancel the task when a player moves thats the easyest way to do it.
     
  11. Ah ok. Thanks! :D
     
  12. This don't cancel the task:
    Code (Java):
    if(sub.equalsIgnoreCase("spawn")){
                                if(p.hasPermission("potpvp.spawn")){
                                    if (Main.instance.getConfig().getConfigurationSection("spawn") == null) {
                                        p.getPlayer().sendMessage("§cThe spawn has not yet been set!");
                                        return true;
                                    }else if(Main.instance.getConfig().getConfigurationSection("spawn") != null){
                                        if(contadorempezado == false) {
                                               contadorempezado = true;
                                               Main.instance.getConfig().getString("messages.spawn-start-cooldown").replace('&', '§');
                                               new BukkitRunnable(){
                                                   @EventHandler
                                                   public void onMove(PlayerMoveEvent e){
                                                       if(contadorempezado==true){
                                                           e.getPlayer().sendMessage(Main.instance.getConfig().getString("messages.spawn-cancel")
                                                                   .replace('&', '§'));
                                                           this.cancel();
                                                       }
                                                   }
                                                  public void run(){
                                                      if(contador > 1) {
                                                           contador = contador-1;
                                                           DecimalFormat df = new DecimalFormat("#.#");
                                                           p.sendMessage(Bukkit.getPluginManager().getPlugin("PotPvP").getConfig()
                                                                   .getString("messages.spawn-cooldown").replace('&', '§')
                                                                   .replace("{time}", df.format(contador)));
                                                       } else {
                                                           this.cancel();
                                                           Main.instance.getConfig().getString("messages.spawn").replace("&", "§");
                                                           contador = Main.instance.getConfig().getInt("spawn-cooldown");
                                                           World w = Bukkit.getWorld(Main.instance.getConfig().getString("spawn.world"));
                                                           double x = Main.instance.getConfig().getDouble("spawn.x");
                                                           double y = Main.instance.getConfig().getDouble("spawn.y");
                                                           double z = Main.instance.getConfig().getDouble("spawn.z");
                                                           p.teleport(new Location(w,x,y,z));
                                                           Bukkit.getScheduler().runTaskLater(Main.instance, new Runnable(){
                                                                @Override
                                                                public void run() {
                                                                   contadorempezado = false;
                                                                }
                                                           }, Main.instance.getConfig().getInt("spawn-cooldown")*20L);
                                                       }
                                                  }
                                                }.runTaskTimer(Main.instance, 20L, 20L);
                                             
                                             
                                           }else if(contadorempezado == true){
                                               Main.instance.getConfig().getString("messages.spawn-start-cooldown").replace("&", "§");
                                           }
                                    }
     
  13. You need to place the onMove in the run{}
     
  14. upload_2018-2-14_20-53-47.png The eclipse don't give me the capacity to do this :/
     
  15. Code (Text):
    int i = 3; // Timer couldown time
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String [] args){
           
            if(sender instanceof Player){
                Player p = (Player)sender;
               
                new BukkitRunnable(){
                    public void run(){
                        i -= 1;
                        p.sendMessage(plugin.getConfig().getString("Messages.Teleported").replace("<seconds>", ""+i).replace("&", "§"));
                       
                        if(i == 0){
                            cancel();
                            i = 3;
                            NoneClassEvent.getSpawn(p, "Normal-Spawn"); // Replace with the teleport code
                        }
                       
                    }
                }.runTaskTimer(plugin, 20, 20);
               
               
            }
           
            return false;
        }
     
  16. And how can I cancel the task on movement?
     
    #18 KCVault, Feb 14, 2018
    Last edited: Feb 14, 2018
  17. Use task RunTaskLater
     
  18. ... What is this thread?

    Start a repeating runnable, having stored the player's location (cloned). Check the player's location each interval, if it has changed from the previously saved location, cancel the task.

    Also, your code was cancer.

    Here's how I'd do it with what I just suggested. This way is friendly in that it will not care if the player jumps on accident, it only checks the X/Z coordinates.

    Here's how I'd do it with listening to the move event. (Refer to my spanish comment)

    Lo siento para mi espanol poco malo XD
    what
     
    • Agree Agree x 1
Thread Status:
Not open for further replies.

Share This Page