当前位置: 首页 > 知识库问答 >
问题:

如何将命令发送器从Commands类转到DB类

昌山
2023-03-14

我有两个类的数据库,其中有一个方法“GetMoney”和命令

一般来说,关键是在数据库类中,我需要以某种方式获得一个播放器,或者更确切地说,是在命令类中编写的命令的发送者。我该怎么做?

//DB-GETMONEY

    public int GetMoney(String name) throws Exception {
        String tableName = this.plugin.getConfig().getString("tableName");
        String dbNames = this.plugin.getConfig().getString("columnFirst");
        String dbBalance = this.plugin.getConfig().getString("columnSecond");
        Connection c = this.getConnection();
        Statement s = c.createStatement();
        ResultSet  res = s.executeQuery("SELECT " + dbBalance +" FROM "+ tableName +" WHERE " + dbNames +" = '"+ name +"'" );
        res.next();
        return res.getInt(dbBalance);   
    }

//命令-onCommand

 @Override
    public  boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        
        
        String name = sender.getName();;

        if(args.length == 0 ) {
            
            String showBalance = this.plugin.getConfig().getString("messages.showBalance"); 
            
            
            try {
                int balance = this.database.GetMoney(name);
                showBalance = showBalance.replace("&", "\u00a7").replace("_nm", name).replace("_bl", String.valueOf(balance));
                sender.sendMessage(showBalance);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
        }

共有1个答案

茹高义
2023-03-14

我认为传球界面比一个简单的名字要好。首先,您必须确保发送者是玩家,而不是控制台命令发送者。在此之后,您可以传递玩家,在GetMoney()方法中,您只需通过Player获得玩家的名字。getName()方法。

编辑:我看到你需要命令发送者。你也可以传递它,而不是玩家,只需用命令发送者替换GetMoney参数,并删除我们确定发送者是否是玩家的实例检查。毕竟,你只需在任何地方再次检查它,然后再次将其转换为玩家。

@Override
    public  boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (args.length == 0) {
            if (sender instanceof Player) {
                Player player = (Player) sender;

                String showBalance = this.plugin.getConfig().getString("messages.showBalance");
                try {
                    int balance = this.database.GetMoney(player);
                    showBalance = showBalance.replace("&", "\u00a7").replace("_nm", player.getName()).replace("_bl", String.valueOf(balance));
                    sender.sendMessage(showBalance);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                sender.sendMessage("Player only command.");
            }
        }
        return false;
    }
    
//DB - Getmoney
    public int GetMoney(Player player) throws Exception {
        String tableName = this.plugin.getConfig().getString("tableName");
        String dbNames = this.plugin.getConfig().getString("columnFirst");
        String dbBalance = this.plugin.getConfig().getString("columnSecond");
        
        Connection c = this.getConnection();
        Statement s = c.createStatement();
        ResultSet  res = s.executeQuery("SELECT " + dbBalance +" FROM "+ tableName +" WHERE " + dbNames +" = '"+ player.getName() +"'" );
        res.next();
        return res.getInt(dbBalance);
    }
 类似资料:
  • 文件夹结构是正确的--也就是说,我有一个与node_modules/karma/bin匹配的嵌套文件夹结构,并且我在那个位置有一个名为karma的文件。 我在两个例子中都是从同一个位置开始的。在Visual Studio代码终端或windows命令提示符中运行此命令时,会出现以下错误:“'node_modules'未被识别为内部或外部命令、可操作程序或批处理文件。” 但在GitBash,它工作得很

  • Rexx的最大优势之一是能够创建可重用的脚本。 现在,在组织中,具有可重复使用的脚本是一个很大的附加值,可以节省执行常见重复性任务的时间。 例如,IT组织中的技术团队可能需要具有执行常见日常任务的脚本。 这些任务可以包括与操作系统交互。 然后可以对这些脚本进行编程以处理错误的返回码或错误。 Rexx提供了许多可用于执行此类重复任务的系统命令。 我们来看看Rexx中可用的一些系统命令。 dir 这是

  • 本章将向您介绍JDB的基本命令。 启动会话后,这些命令用于调试程序。 以下是用于调试的命令列表。 名称 描述 help or ? 最重要的JDB命令; 它会显示一个包含简要说明的已识别命令列表。 run 启动JDB并设置必要的断点后,可以使用此命令开始执行并调试应用程序。 cont 在断点,异常或步骤之后继续执行已调试的应用程序。 print 显示Java对象和原始值。 dump 对于原始值,此命

  • 问题内容: 我不知道如何通过JSch Shell通道发送命令。 我这样做,但是不起作用: 然后我读这样的输入: 问题答案: 如果挂起,则意味着您的“ while”永远不会结束(考虑您的代码可能不太可能),或者正在等待其“源”,即线程原因造成的阻塞。 如果没有看到调试信息,我就无法对您的代码进行故障排除。但是作为建议,您尝试过吗?这个想法是将控制台输入传递到“您的”输出,以便您可以“编写”它。为此,

  • 问题内容: 我当前的部分看起来像这样: …这意味着我可以运行来启动服务器。到现在为止还挺好。 但是,我希望能够运行类似的东西并将参数传递给(例如=> )。这可能吗? 问题答案: 编辑: 可以将args传递给npm2.0.0 语法如下: 注意必要的。需要将传递给命令本身的参数和传递给脚本的参数分开。 所以如果你有 那么以下命令将是等效的: => => 为了读取命名参数,最好使用yargs或[mini