From 4393cc9ce2899d0aee4eca095d29ad5210f48d96 Mon Sep 17 00:00:00 2001 From: carm Date: Fri, 17 Mar 2023 22:36:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(command):=20=E4=B8=BA=E5=90=84=E4=B8=AA?= =?UTF-8?q?=E6=8C=87=E4=BB=A4=E7=9A=84=E5=8A=9F=E8=83=BD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E6=9D=83=E9=99=90=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=8E=A5=E5=8F=97=E6=8C=87=E4=BB=A4=E9=94=99=E8=AF=AF=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-EN.md | 8 +- README.md | 8 +- pom.xml | 30 +++-- .../java/cc/carm/plugin/moeteleport/Main.java | 21 +-- .../moeteleport/command/sub/BackCommand.java | 5 + .../moeteleport/command/sub/HomeCommands.java | 5 + .../command/sub/ReloadCommand.java | 2 +- .../command/sub/TeleportCommands.java | 7 +- .../moeteleport/command/sub/WarpCommands.java | 6 + .../moeteleport/manager/CommandManager.java | 122 ------------------ src/main/resources/plugin.yml | 22 +++- 11 files changed, 76 insertions(+), 160 deletions(-) delete mode 100644 src/main/java/cc/carm/plugin/moeteleport/manager/CommandManager.java diff --git a/README-EN.md b/README-EN.md index c3ea6d9..0596080 100644 --- a/README-EN.md +++ b/README-EN.md @@ -9,10 +9,10 @@ README LANGUAGES [ [中文](README.md) | [**English**](README-EN.md) ] # MoeTeleport -[![CodeFactor](https://www.codefactor.io/repository/github/carm-outsource/MoeTeleport/badge?s=b76fec1f64726b5f19989aace6adb5f85fdab840)](https://www.codefactor.io/repository/github/carm-outsource/MoeTeleport) -![CodeSize](https://img.shields.io/github/languages/code-size/carm-outsource/MoeTeleport) -[![Download](https://img.shields.io/github/downloads/carm-outsource/MoeTeleport/total)](https://github.com/carm-outsource/MoeTeleport/releases) -[![Java CI with Maven](https://github.com/carm-outsource/MoeTeleport/actions/workflows/maven.yml/badge.svg?branch=master)](https://github.com/carm-outsource/MoeTeleport/actions/workflows/maven.yml) +[![CodeFactor](https://www.codefactor.io/repository/github/CarmJos/MoeTeleport/badge?s=b76fec1f64726b5f19989aace6adb5f85fdab840)](https://www.codefactor.io/repository/github/CarmJos/MoeTeleport) +![CodeSize](https://img.shields.io/github/languages/code-size/CarmJos/MoeTeleport) +[![Download](https://img.shields.io/github/downloads/CarmJos/MoeTeleport/total)](https://github.com/CarmJos/MoeTeleport/releases) +[![Java CI with Maven](https://github.com/CarmJos/MoeTeleport/actions/workflows/maven.yml/badge.svg?branch=master)](https://github.com/CarmJos/MoeTeleport/actions/workflows/maven.yml) ![Support](https://img.shields.io/badge/Minecraft-Java%201.13--Latest-blue) ![](https://visitor-badge.glitch.me/badge?page_id=moeteleport.readme) diff --git a/README.md b/README.md index ecb90cc..81e56bd 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,10 @@ README LANGUAGES [ [**中文**](README.md) | [English](README-EN.md) ] # MoeTeleport 喵喵传送 -[![CodeFactor](https://www.codefactor.io/repository/github/carm-outsource/MoeTeleport/badge?s=b76fec1f64726b5f19989aace6adb5f85fdab840)](https://www.codefactor.io/repository/github/carm-outsource/MoeTeleport) -![CodeSize](https://img.shields.io/github/languages/code-size/carm-outsource/MoeTeleport) -[![Download](https://img.shields.io/github/downloads/carm-outsource/MoeTeleport/total)](https://github.com/carm-outsource/MoeTeleport/releases) -[![Java CI with Maven](https://github.com/carm-outsource/MoeTeleport/actions/workflows/maven.yml/badge.svg?branch=master)](https://github.com/carm-outsource/MoeTeleport/actions/workflows/maven.yml) +[![CodeFactor](https://www.codefactor.io/repository/github/CarmJos/MoeTeleport/badge?s=b76fec1f64726b5f19989aace6adb5f85fdab840)](https://www.codefactor.io/repository/github/CarmJos/MoeTeleport) +![CodeSize](https://img.shields.io/github/languages/code-size/CarmJos/MoeTeleport) +[![Download](https://img.shields.io/github/downloads/CarmJos/MoeTeleport/total)](https://github.com/CarmJos/MoeTeleport/releases) +[![Java CI with Maven](https://github.com/CarmJos/MoeTeleport/actions/workflows/maven.yml/badge.svg?branch=master)](https://github.com/CarmJos/MoeTeleport/actions/workflows/maven.yml) ![Support](https://img.shields.io/badge/Minecraft-Java%201.13--Latest-blue) ![](https://visitor-badge.glitch.me/badge?page_id=moeteleport.readme) diff --git a/pom.xml b/pom.xml index 40e0b56..9e3a29e 100644 --- a/pom.xml +++ b/pom.xml @@ -11,14 +11,14 @@ UTF-8 UTF-8 - 1.5.4 + 1.5.5 0.4.6 2.5.0 cc.carm.plugin moeteleport - 4.0.1 + 4.0.2 MoeTeleport 喵喵传送,简单的传送、设置家的插件。 @@ -44,13 +44,6 @@ - - - carm-repo - Carm's Repo - https://repo.carm.cc/repository/maven-public/ - - spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ @@ -87,10 +80,11 @@ - github - GitHub Packages - https://maven.pkg.github.com/CarmJos/${project.name} + carm-repo + Carm's Repo + https://repo.carm.cc/repository/maven-public/ + @@ -98,7 +92,7 @@ github GitHub Packages - https://maven.pkg.github.com/CarmJos/${project.name} + https://maven.pkg.github.com/CarmJos/MoeTeleport @@ -128,6 +122,14 @@ true + + cc.carm.lib + easyplugin-command-alias + ${deps.easyplugin.version} + compile + true + + cc.carm.lib easyplugin-githubchecker @@ -295,7 +297,7 @@ - ${project.name}-${project.version} + MoeTeleport-${project.version} ${project.basedir}/asset/ false diff --git a/src/main/java/cc/carm/plugin/moeteleport/Main.java b/src/main/java/cc/carm/plugin/moeteleport/Main.java index 735cfb7..8ba3ca5 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/Main.java +++ b/src/main/java/cc/carm/plugin/moeteleport/Main.java @@ -2,6 +2,7 @@ package cc.carm.plugin.moeteleport; import cc.carm.lib.configuration.core.source.ConfigurationProvider; import cc.carm.lib.easyplugin.EasyPlugin; +import cc.carm.lib.easyplugin.command.alias.AliasCommandManager; import cc.carm.lib.easyplugin.updatechecker.GHUpdateChecker; import cc.carm.lib.mineconfiguration.bukkit.MineConfiguration; import cc.carm.plugin.moeteleport.command.MainCommands; @@ -15,6 +16,7 @@ import cc.carm.plugin.moeteleport.storage.StorageMethod; import org.bstats.bukkit.Metrics; import org.bstats.charts.SimplePie; import org.bukkit.Bukkit; +import org.jetbrains.annotations.NotNull; import xyz.xenondevs.particle.utils.ReflectionUtils; public class Main extends EasyPlugin { @@ -28,7 +30,7 @@ public class Main extends EasyPlugin { protected UserManager userManager; protected RequestManager requestManager; protected TeleportManager teleportManager; - protected CommandManager commandManager; + protected AliasCommandManager commandManager; public Main() { instance = this; @@ -85,14 +87,15 @@ public class Main extends EasyPlugin { log("注册指令..."); registerCommand("MoeTeleport", new MainCommands(this)); - try { - this.commandManager = new CommandManager(this); - if (PluginConfig.COMMAND.ENABLE.getNotNull()) { + if (PluginConfig.COMMAND.ENABLE.getNotNull()) { + log("注册简化指令映射..."); + try { + this.commandManager = new AliasCommandManager(this); PluginConfig.COMMAND.ALIAS.getNotNull().forEach(commandManager::register); + } catch (Exception e) { + log("注册简化指令失败: " + e.getMessage()); + e.printStackTrace(); } - } catch (Exception e) { - log("注册简化指令失败: " + e.getMessage()); - e.printStackTrace(); } if (PluginConfig.METRICS.getNotNull()) { @@ -116,8 +119,8 @@ public class Main extends EasyPlugin { @Override protected void shutdown() { - log("清空简化指令..."); - if (this.commandManager != null) { + if (PluginConfig.COMMAND.ENABLE.getNotNull() && this.commandManager != null) { + log("清空简化指令..."); this.commandManager.unregisterAll(); } diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/sub/BackCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/sub/BackCommand.java index 771a0ca..d8f046f 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/sub/BackCommand.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/sub/BackCommand.java @@ -39,4 +39,9 @@ public class BackCommand extends SubCommand { return null; } + @Override + public boolean hasPermission(CommandSender sender) { + return sender.hasPermission("MoeTeleport.back"); + } + } diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/sub/HomeCommands.java b/src/main/java/cc/carm/plugin/moeteleport/command/sub/HomeCommands.java index 49a6760..5255026 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/sub/HomeCommands.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/sub/HomeCommands.java @@ -48,4 +48,9 @@ public class HomeCommands extends CommandHandler { return main.noPermission(sender); } + @Override + public boolean hasPermission(CommandSender sender) { + return sender.hasPermission("MoeTeleport.home"); + } + } diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/sub/ReloadCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/sub/ReloadCommand.java index 6094573..51c3069 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/sub/ReloadCommand.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/sub/ReloadCommand.java @@ -35,7 +35,7 @@ public class ReloadCommand extends SubCommand { @Override public boolean hasPermission(CommandSender sender) { - return sender.hasPermission("moeteleport.reload"); + return sender.hasPermission("MoeTeleport.admin"); } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/sub/TeleportCommands.java b/src/main/java/cc/carm/plugin/moeteleport/command/sub/TeleportCommands.java index 45bbbda..f471fd5 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/sub/TeleportCommands.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/sub/TeleportCommands.java @@ -22,7 +22,7 @@ public class TeleportCommands extends CommandHandler { registerSubCommand(new TeleportRequestCommand(this, TeleportRequest.Type.TPA_TO, "to")); registerSubCommand(new TeleportRequestCommand(this, TeleportRequest.Type.TPA_HERE, "here")); - registerSubCommand(new TeleportHandleCommand(this, true, "cancel")); + registerSubCommand(new TeleportHandleCommand(this, true, "accept", "agree")); registerSubCommand(new TeleportHandleCommand(this, false, "deny", "refuse")); registerSubCommand(new TeleportCancelCommand(this, "cancel")); } @@ -38,4 +38,9 @@ public class TeleportCommands extends CommandHandler { return main.noPermission(sender); } + @Override + public boolean hasPermission(CommandSender sender) { + return sender.hasPermission("MoeTeleport.teleport"); + } + } diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/sub/WarpCommands.java b/src/main/java/cc/carm/plugin/moeteleport/command/sub/WarpCommands.java index 1e31806..25f82cb 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/command/sub/WarpCommands.java +++ b/src/main/java/cc/carm/plugin/moeteleport/command/sub/WarpCommands.java @@ -49,4 +49,10 @@ public class WarpCommands extends CommandHandler { return main.noPermission(sender); } + + @Override + public boolean hasPermission(CommandSender sender) { + return sender.hasPermission("MoeTeleport.warp"); + } + } diff --git a/src/main/java/cc/carm/plugin/moeteleport/manager/CommandManager.java b/src/main/java/cc/carm/plugin/moeteleport/manager/CommandManager.java deleted file mode 100644 index d5e15ab..0000000 --- a/src/main/java/cc/carm/plugin/moeteleport/manager/CommandManager.java +++ /dev/null @@ -1,122 +0,0 @@ -package cc.carm.plugin.moeteleport.manager; - -import cc.carm.plugin.moeteleport.Main; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.SimpleCommandMap; -import org.bukkit.plugin.SimplePluginManager; -import org.bukkit.plugin.java.JavaPlugin; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.lang.reflect.Field; -import java.util.*; - -public class CommandManager { - - protected final JavaPlugin plugin; - - protected final SimpleCommandMap commandMap; - protected final Field knownCommandsFiled; - - protected final Map registeredCommands = new HashMap<>(); - - public CommandManager(JavaPlugin plugin) throws Exception { - this.plugin = plugin; - - SimplePluginManager manager = (SimplePluginManager) Bukkit.getPluginManager(); - Field commandMapField = SimplePluginManager.class.getDeclaredField("commandMap"); - commandMapField.setAccessible(true); - this.commandMap = (SimpleCommandMap) commandMapField.get(manager); - - this.knownCommandsFiled = SimpleCommandMap.class.getDeclaredField("knownCommands"); - this.knownCommandsFiled.setAccessible(true); - - } - - @SuppressWarnings("unchecked") - protected Map getKnownCommands() { - try { - return (Map) knownCommandsFiled.get(commandMap); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - return new HashMap<>(); - } - - public String getPrefix() { - return this.plugin.getName().toLowerCase() + " "; - } - - protected SimpleCommandMap getCommandMap() { - return commandMap; - } - - public void register(String alias, String target) { - AliasCommand current = this.registeredCommands.get(alias); - if (current != null) current.unregister(getCommandMap()); - - AliasCommand cmd = new AliasCommand(alias, this, getPrefix() + target); - this.registeredCommands.put(alias, cmd); - getCommandMap().register(Main.getInstance().getName(), cmd); - } - - public void unregister(String alias) { - AliasCommand current = this.registeredCommands.remove(alias); - if (current != null) { - getKnownCommands().remove(alias); - current.unregister(getCommandMap()); - } - } - - public void unregisterAll() { - registeredCommands.forEach((k, v) -> { - getKnownCommands().remove(k); - v.unregister(getCommandMap()); - }); - registeredCommands.clear(); - } - - public static class AliasCommand extends Command { - - protected final CommandManager commandManager; - protected final String targetCommand; - - public AliasCommand(String name, CommandManager commandManager, String targetCommand) { - super(name); - this.commandManager = commandManager; - this.targetCommand = targetCommand; - } - - protected SimpleCommandMap getCommandMap() { - return this.commandManager.getCommandMap(); - } - - protected String buildCommand(String[] args) { - return this.targetCommand + " " + String.join(" ", args); - } - - @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) { - return getCommandMap().dispatch(sender, buildCommand(args)); - } - - @NotNull - @Override - public List tabComplete(@NotNull CommandSender sender, @NotNull String alias, - @NotNull String[] args, @Nullable Location location) throws IllegalArgumentException { - return Optional.ofNullable(getCommandMap().tabComplete(sender, buildCommand(args))).orElse(Collections.emptyList()); - } - - @NotNull - @Override - public List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { - return tabComplete(sender, alias, args, null); - } - - } - - -} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index fd42aa2..1a88afc 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -13,18 +13,30 @@ softdepend: - CMI permissions: - "MoeTeleport": - description: "插件的主权限节点" - default: false "MoeTeleport.admin": description: "插件的管理员权限节点" default: op + "MoeTeleport.teleport": + description: "使用传送请求相关指令的权限。" + default: true + + "MoeTeleport.home": + description: "使用家相关指令的权限。" + default: true + + "MoeTeleport.warp": + description: "使用传送请求相关指令的权限。" + default: true + + "MoeTeleport.back": + description: "使用返回相关指令的权限。" + default: true + commands: "MoeTeleport": description: "插件的主命令,用于重载插件或查看插件信息。" - permission: "MoeTeleport.admin" - usage: "/MoeTeleport reload" + usage: "您可以输入 /MoeTeleport help 查看插件的相关帮助。" aliases: - mt \ No newline at end of file