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

76 lines
2.4 KiB
Java
Raw Normal View History

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 {
2022-05-20 02:35:48 +00:00
private static HashMap<UUID, String> loginNameList = new HashMap<UUID, String>();
2022-05-20 02:35:48 +00:00
@EventHandler
void onAsyncTabComplete(final AsyncTabCompleteEvent event) {
final String[] arr = event.getBuffer().split(" ", 2);
2022-05-20 02:35:48 +00:00
// Vanilla clients will not send tab complete requests on the first word, but modified or bot clients may
if (arr.length < 2) {
return;
}
2022-05-20 02:35:48 +00:00
String command = arr[0];
String argsFragment = arr[1];
if (command.startsWith("/")) {
command = command.substring(1);
}
2022-05-20 02:35:48 +00:00
if (command.equalsIgnoreCase("op")) {
event.setCompletions(getOpCompletions(argsFragment));
} else if (command.equalsIgnoreCase("deop")) {
event.setCompletions(getDeopCompletions(argsFragment));
} else {
return;
}
2022-05-20 02:35:48 +00:00
if (event.getCompletions().size() == 0) {
event.setCancelled(true);
}
}
2022-05-20 02:35:48 +00:00
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;
}
2022-05-20 02:35:48 +00:00
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;
}
2022-05-20 02:35:48 +00:00
public static HashMap<UUID, String> getLoginNameList() {
return loginNameList;
}
}