extras/src/main/java/pw/kaboom/extras/modules/server/ServerTabComplete.java

77 lines
2.4 KiB
Java

package pw.kaboom.extras.modules.server;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import com.destroystokyo.paper.event.server.AsyncTabCompleteEvent;
public final class ServerTabComplete implements Listener {
private static HashMap<UUID, String> loginNameList = new HashMap<UUID, String>();
@EventHandler
void onAsyncTabComplete(final AsyncTabCompleteEvent event) {
final String[] arr = event.getBuffer().split(" ", 2);
// Vanilla clients will not send tab complete requests on the first word,
// but modified or bot clients may
if (arr.length < 2) {
return;
}
String command = arr[0];
String argsFragment = arr[1];
if (command.startsWith("/")) {
command = command.substring(1);
}
if (command.equalsIgnoreCase("op")) {
event.setCompletions(getOpCompletions(argsFragment));
} else if (command.equalsIgnoreCase("deop")) {
event.setCompletions(getDeopCompletions(argsFragment));
} else {
return;
}
if (event.getCompletions().size() == 0) {
event.setCancelled(true);
}
}
static List<String> getOpCompletions(final String argsFragment) {
ArrayList<String> deops = new ArrayList<String>();
for (Player player : Bukkit.getOnlinePlayers()) {
if (!player.isOp()) {
String loginName = loginNameList.get(player.getUniqueId());
if (loginName != null && loginName.startsWith(argsFragment)) {
deops.add(loginName);
}
}
}
return deops;
}
static List<String> getDeopCompletions(final String argsFragment) {
ArrayList<String> ops = new ArrayList<String>();
for (Player player : Bukkit.getOnlinePlayers()) {
if (player.isOp()) {
String loginName = loginNameList.get(player.getUniqueId());
if (loginName != null && loginName.startsWith(argsFragment)) {
ops.add(loginName);
}
}
}
return ops;
}
public static HashMap<UUID, String> getLoginNameList() {
return loginNameList;
}
}