Enabling/Disabling 命令

Enabling/Disabling Commands

我的插件 yml 中有这个命令:

rankup:
description: Allows to rankup through the prison ranks
aliases: [ru]

但是有一个用于禁用命令的配置文件,如果您禁用此命令:

rankupstrue: false

我需要将其保留在插件 yml 中,以防在配置文件中将此布尔值设置为 true。但是,如果他们在发生任何事情之前禁用 onCommand 布尔值 return,就像这样:

public boolean onCommand(CommandSender s, Command cmd, String label, String[] args){
    if(main.getConfig().getBoolean("rankupstrue"))return true;
    // code
}

然后我在 onEnable

中启用它
getCommand("rankup").setExecutor(new RankupCore(this, qm));

但是,如果禁用此命令的布尔值设置为 false 并且替代插件具有相同的命令,则替代插件的命令将不起作用。为了解决这个问题,我 尝试 在 onEnable:

中停止启用它
if(main.getConfig().getBoolean("rankupstrue"))
{
    // getCommand
}

然而,这给我带来了同样的结果。然后我默认回到插件 yml。有没有办法删除:

rankup:
description: Allows to rankup through the prison ranks
aliases: [ru]

如果 rankupstrue 为假,来自插件 yml? 或者如果那个布尔值是真的,有没有办法将它添加到插件 yml 中? 或者除了插件 yml 之外,还有什么方法可以阻止这个命令吗?

要解决此问题,您可以使用 PlayerCommandPreprocessEvent 并检查该命令是否等于执行此问题的命令。请务必在确认后取消活动。

// in the event
if(e.getMessage().equalsIgnoreCase("command"))e.setCancelled(true);

永远不要将命令放在 YAML 中。

没有从 plugin.yml 中删除命令的真正方法。相反,您更有可能破坏很多东西。听 PlayerCommandPreprocessEvent 并且如果命令具有您想要的名称加上真实的 rankupstrue 值,则取消命令的调用并使用事件的值,构建您自己的事件。使用事件的 getPlayer()getMessage() 方法来执行此操作。

要清楚地回答这个问题,请使用指定的事件 PlayerCommandPreprocessEvent 并确保使用 e.getMessage() 方法有效。我要做的是创建一个 space "parser" 来创建一个像 feel.

这样的论点
public void onCommandEvent(PlayerCommandPreprocessEvent e) {
    Player player = e.getPlayer();
    String message = e.getMessage();
    String[] args = message.split(" ");

    if(args[0] == "command") {
        print(args[1]); // Prints the first argument
    }
}

现在您需要做的另一件事是使用 args.length() 检查参数长度,这将 return 长度的整数。我没有添加这个,因为这只是一个例子。