Solved Need help on invite command

Discussion in 'Spigot Plugin Development' started by TheGameKing77, Jul 24, 2018.

  1. So, i started my invite command for my kingdoms plugin. What it should do is check if a player has ever played before, then check if it is registered in the userData.yml file, check if he has joined a kingdom yet or is invited by a kingdom, and then set a string "invitedBy" in userData.yml to the kingdomname and start a timer of 10 minutes that after those 10 minutes would set the "invitedBy" back to "none". Basicly it doesn't do what i want ;)

    I am a relatively new coder, so my code might be way to coplicated or messy. Also the comments are sometimes in dutch, cause that works better for me. This is the code for the invite command:


    Code (Java):
                                else if(args[0].equalsIgnoreCase("invite")) {
                                   
                                    if(args.length == 2) {
                                        if(p.hasPermission("ultimatekingdom.player")) {
                                           
                                            try {
                                               
                                                Player target = Bukkit.getServer().getPlayerExact(args[1]);
                                               
                                                userData.load(userDataFile);
                                                kingdomData.load(kingdomDataFile);
                                               
                                                if(!(userData.getString("user." + p.getUniqueId().toString() + ".joinedKingdom").equals("none"))) {
                                                   
                                                    if(userData.get("user." + p.getUniqueId().toString() + ".rank").equals("leader")) {
                                                       
                                                        //check if args[1] is a player and is registererd in the userrec
                                                        SaveUsers.saveUsers();
                                                       
                                                        if(target.hasPlayedBefore()) {
                                                       
                                                        if(userData.contains("user." + target.getUniqueId().toString())) {
                                                           
                                                            //speler is een speler, is de speler kingdomloos?
                                                            if(userData.get("user." + target.getUniqueId().toString() + ".joinedKingdom").equals("none")) {
                                                               
                                                                //speler is kingdomloos, is ie al uitgenodigd?
                                                                if(!(userData.getString("user." + target.getUniqueId().toString() + "invitedBy").equals("none"))) {
                                                                   
                                                                    //speler is al geinvite, door jezelf?
                                                                    if(userData.getString("user." + target.getUniqueId().toString() + ".invitedBy").equals("user." + p.getUniqueId().toString() + ".joinedKingdom")) {
                                                                        //is door eigen kingdom geinvite!
                                                                        p.sendMessage(prefix + ChatColor.RED + "You've already invited this player!");
                                                                    } else {
                                                                        p.sendMessage(prefix + ChatColor.RED + "Player is already invited by another estate!");
                                                                    }
                                                                   
                                                                   
                                                                } else {
                                                                   
                                                                    //speler invite sturen
                                                                   
                                                                    target.sendMessage(prefix + ChatColor.DARK_AQUA + "You've been invited by" + ChatColor.GREEN + userData.getString("user." + p.getUniqueId().toString() + ".joinedKingdom") + ChatColor.DARK_AQUA + "! Use /town join to join!");
                                                                    userData.set("user." + target.getUniqueId().toString() + ".invitedBy", userData.getString("user." + p.getUniqueId().toString() + ".joinedKingdom"));
                                                                   
                                                                    new BukkitRunnable() {
                                                                       
                                                                        //Timer maken, na 10 min(12000 ticks) stopt de timer en zet hij alles terug op none
                                                                       
                                                                        public void run() {
                                                                            // What you want to schedule goes here
                                                                           
                                                                            target.sendMessage(prefix + ChatColor.DARK_AQUA + "Your invite by" + ChatColor.GREEN + userData.getString("user." + p.getUniqueId().toString() + ".joinedKingdom") + ChatColor.DARK_AQUA + "has expired!");
                                                                            userData.set("user." + target.getUniqueId().toString() + ".invitedBy", "none");
                                                                           
                                                                        }
                                                                       
                                                                    }.runTaskLater((Plugin) this, 12000);
                                                                   
                                                                }
                                                               
                                                            } else {
                                                                p.sendMessage(prefix + ChatColor.RED + "Player is already member of " + ChatColor.GREEN + userData.getString("user." + target.getUniqueId().toString() + ".joinedKingdom") + ChatColor.DARK_AQUA + "!");
                                                            }
                                                        } else {
                                                            p.sendMessage(prefix + ChatColor.RED + "Player not found! Has he ever joined?");
                                                        }
                                                       
                                                       
                                                    } else {
                                                        p.sendMessage(prefix + ChatColor.RED + "Player not found! Has he ever joined?");
                                                    }
                                                       
                                                    }
                                                   
                                                } else {
                                                    p.sendMessage(prefix + ChatColor.RED + "You are not in a town!");
                                                }
                                               
                                            } catch(Exception ex) {
                                                ex.printStackTrace();
                                            }
                                           
                                        }
                                    } else {
                                        p.sendMessage(prefix + ChatColor.RED + "Wrong command usage! Use /town invite <player>");
                                    }
                                   
                                }
    Can anyone help me? What am I doing wrong?
     
  2. If a player has ever played before
    Code (Text):
    //Name is deprecated
    Bukkit.getOfflinePlayer("UUID or Name").hasPlayedBefore();
    If it is registered
    Code (Text):
    FileConfiguration#isSet("path");
    If he has joined a kingdom yet or is invited by a kingdom
    You could create an invite and check if the kingdom contains the player's UUID.

    Set a string "invitedBy" in userData.yml to the kingdomname and start a timer of 10 minutes that after those 10 minutes would set the "invitedBy" back to "none".
    How about you create an Invite object (like I said in the previous section), put a Player object (inviter), another Player object (invited), and the time that player was invited (System#currentTimeMillis, so you can compare the next time searching through the Invite object), and a static list of Invites.

    Looking for an invite could be something like this:
    Code (Text):
    public static Invite getInviteByInviter(Player inviter) {
    //Invites is our list of invites.
    for(Invite invite : invites) {
    if(invite.getInvider().equals(inviter)) return invite;
    }
    }
    Simple as that!

    You could make this all reboot friendly by saving it in a config onDisable() and retrieving it onEnable().
     
    • Like Like x 1