From 39947d460f9ca3c164892f6b1a11b5aa9ed810ae Mon Sep 17 00:00:00 2001 From: Gabriel Tofvesson Date: Tue, 4 May 2021 06:24:12 +0200 Subject: [PATCH] Implement tab completion for commands --- .../listener/TabCompletionListener.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/dev/w1zzrd/invtweaks/listener/TabCompletionListener.java diff --git a/src/dev/w1zzrd/invtweaks/listener/TabCompletionListener.java b/src/dev/w1zzrd/invtweaks/listener/TabCompletionListener.java new file mode 100644 index 0000000..cf1cb62 --- /dev/null +++ b/src/dev/w1zzrd/invtweaks/listener/TabCompletionListener.java @@ -0,0 +1,50 @@ +package dev.w1zzrd.invtweaks.listener; + +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.server.TabCompleteEvent; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Listener for providing tab completions for all commands in this plugin + */ +public class TabCompletionListener implements Listener { + + private static final List materialTypes = Arrays.stream(Material.values()) + .map(Material::getKey) + .sorted(Comparator.comparing(NamespacedKey::toString)) + .collect(Collectors.toUnmodifiableList()); + + @EventHandler + public void onTabCompleteEvent(final TabCompleteEvent event) { + if (event.getSender() instanceof Player) { + final String buffer = event.getBuffer(); + final List completions = event.getCompletions(); + + if (buffer.startsWith("/search ")) { + final String[] split = buffer.split(" "); + + if (split.length > 2) { + completions.clear(); + event.setCancelled(true); + } else if (split.length == 2) { + completions.addAll(materialTypes.stream().map(NamespacedKey::toString).filter(it -> it.contains(split[1])).collect(Collectors.toList())); + } else { + completions.clear(); + completions.addAll(materialTypes.stream().map(NamespacedKey::toString).collect(Collectors.toList())); + } + } else if (buffer.startsWith("/magnet ")) { + completions.clear(); + } else if (buffer.startsWith("/sort ")) { + completions.clear(); + } + } + } +}