Tabcomplete Completions

Discussion in 'Spigot Plugin Development' started by Bluecrafter35, Jun 2, 2018.

  1. So since i got no real answer to my already existence Thread, i am going to try again. (Also pls tell me if i can delete my old Thread).

    So i am doing a Tabcomplete Deny Event. So it does that but when someone has the Permission or isn't tabcompleting an Command then it should allow it, well that is working but it also should add a List of the Last ten online Players too. That would work, but the Problem is that when the List is added, you always get the same Order of Completions. For Example you want to Tabcomplete something what starts with an o and you get as first something with an a. Here is my Code.

    Code (Java):
    public class TabCompleteDeny implements Listener
    {
        private static List<String> whitelist = new ArrayList<String>();
         
          static {
            whitelist.add("tpa");
            whitelist.add("money");
            whitelist.add("trade");
            whitelist.add("trust");
            whitelist.add("untrust");
            whitelist.add("containertrust");
            whitelist.add("warp");
            whitelist.add("tpm");
            whitelist.add("tp");
            whitelist.add("ngb");
           
          }
         

          @EventHandler(priority= EventPriority.HIGHEST)
          public void onTabComplete(TabCompleteEvent event)
          {
              if(event.getBuffer().length()>0)
              {
                  String cmdArgument = event.getBuffer().split(" ")[0];
                  if(cmdArgument.startsWith("/"))
                  {
                          cmdArgument = cmdArgument.substring(1, cmdArgument.length());
                          if(event.getSender().hasPermission("addon.autocomplete"))
                          {
                              //List<String> old = event.getCompletions();
                              //List<String> now = new ArrayList<>();
                              //now.addAll(old);
                              //now.addAll(PlayerLeftEvent.getPlayernames());
                              //now.add("DerSchotti");
                            //now.add("Kassaa");
                            //List<String> temp = now;
                            //now.clear();
                            //for(String part:temp)
                            //{
                                //if(part.startsWith(event.getBuffer().split(" ")[args.length-1]))
                                //{
                                    //now.add(part);
                                //}
                            //}
                            //if(now.size()==0)
                            //{
                                //now.addAll(temp);
                            //}
                              //event.setCompletions(now);
                              return;
                          }
                          if(!whitelist.contains(cmdArgument))
                          {
                            event.getSender().sendMessage(Main.prefix+"§7Tabcomplete ist für Befehle deaktiviert!");
                            event.setCancelled(true);
                          }
                          else
                          {
                              //List<String> old = event.getCompletions();
                              //List<String> now = new ArrayList<>();
                              //now.addAll(old);
                              //now.addAll(PlayerLeftEvent.getPlayernames());
                              //now.add("DerSchotti");
                            //now.add("Kassaa");
                              //event.setCompletions(now);
                          }
                    }
                    else
                    {
                          //List<String> old = event.getCompletions();
                          //List<String> now = new ArrayList<>();
                          //now.addAll(old);
                          //now.addAll(PlayerLeftEvent.getPlayernames());
                          //now.add("DerSchotti");
                        //now.add("Kassaa");
                        //List<String> temp = now;
                        //now.clear();
                        //for(String part:temp)
                        //{
                            //if(part.startsWith(event.getBuffer().split(" ")[1]))
                            //{
                                //now.add(part);
                            //}
                        //}
                        //if(now.size()==0)
                        //{
                            //now.addAll(temp);
                        //}
                          //event.setCompletions(now);
                          return;  
                    }
                }
              else
              {
                    //List<String> old = event.getCompletions();
                    //List<String> now = new ArrayList<>();
                    //now.addAll(old);
                    //now.addAll(PlayerLeftEvent.getPlayernames());
                    //now.add("DerSchotti");
                    //now.add("Kassaa");
                    //event.setCompletions(now);
              }
          }
     
  2. Well the Parts are under // because it's not really working but we need the other parts don't worry about that
     
  3. You must use Packets to block the CommandTabComplete. For Chat there is a PlayerChatTabCompleteEvent

    Packet: PacketPlayOutTabComplete