java - 如何为现有命令创建别名?

标签 java minecraft minecraft-forge

所以,我正在制作一个 Minecraft mod,它允许为现有命令创建别名,例如 /tp/spawnpoint/setblock等等,以及将许多命令集中在一个命令中并按顺序执行,如下所示:

/alias add sun "time set day" "weather clear"

我已经制作了 /alias 命令本身的基础,但我仍然不知道如何实现它的功能。

public class CommandAlias extends CommandBase {

    private final List<String> aliases = Lists.newArrayList(Reference.MODID, "alias", "al");

    @Override
    public String getName() {
        return "alias";
    }

    @Override
    public String getUsage(ICommandSender sender) {
        return "/alias add|remove|edit <alias> <command(s)>";
    }

    @Override
    public List<String> getAliases() {
        return aliases;
    }

    @Override
    public boolean checkPermission(MinecraftServer server, ICommandSender sender) {
        return true;
    }

    @Override
    public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
        // sender.sendMessage(new TextComponentString("Hi " + sender.getName() + "!"));

        if (args.length < 1) {
            sender.sendMessage(new TextComponentString(TextFormatting.RED + "Invalid arguments!"));
            return;
        }

        String alias = args[0];
        String cmd = args[1];

        if (args[0] == "add"){
            // something
        } else if (args[0] == "remove" || args[0] == "delete"){
            // something
        } else if (args[0] == "edit"){
            // something
        }
    }
}

最佳答案

您需要一些东西:

  1. 已注册的所有别名的列表
  2. 别名执行器,将在键入别名命令时执行该命令
  3. 将别名命令注册到 bukkit

这里有一些示例:

  1. 别名列表
HashMap<String, String> aliasList = new HashMap<String>;

添加别名时,您需要将其添加到它所使用的别名的命令中:

aliasList.put(myAliasString, commandToReplace);
  • 别名执行器,将在键入别名命令时执行该命令
  • executeAlias(String alias, ICommandSender sender, String[] args) {
        if(aliasList.contains(alias) {
            String aliasedCommand = aliastList.get(alias);
    
            // Here you will need to convert the args array to a spaced string (if needed). 
            // Then send the command:
            Bukkit.getServer().dispatchCommand(sender, commandString);
        }
    }
    
  • 在命令进来时注册它们:
  • if (args[0] == "add"){
        // Make the AliasListener have the code from part 2
        Bukkit.getCommand(args[1]).setExecutor(aliasListener)
    
        // Store the alias and the command it replaces in the list.
        this.aliasList.put(args[1], args[2])
    }
    

    关于java - 如何为现有命令创建别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57523376/

    相关文章:

    获取月份和年份的java日期问题

    java - 如何用值声明一个 ArrayList?

    java - 查找字符串中的第一个数字序列?

    java - 我在 Forge 1.12.1 中的自定义命令不起作用

    java - FML Gradle - 失败 : Build failed with an exception

    java - 更新了 Eclipse,我的工作区不见了

    java - 在 LinkedList 中使用枚举值

    java - Intellij 无法正确导出

    java - 检查Java中是否加载了包(API)

    java - 如何为 JPanel 网格使用图像?