所以,我正在制作一个 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
}
}
}
最佳答案
您需要一些东西:
- 已注册的所有别名的列表
- 别名执行器,将在键入别名命令时执行该命令
- 将别名命令注册到 bukkit
这里有一些示例:
- 别名列表
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/