Moved Tab Completion to modular system (And optimised imports)
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package com.willfp.ecoenchants.v1_16_R1;
|
||||
|
||||
import com.willfp.ecoenchants.API.CooldownWrapper;
|
||||
import org.bukkit.craftbukkit.libs.org.apache.commons.io.FileUtils;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class Cooldown implements CooldownWrapper {
|
||||
|
||||
@@ -6,7 +6,6 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -16,6 +15,7 @@ public abstract class AbstractCommand implements CommandExecutor, Registerable {
|
||||
private final String name;
|
||||
private final String permission;
|
||||
private final boolean playersOnly;
|
||||
private AbstractTabCompleter tabCompleter = null;
|
||||
|
||||
protected AbstractCommand(String name, String permission, boolean playersOnly) {
|
||||
this.name = name;
|
||||
@@ -23,6 +23,19 @@ public abstract class AbstractCommand implements CommandExecutor, Registerable {
|
||||
this.playersOnly = playersOnly;
|
||||
}
|
||||
|
||||
public AbstractCommand setTab(AbstractTabCompleter tabCompleter) {
|
||||
this.tabCompleter = tabCompleter;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getPermission() {
|
||||
return this.permission;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if(!command.getName().equalsIgnoreCase(name)) return false;
|
||||
@@ -44,9 +57,10 @@ public abstract class AbstractCommand implements CommandExecutor, Registerable {
|
||||
|
||||
@Override
|
||||
public final void register() {
|
||||
PluginCommand pluginCommand = Bukkit.getPluginCommand(name);
|
||||
pluginCommand.setExecutor(this);
|
||||
pluginCommand.setTabCompleter(new EcoEnchantsTabCompleter());
|
||||
Bukkit.getPluginCommand(name).setExecutor(this);
|
||||
if(tabCompleter != null) {
|
||||
Bukkit.getPluginCommand(name).setTabCompleter(tabCompleter);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract void onExecute(CommandSender sender, List<String> args);
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.willfp.ecoenchants.command;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class AbstractTabCompleter implements TabCompleter {
|
||||
private final AbstractCommand command;
|
||||
|
||||
public AbstractTabCompleter(AbstractCommand command) {
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if(!command.getName().equalsIgnoreCase(this.command.getName()))
|
||||
return null;
|
||||
|
||||
if(!sender.hasPermission(this.command.getPermission()))
|
||||
return null;
|
||||
|
||||
return onTab(sender, Arrays.asList(args));
|
||||
}
|
||||
|
||||
public abstract List<String> onTab(CommandSender sender, List<String> args);
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
package com.willfp.ecoenchants.command;
|
||||
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchant;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.util.StringUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
public class EcoEnchantsTabCompleter implements TabCompleter {
|
||||
private final List<String> enchantsNames;
|
||||
|
||||
public EcoEnchantsTabCompleter() {
|
||||
// Fetching the list of all enchants takes longer than anything inside onTabComplete, so caching is effective
|
||||
enchantsNames = EcoEnchants.getAll().stream().map(EcoEnchant::getName).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private static String removePrefix(String s, String prefix) {
|
||||
if (s != null && prefix != null && s.startsWith(prefix)) {
|
||||
return s.substring(prefix.length());
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
try {
|
||||
if (command.getLabel().equalsIgnoreCase("enchantinfo") && (sender.isOp() || sender.hasPermission("ecoenchants.enchantinfo"))) {
|
||||
List<String> completions = new ArrayList<>();
|
||||
|
||||
if (args.length == 0) {
|
||||
// Currently, this case is not ever reached
|
||||
return enchantsNames;
|
||||
}
|
||||
|
||||
StringUtil.copyPartialMatches(String.join(" ", args), enchantsNames, completions);
|
||||
|
||||
if (args.length > 1) { // Remove all previous words from the candidate of completions
|
||||
ArrayList<String> finishedArgs = new ArrayList<>(Arrays.asList(args));
|
||||
finishedArgs.remove(args.length - 1);
|
||||
|
||||
String prefix = String.join(" ", finishedArgs);
|
||||
completions = completions.stream().map(enchantName -> removePrefix(enchantName, prefix).trim()).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
Collections.sort(completions);
|
||||
return completions;
|
||||
}
|
||||
} catch (Exception ignored) {}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -36,9 +36,7 @@ public final class CommandEnchantinfo extends AbstractCommand {
|
||||
|
||||
EcoEnchant enchantment = EcoEnchants.getByName(searchName);
|
||||
|
||||
boolean notFound = enchantment == null;
|
||||
|
||||
if(notFound) {
|
||||
if(enchantment == null) {
|
||||
String message = ConfigManager.getLang().getMessage("not-found").replace("%name%", searchName);
|
||||
sender.sendMessage(message);
|
||||
return;
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.willfp.ecoenchants.command.tabcompleters;
|
||||
|
||||
import com.willfp.ecoenchants.command.AbstractCommand;
|
||||
import com.willfp.ecoenchants.command.AbstractTabCompleter;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchant;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class TabCompleterEnchantinfo extends AbstractTabCompleter {
|
||||
private final List<String> enchantsNames;
|
||||
|
||||
public TabCompleterEnchantinfo() {
|
||||
super((AbstractCommand) Bukkit.getPluginCommand("enchantinfo").getExecutor());
|
||||
enchantsNames = EcoEnchants.getAll().stream().map(EcoEnchant::getName).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private static String removePrefix(String s, String prefix) {
|
||||
if (s != null && prefix != null && s.startsWith(prefix)) {
|
||||
return s.substring(prefix.length());
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTab(CommandSender sender, List<String> args) {
|
||||
List<String> completions = new ArrayList<>();
|
||||
|
||||
if (args.size() == 0) {
|
||||
// Currently, this case is not ever reached
|
||||
return enchantsNames;
|
||||
}
|
||||
|
||||
StringUtil.copyPartialMatches(String.join(" ", args), enchantsNames, completions);
|
||||
|
||||
if (args.size() > 1) { // Remove all previous words from the candidate of completions
|
||||
ArrayList<String> finishedArgs = new ArrayList<>(args);
|
||||
finishedArgs.remove(args.size() - 1);
|
||||
|
||||
String prefix = String.join(" ", finishedArgs);
|
||||
completions = completions.stream().map(enchantName -> removePrefix(enchantName, prefix).trim()).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
Collections.sort(completions);
|
||||
return completions;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.willfp.ecoenchants.config;
|
||||
|
||||
import com.willfp.ecoenchants.EcoEnchantsPlugin;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import com.willfp.ecoenchants.enchantments.meta.EnchantmentRarity;
|
||||
import com.willfp.ecoenchants.enchantments.meta.EnchantmentTarget;
|
||||
import com.willfp.ecoenchants.util.Logger;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.willfp.ecoenchants.config.configs;
|
||||
|
||||
import com.willfp.ecoenchants.config.UpdatingLang;
|
||||
import com.willfp.ecoenchants.config.YamlConfig;
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -6,8 +6,8 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import com.willfp.ecoenchants.enchantments.util.EnchantChecks;
|
||||
import com.willfp.ecoenchants.events.armorequip.ArmorEquipEvent;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import com.willfp.ecoenchants.util.VectorUtils;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Monster;
|
||||
import org.bukkit.entity.PigZombie;
|
||||
|
||||
@@ -5,8 +5,8 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import com.willfp.ecoenchants.enchantments.util.EnchantChecks;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import com.willfp.ecoenchants.util.ItemDurability;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Repairable;
|
||||
|
||||
|
||||
@@ -6,14 +6,14 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import com.willfp.ecoenchants.enchantments.util.EnchantChecks;
|
||||
import com.willfp.ecoenchants.events.armorequip.ArmorEquipEvent;
|
||||
import com.willfp.ecoenchants.util.VectorUtils;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import com.willfp.ecoenchants.util.NumberUtils;
|
||||
import org.bukkit.entity.*;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Monster;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.willfp.ecoenchants.enchantments.ecoenchants.normal;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchant;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import com.willfp.ecoenchants.util.Logger;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
public final class Kinetic extends EcoEnchant {
|
||||
|
||||
@@ -6,8 +6,8 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import com.willfp.ecoenchants.enchantments.util.EnchantChecks;
|
||||
import com.willfp.ecoenchants.events.armorequip.ArmorEquipEvent;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import com.willfp.ecoenchants.util.VectorUtils;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.ExperienceOrb;
|
||||
import org.bukkit.entity.Item;
|
||||
|
||||
@@ -5,8 +5,8 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder;
|
||||
import com.willfp.ecoenchants.enchantments.EcoEnchants;
|
||||
import com.willfp.ecoenchants.enchantments.util.EnchantChecks;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import com.willfp.ecoenchants.util.ItemDurability;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Repairable;
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.willfp.ecoenchants.EcoEnchantsPlugin;
|
||||
import com.willfp.ecoenchants.command.commands.CommandEcodebug;
|
||||
import com.willfp.ecoenchants.command.commands.CommandEcoreload;
|
||||
import com.willfp.ecoenchants.command.commands.CommandEnchantinfo;
|
||||
import com.willfp.ecoenchants.command.EcoEnchantsTabCompleter;
|
||||
import com.willfp.ecoenchants.command.tabcompleters.TabCompleterEnchantinfo;
|
||||
import com.willfp.ecoenchants.config.ConfigManager;
|
||||
import com.willfp.ecoenchants.display.EnchantDisplay;
|
||||
import com.willfp.ecoenchants.display.packets.PacketOpenWindowMerchant;
|
||||
@@ -41,9 +41,9 @@ import com.willfp.ecoenchants.listeners.PlayerJoinListener;
|
||||
import com.willfp.ecoenchants.nms.BlockBreak;
|
||||
import com.willfp.ecoenchants.nms.Cooldown;
|
||||
import com.willfp.ecoenchants.nms.TridentStack;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import com.willfp.ecoenchants.util.Logger;
|
||||
import com.willfp.ecoenchants.util.UpdateChecker;
|
||||
import com.willfp.ecoenchants.util.interfaces.EcoRunnable;
|
||||
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
|
||||
import org.bstats.bukkit.Metrics;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -283,7 +283,7 @@ public class Loader {
|
||||
Logger.info("Loading Commands...");
|
||||
new CommandEcoreload().register();
|
||||
new CommandEcodebug().register();
|
||||
new CommandEnchantinfo().register();
|
||||
new CommandEnchantinfo().setTab(new TabCompleterEnchantinfo()).register();
|
||||
Logger.info("");
|
||||
|
||||
/*
|
||||
|
||||
@@ -11,7 +11,10 @@ import org.bukkit.event.player.PlayerExpChangeEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* All drops generated from enchantments should be sent through a {@link DropQueue}
|
||||
|
||||
Reference in New Issue
Block a user