At a loss here. Doublejump plugin not working.

Discussion in 'Plugin Development' started by ravingraybits34, May 29, 2016.

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

    ravingraybits34

    Title,


    I have no idea what the hell is wrong. All my code seems to be right, I seem to have followed what I was told, and when I input my command ingame, it just prints a white example of how to execute it, no matter what arguments I add into it. Plz help :(

    Here's my code, I know it's messy, but it SHOULD work.
    Code:
    package me.raymoonewdoublejump;
    
    import java.util.ArrayList;
    
    import org.bukkit.ChatColor;
    import org.bukkit.GameMode;
    import org.bukkit.Material;
    import org.bukkit.Sound;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.event.player.PlayerToggleFlightEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class RaymooNewDoubleJump extends JavaPlugin implements Listener{
      
        ArrayList<String> djump = new ArrayList<String>();
      
        public void onEnable(){
            getServer().getPluginManager().registerEvents(this, this);
        }
      
        public void onDisable(){
          
        }
      
        public boolean onInvalArgs(CommandSender sender, Command cmd, String label, String[] args){
            Player player = (Player) sender;
            if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                if(args.length == 0){
                    if(player.hasPermission("raymoodoublejump.jump")){
                        player.sendMessage(ChatColor.RED + "Invalid arguments! Proper usage: /djump <on/off>");
                        return true;
                    }
                }
            }
            return false;
        }
      
        public boolean onNoPerms(CommandSender sender, Command cmd, String label, String[] args){
            Player player = (Player) sender;
            if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                if(args.length == 0){
                    if(!player.hasPermission("raymoodoublejump.jump")){
                        player.sendMessage(ChatColor.RED + "No permission!");
                        return true;
                    }
                }
            }
            return false;
        }
      
        public boolean onJoin(CommandSender sender, Command cmd, String label, String[] args){
            Player player = (Player) sender;
            if(player.hasPermission("raymoodoublejump.jump"));
            if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                if(args[0] == "on"){
                    if(!djump.contains(player.getName())){
                        djump.add(player.getName());
                        player.sendMessage(ChatColor.GREEN + "Double jump enabled!");
                        return true;
                    }
                }
            }
            return false;
        }
      
        public boolean onJoinWhenJoin(CommandSender sender, Command cmd, String label, String[] args){
            Player player = (Player) sender;
            if(player.hasPermission("raymoodoublejump.jump"));
            if(label.equalsIgnoreCase("djump") && sender instanceof Player) {
                if(args[0] == "on"){
                    if(djump.contains(player.getName())){
                        player.sendMessage(ChatColor.RED + "Double jump is already enabled!");
                        return true;
                    }
                }
            }
            return false;
        }
      
        public boolean onLeave(CommandSender sender, Command cmd, String label, String[] args){
            Player player = (Player) sender;
            if(player.hasPermission("raymoodoublejump.jump"));
            if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                if(args[0] == "off"){
                    if(djump.contains(player.getName())){
                        djump.remove(player.getName());
                        player.sendMessage(ChatColor.GREEN + "Double jump disabled!");
                        return true;
                    }
                }
            }
            return false;
        }
      
        public boolean onLeaveWhenLeave(CommandSender sender, Command cmd, String label, String[] args){
            Player player = (Player) sender;
            if(player.hasPermission("raymoodoublejump.jump"));
            if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                if(args[0] == "off"){
                    if(!djump.contains(player.getName())){
                        player.sendMessage(ChatColor.RED + "Double jump is already disabled!");
                        return true;
                    }
                }
            }
            return false;
        }
      
        public boolean onJoinWhenNoPerms(CommandSender sender, Command cmd, String label, String[] args){
            Player player = (Player) sender;
            if(!player.hasPermission("raymoodoublejump.jump"));
            if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                if(args[0] == "on"){
                    player.sendMessage(ChatColor.RED + "No permissions!");
                    return true;
                }
            }
            return false;
        }
      
        public boolean onLeaveWhenNoPerms(CommandSender sender, Command cmd, String label, String[] args){
            Player player = (Player) sender;
            if(!player.hasPermission("raymoodoublejump.jump"));
            if(label.equalsIgnoreCase("djump") && sender instanceof Player) {
                if(args[0] == "off"){
                    player.sendMessage(ChatColor.RED + "No permissions!");
                    return true;
                }
            }
            return false;
        }
      
        @EventHandler
        public void onPlayerToggleFlight(PlayerToggleFlightEvent event){
            Player player = event.getPlayer();
            if(player.hasPermission("raymoodoublejump.jump")){
                if(djump.contains(player.getName())){
                    if(player.getGameMode() == GameMode.CREATIVE)
                        return;
                    event.setCancelled(true);
                    player.setAllowFlight(false);
                    player.setFlying(false);
                    player.setVelocity(player.getLocation().getDirection().multiply(1.5).setY(1));
                    player.playSound(player.getLocation(), Sound.BAT_TAKEOFF, 1, 1);
                }
            }
        }
      
        @EventHandler
        public void onMove(PlayerMoveEvent event){
            Player player = event.getPlayer();
            if(player.hasPermission("raymoodoublejump.jump")){
                if(djump.contains(player.getName())){
                    if((player.getGameMode()!=GameMode.CREATIVE) &&(player.getLocation().subtract(0, 1, 0).getBlock().getType()!=Material.AIR) &&(!player.isFlying())){
                        player.setAllowFlight(true);
                    }
                }
            }
        }
      
    
    }
    

    Here's my plugin.yml (which I think is the problem, idk)

    Code:
    name: RaymooNewDoubleJump
    main: me.raymoonewdoublejump.RaymooNewDoubleJump
    version: 1.0
    commands:
       djump:
          description: Toggle double jump.
          usage: /djump <on/off>
          permission: RaymooNewDoubleJump.raymoodoublejump.jump
          permission-message: No permissions.
    permissions:
        RaymooNewDoubleJump.raymoodoublejump.jump:
            description: You can use /djump

    I spent quite a while writing all this in...
    Please don't give me tips for how to clean up my code, I don't need that. I know it should WORK. I just need it to work.
    If there's something I miss, something I did wrong, please feel free to tell me. I'm at a loss as to what's causing this problem.

    EDIT: I'm an idiot. Commands can only use onCommand methods. Fuck me.
     
    Last edited: May 29, 2016
  2. Offline

    Zombie_Striker

    If this method does nothing, you can remove it.

    Main problem: You do not have an onCommand Method. If the name of the method is not onCommand, then it will not be read. If you want to separate each method, you need to create different classes and store each command in their own onCommand methods.
     
  3. Offline

    ravingraybits34

    Thanks, but now that I've fixed the problem, new problems have arose.

    Here's my new code:
    Code:
    package me.raymoonewdoublejump;
    
    import java.util.ArrayList;
    
    import org.bukkit.ChatColor;
    import org.bukkit.GameMode;
    import org.bukkit.Material;
    import org.bukkit.Sound;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.event.player.PlayerToggleFlightEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class RaymooNewDoubleJump extends JavaPlugin implements Listener{
       
        ArrayList<String> djump = new ArrayList<String>();
       
        public void onEnable(){
            getServer().getPluginManager().registerEvents(this, this);
            this.getCommand("djump").setExecutor(this);
        }
       
        public void onDisable(){
           
        }
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
            Player player = (Player) sender;
            if(player.hasPermission("raymoonewdoublejump.jump")){
                if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                    if(args[0].equalsIgnoreCase("on")){
                        if(djump.contains(player.getName())){
                            player.sendMessage(ChatColor.RED + "Double jump is already enabled!");
                            return true;
                        }
                    }
                }
            }
            if(player.hasPermission("raymoonewdoublejump.jump")){
                if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                    if(args.length == 0){
                        if(!player.hasPermission("raymoonewdoublejump.jump")){
                            player.sendMessage(ChatColor.RED + "No permissions!");
                            return true;
                        }
                    }
                }
            }
            if(player.hasPermission("raymoonewdoublejump.jump")){
                if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                    if(args[0].equalsIgnoreCase("on")){
                        if(!djump.contains(player.getName())){
                            djump.add(player.getName());
                            player.sendMessage(ChatColor.GREEN + "Double jump enabled!");
                            return true;
                        }
                    }
                }
            }
            if(player.hasPermission("raymoonewdoublejump.jump")){
                if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                    if(args[0].equalsIgnoreCase("off")){
                        if(djump.contains(player.getName())){
                            djump.remove(player.getName());
                            player.sendMessage(ChatColor.GREEN + "Double jump disabled!");
                            player.performCommand("fly");
                            return true;
                        }
                    }
                }
            }
            if(player.hasPermission("raymoonewdoublejump.jump")){
                if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                    if(args[0].equalsIgnoreCase("off")){
                        if(!djump.contains(player.getName())){
                            player.sendMessage(ChatColor.RED + "Double jump is already disabled!");
                            return true;
                        }
                    }
                }
            }
            if(!player.hasPermission("raymoonewdoublejump.jump")){
                if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                    if(args[0].equalsIgnoreCase("on")){
                        player.sendMessage(ChatColor.RED + "No permissions!");
                        return true;
                    }
                }
            }
            if(!player.hasPermission("raymoonewdoublejump.jump")){
                if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                    if(args[0].equalsIgnoreCase("off")){
                        player.sendMessage(ChatColor.RED + "No permissions!");
                        return true;
                    }
                }
            }
            if(label.equalsIgnoreCase("djump") && sender instanceof Player){
                if(args.length == 0){
                    if(player.hasPermission("raymoonewdoublejump.jump")){
                        player.sendMessage(ChatColor.RED + "Invalid arguments! Proper usage: /djump <on/off>");
                        return true;
                    }
                }
            }
            return true;
        }
        @EventHandler
        public void onPlayerToggleFlight(PlayerToggleFlightEvent event){
            Player player = event.getPlayer();
            if(player.hasPermission("raymoodoublejump.jump")){
                if(djump.contains(player.getName())){
                    if(player.getGameMode() == GameMode.CREATIVE)
                        return;
                    event.setCancelled(true);
                    player.setAllowFlight(false);
                    player.setFlying(false);
                    player.setVelocity(player.getLocation().getDirection().multiply(1.5).setY(1));
                    player.playSound(player.getLocation(), Sound.BAT_TAKEOFF, 1, 1);
                }
            }
        }
       
        @EventHandler
        public void onMove(PlayerMoveEvent event){
            Player player = event.getPlayer();
            if(player.hasPermission("raymoodoublejump.jump")){
                if(djump.contains(player.getName())){
                    if((player.getGameMode()!=GameMode.CREATIVE) &&(player.getLocation().subtract(0, 1, 0).getBlock().getType()!=Material.AIR) &&(!player.isFlying())){
                        player.setAllowFlight(true);
                    }
                }
            }
        }
       
    
    }
    

    Now, if I try doing JUST /djump, whether or not I have the permission, the console throws an error and I don't see what the problem is.

    Error:

    Code:
    [18:46:41 INFO]: Raymoo issued server command: /djump
    [18:46:41 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'djump' in plugin RaymooNewDoubleJump v1.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [spigot.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [spigot.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-db6de12-18fbb24]
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_91]
            at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_91]
            at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot.jar:git-Spigot-db6de12-18fbb24]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_91]
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
            at me.raymoonewdoublejump.RaymooNewDoubleJump.onCommand(RaymooNewDoubleJump.java:35) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
            ... 15 more

    Also, my permissions are not working. I don't entirely get how permissions work... But here's my plugin.yml.

    Code:
    name: RaymooNewDoubleJump
    main: me.raymoonewdoublejump.RaymooNewDoubleJump
    version: 1.0
    commands:
       djump:
          description: Toggle double jump.
          usage: /djump <on/off>
          permission: RaymooNewDoubleJump.raymoonewdoublejump.jump
          permission-message: No permissions.
    permissions:
        RaymooNewDoubleJump.raymoonewdoublejump.jump:
            description: You can use /djump

    What's the problem now? D:
     
  4. Offline

    Zombie_Striker

    @ravingraybits34
    You code can be reduced by a lot. Please remove every line that is the same as one of the other lines (I.e these lines:
    . They are exactly the same, and the plugin reads each one over and over again.
    ).
    Don't Blindly cast objects. There is a reason sender is not automatically a player. Make sure you check if the sender is a aplayer first Before you create the plaeyr object.

    There is no need to check if the player has the permission when you don't even know what the command is that was sent. Check the command first before you check the permission.

    Use cmd.getName() instead of label.

    Main problem: You are getting the first argument before you even know if there are any arguments. You need to check if there even is a first arg before you try to get it.
     
  5. Offline

    J3Kennard

    I struggled for a while to make a very efficient double jump plugin as well, and then realized how easy it was when I found this video:

    I would recommend using that as a sample then building off it/changing it to your liking.

    Hopefully that counts as an answer :p
     
  6. Offline

    Maxxxy

    Not sure if this is the problem, but change
    usage: /djump <on/off> to usage: /<command> cant guarantee it will fix it. Try it.
     
Thread Status:
Not open for further replies.

Share This Page