好像没上传干净

This commit is contained in:
坏黑
2018-05-07 23:58:32 +08:00
parent 8c6518ffc5
commit 674e993105
35 changed files with 1603 additions and 1122 deletions

View File

@@ -0,0 +1,28 @@
package me.skymc.taboolib.commands.internal;
/**
* @author Bkm016
* @since 2018-04-17
*/
public class InternalArgument {
private String name;
private boolean required;
public String getName() {
return name;
}
public boolean isRequired() {
return required;
}
public InternalArgument(String name, boolean required) {
this.name = name;
this.required = required;
}
public String toString() {
return required ? "§7[§8" + name + "§7]" : "§7<§8" + name + "§7>";
}
}

View File

@@ -4,6 +4,8 @@ package me.skymc.taboolib.commands.internal;
* @Author sky
* @Since 2018-05-07 21:36
*/
public class InternalMainCommand {
public interface InternalCommand {
String getCommandTitle();
}

View File

@@ -1,9 +1,111 @@
package me.skymc.taboolib.commands.internal;
import com.ilummc.tlib.resources.TLocale;
import me.skymc.taboolib.Main;
import me.skymc.taboolib.TabooLib;
import me.skymc.taboolib.string.ArrayUtils;
import me.skymc.taboolib.string.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.*;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @Author sky
* @Since 2018-05-07 21:38
*/
public class InternalCommandExecutor {
public abstract class InternalCommandExecutor implements InternalCommand, CommandExecutor, TabExecutor {
private InternalCommandExecutor subExecutor;
private List<InternalSubCommandExecutor> subCommandExecutors = new ArrayList<>();
public static InternalCommandExecutor createCommandExecutor(String command, InternalCommandExecutor internalCommandExecutor) {
assert Bukkit.getPluginCommand(command) == null : "PluginCommand \"" + command + "\"not found";
assert internalCommandExecutor != null : "Executor can not be null";
assert internalCommandExecutor.getCommandTitle() != null : "Executor title can not be null";
assert internalCommandExecutor.getClass() != InternalCommandExecutor.class : "SubExecutor can not be \"InternalCommandExecutor.class\"";
internalCommandExecutor.setSubExecutor(internalCommandExecutor);
Bukkit.getPluginCommand(command).setExecutor(internalCommandExecutor);
Bukkit.getPluginCommand(command).setTabCompleter(internalCommandExecutor);
return internalCommandExecutor;
}
public void setSubExecutor(InternalCommandExecutor subExecutor) {
this.subExecutor = subExecutor;
}
public InternalCommandExecutor getSubExecutor() {
return subExecutor;
}
public List<InternalSubCommandExecutor> getSubCommandExecutors() {
return subCommandExecutors;
}
public void registerSubCommandExecutor(InternalSubCommandExecutor subCommandExecutor) {
assert subCommandExecutor.getLabel() != null : "Command label can not be null";
assert subCommandExecutor.getDescription() != null : "Command description can not be null";
assert subCommandExecutor.getArguments() != null : "Command arguments can not be null";
subCommandExecutors.add(subCommandExecutor);
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length == 0) {
helpCommand(sender, label);
} else {
for (InternalSubCommandExecutor subCommand : subCommandExecutors) {
if (subCommand == null || !args[0].equalsIgnoreCase(subCommand.getLabel())) {
continue;
}
if (!isConfirmType(sender, subCommand.getType())) {
TLocale.sendTo(sender, "COMMANDS.INTERNAL.ONLY-PLAYER", args[0], TLocale.asString("COMMANDS.INTERNAL.TYPE-" + subCommand.getType()));
return true;
}
String[] subCommandArgs = ArrayUtils.removeFirst(args);
if (subCommand.isParameterConform(subCommandArgs)) {
subCommand.onCommand(sender, command, label, subCommandArgs);
} else {
TLocale.sendTo(sender, "COMMANDS.INTERNAL.ERROR-USAGE", args[0], subCommand.getCommandString(label));
}
return true;
}
new BukkitRunnable() {
@Override
public void run() {
List<InternalSubCommandExecutor> commandCompute = subCommandExecutors.stream().filter(Objects::nonNull).sorted((b, a) -> Double.compare(StringUtils.similarDegree(args[0], a.getLabel()), StringUtils.similarDegree(args[0], b.getLabel()))).collect(Collectors.toList());
if (commandCompute.size() > 0) {
TLocale.sendTo(sender, "COMMANDS.INTERNAL.ERROR-COMMAND", args[0], commandCompute.get(0).getCommandString(label).trim());
}
}
}.runTaskAsynchronously(Main.getInst());
}
return true;
}
@Override
public List<String> onTabComplete(CommandSender commandSender, Command command, String s, String[] args) {
return args.length == 1 ? subCommandExecutors.stream().filter(internalCommandExecutor -> internalCommandExecutor != null && (args[0].isEmpty() || internalCommandExecutor.getLabel().startsWith(args[0]))).map(InternalSubCommand::getLabel).collect(Collectors.toList()) : null;
}
private String getEmptyLine() {
return TabooLib.getVerint() < 10800 ? "~" : "";
}
private void helpCommand(CommandSender sender, String label) {
sender.sendMessage(getEmptyLine());
sender.sendMessage(subExecutor.getCommandTitle());
sender.sendMessage(getEmptyLine());
subCommandExecutors.stream().map(subCommand -> subCommand == null ? getEmptyLine() : subCommand.getCommandString(label)).forEach(sender::sendMessage);
sender.sendMessage(getEmptyLine());
}
private boolean isConfirmType(CommandSender sender, InternalSubCommandType commandType) {
return commandType == InternalSubCommandType.ALL || sender instanceof ConsoleCommandSender && commandType == InternalSubCommandType.CONSOLE;
}
}

View File

@@ -7,14 +7,14 @@ import org.bukkit.command.CommandSender;
* @author Bkm016
* @since 2018-04-17
*/
public interface InternalCommand {
String getLabel();
String getDescription();
InternalCommandArgument[] getArguments();
void onCommand(CommandSender sender, Command command, String label, String[] args);
public interface InternalSubCommand {
String getLabel();
String getDescription();
InternalArgument[] getArguments();
void onCommand(CommandSender sender, Command command, String label, String[] args);
}

View File

@@ -1,20 +1,15 @@
package me.skymc.taboolib.commands.internal;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* @author Bkm016
* @since 2018-04-17
*/
public abstract class InternalCommandExecutor implements InternalCommand {
public abstract class InternalSubCommandExecutor implements InternalSubCommand {
public InternalCommandType getType() {
return InternalCommandType.ALL;
public InternalSubCommandType getType() {
return InternalSubCommandType.ALL;
}
public boolean requiredPlayer() {
@@ -25,22 +20,14 @@ public abstract class InternalCommandExecutor implements InternalCommand {
return IntStream.range(0, getArguments().length).noneMatch(i -> getArguments()[i].isRequired() && (args == null || args.length <= i));
}
public boolean isConfirmType(CommandSender sender, InternalCommandType commandType) {
return commandType == InternalCommandType.ALL || sender instanceof ConsoleCommandSender && commandType == InternalCommandType.CONSOLE;
}
public List<String> getTabCompleter(List<InternalCommandExecutor> internalCommandExecutors, String[] args) {
return args.length == 1 ? internalCommandExecutors.stream().filter(internalCommandExecutor -> internalCommandExecutor != null && (args[0].isEmpty() || internalCommandExecutor.getLabel().startsWith(args[0]))).map(InternalCommand::getLabel).collect(Collectors.toList()) : null;
}
public String getCommandString(String label) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("§f /");
stringBuilder.append(" §f/");
stringBuilder.append(label);
stringBuilder.append(" ");
stringBuilder.append(getLabel());
stringBuilder.append(" ");
for (InternalCommandArgument parameter : getArguments()) {
for (InternalArgument parameter : getArguments()) {
stringBuilder.append(parameter.toString());
stringBuilder.append(" ");
}

View File

@@ -4,7 +4,7 @@ package me.skymc.taboolib.commands.internal;
* @author Bkm016
* @since 2018-04-17
*/
public enum InternalCommandType {
public enum InternalSubCommandType {
CONSOLE, PLAYER, ALL

View File

@@ -1,9 +1,215 @@
package me.skymc.taboolib.commands.plugin;
import com.google.common.base.Joiner;
import com.ilummc.tlib.resources.TLocale;
import me.skymc.taboolib.commands.internal.InternalArgument;
import me.skymc.taboolib.commands.internal.InternalCommandExecutor;
import me.skymc.taboolib.commands.internal.InternalSubCommandExecutor;
import me.skymc.taboolib.plugin.PluginUtils;
import me.skymc.taboolib.string.ArrayUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author sky
* @Since 2018-05-07 20:14
*/
public class TabooLibPluginCommand {
public class TabooLibPluginCommand extends InternalCommandExecutor {
}
public TabooLibPluginCommand() {
listCommand();
infoCommand();
loadCommand();
unloadCommand();
reloadCommand();
}
@Override
public String getCommandTitle() {
return TLocale.asString("COMMANDS.TPLUGIN.COMMAND-TITLE");
}
void loadCommand() {
registerSubCommandExecutor(new InternalSubCommandExecutor() {
@Override
public String getLabel() {
return "load";
}
@Override
public String getDescription() {
return TLocale.asString("COMMANDS.TPLUGIN.LOAD.DESCRIPTION");
}
@Override
public InternalArgument[] getArguments() {
return new InternalArgument[]{new InternalArgument(TLocale.asString("COMMANDS.TPLUGIN.LOAD.ARGUMENTS.0"), true)};
}
@Override
public void onCommand(CommandSender sender, Command command, String label, String[] args) {
String name = ArrayUtils.arrayJoin(args, 0);
if (PluginUtils.getPluginByName(name) != null) {
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.LOAD.INVALID-PLUGIN", name);
} else {
switch (PluginUtils.load(name)) {
case "loaded": {
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.LOAD.LOAD-SUCCESS", name);
break;
}
default: {
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.LOAD.LOAD-FALL", name);
}
}
}
}
});
}
void unloadCommand() {
registerSubCommandExecutor(new InternalSubCommandExecutor() {
@Override
public String getLabel() {
return "unload";
}
@Override
public String getDescription() {
return TLocale.asString("COMMANDS.TPLUGIN.UNLOAD.DESCRIPTION");
}
@Override
public InternalArgument[] getArguments() {
return new InternalArgument[]{new InternalArgument(TLocale.asString("COMMANDS.TPLUGIN.UNLOAD.ARGUMENTS.0"), true)};
}
@Override
public void onCommand(CommandSender sender, Command command, String label, String[] args) {
String name = ArrayUtils.arrayJoin(args, 0);
Plugin plugin = PluginUtils.getPluginByName(name);
if (plugin == null) {
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.UNLOAD.INVALID-PLUGIN", name);
} else if (PluginUtils.isIgnored(plugin)) {
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.UNLOAD.INVALID-PLUGIN-IGNORED", name);
} else {
switch (PluginUtils.unload(plugin)) {
case "unloaded": {
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.UNLOAD.UNLOAD-SUCCESS", name);
break;
}
default: {
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.UNLOAD.UNLOAD-FALL", name);
}
}
}
}
});
}
void reloadCommand() {
registerSubCommandExecutor(new InternalSubCommandExecutor() {
@Override
public String getLabel() {
return "reload";
}
@Override
public String getDescription() {
return TLocale.asString("COMMANDS.TPLUGIN.RELOAD.DESCRIPTION");
}
@Override
public InternalArgument[] getArguments() {
return new InternalArgument[]{new InternalArgument(TLocale.asString("COMMANDS.TPLUGIN.RELOAD.ARGUMENTS.0"), true)};
}
@Override
public void onCommand(CommandSender sender, Command command, String label, String[] args) {
String name = ArrayUtils.arrayJoin(args, 0);
Plugin plugin = PluginUtils.getPluginByName(name);
if (plugin == null) {
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.RELOAD.INVALID-PLUGIN", name);
} else if (PluginUtils.isIgnored(plugin)) {
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.RELOAD.INVALID-PLUGIN-IGNORED", name);
} else {
PluginUtils.reload(plugin);
}
}
});
}
void infoCommand() {
registerSubCommandExecutor(new InternalSubCommandExecutor() {
@Override
public String getLabel() {
return "info";
}
@Override
public String getDescription() {
return TLocale.asString("COMMANDS.TPLUGIN.INFO.DESCRIPTION");
}
@Override
public InternalArgument[] getArguments() {
return new InternalArgument[]{new InternalArgument(TLocale.asString("COMMANDS.TPLUGIN.INFO.ARGUMENTS.0"), true)};
}
@Override
public void onCommand(CommandSender sender, Command command, String label, String[] args) {
String name = ArrayUtils.arrayJoin(args, 0);
Plugin plugin = PluginUtils.getPluginByName(name);
if (plugin == null) {
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.INFO.INVALID-PLUGIN", name);
} else {
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.INFO.INFO-PLUGIN",
plugin.getName(),
String.valueOf(plugin.getDescription().getDescription()),
String.valueOf(plugin.getDescription().getAuthors()),
String.valueOf(plugin.getDescription().getDepend()),
String.valueOf(plugin.getDescription().getSoftDepend()),
String.valueOf(plugin.getDescription().getMain()),
String.valueOf(plugin.getDescription().getVersion()),
String.valueOf(plugin.getDescription().getWebsite()),
String.valueOf(plugin.getDescription().getCommands().keySet()));
}
}
});
}
void listCommand() {
registerSubCommandExecutor(new InternalSubCommandExecutor() {
@Override
public String getLabel() {
return "list";
}
@Override
public String getDescription() {
return TLocale.asString("COMMANDS.TPLUGIN.LIST.DESCRIPTION");
}
@Override
public InternalArgument[] getArguments() {
return new InternalArgument[0];
}
@Override
public void onCommand(CommandSender sender, Command command, String label, String[] args) {
List<String> pluginList = Arrays.stream(Bukkit.getPluginManager().getPlugins()).map(Plugin::getName).sorted(String.CASE_INSENSITIVE_ORDER).collect(Collectors.toList());
TLocale.sendTo(sender, "COMMANDS.TPLUGIN.LIST.LIST-PLUGIN", String.valueOf(Bukkit.getPluginManager().getPlugins().length), Joiner.on(", ").join(pluginList));
}
});
}
}