启用/禁用命令

时间:2015-08-22 23:58:13

标签: java boolean yaml bukkit

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

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

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

rankupstrue: false

如果在配置文件中将此布尔值设置为true,我需要在插件yml中保留它。但是,如果它们禁用了这个,我会在发生任何事情之前返回onCommand boolean,如下所示:

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为false,则从插件yml

? 或者有没有办法将其添加到插件yml中,如果该布尔值为true? 或者有没有办法以插件yml之外的任何方式阻止此命令?

3 个答案:

答案 0 :(得分:0)

要清楚地回答这个问题,请使用指定的事件PlayerCommandPreprocessEvent,并确保使用e.getMessage()方法有效。我要做的是创建一个空间“解析器”来创建一个像感觉一样的参数。

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()检查参数长度,该长度将返回整数。我没有添加这个,因为这只是一个例子。

答案 1 :(得分:-1)

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

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

答案 2 :(得分:-1)

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

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