Arquivado [TUTORIAL] Como utilizar MySQL em seus plugins parte 2

Discussão em 'Dicas e Tutoriais' iniciado por Gabriel8579, 16 Novembro 2017.

?

Esse tutorial foi útil?

  1. Sim

    100.0%
  2. Não

    0 voto(s)
    0.0%
  1. Gabriel8579
    Offline

    Gabriel8579 Veterano Veterano VIP Sabotador.com VIP Sabotador.com

    Afiliado:
    18 Janeiro 2016
    Mensagens:
    429
    Sexo:
    Masculino
    Avaliações:
    +248 / -1
    Apelido no Minecraft:
    Gabriel8579
    Ok, estou de volta hehe

    Bom já fechamos nossa classe de register a unica coisa que fiz a mais foi adicionar uma mensagem para o player dizendo que a conta foi criada...
    Aqui temos ela completa
    Código (Forge Crash):
    package tutorialGM;

    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;

    public class Registrar implements CommandExecutor{

        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(!(sender instanceof Player)) {
                sender.sendMessage("Somente players!!!!!");
                return true;
            }
            Player p = (Player)sender;
            try {
                Statement s = Main.plugin.c.createStatement();
                ResultSet res = s.executeQuery("SELECT * FROM users WHERE Nome = '" + p.getName() + "';");
             
                if(res.next()) {
                    p.sendMessage("Você já está registrado!");
                    return true;
                }
                if(args.length != 2) {
                    p.sendMessage("Use /registrar senha repetir-senha");
                    return true;
                }
                String s1 = args[0];
                String s2 = args[1];
                if(!s1.equals(s2)) {
                    p.sendMessage("Você deve repetir a senha corretamente");
                    return true;
                }
             
                MessageDigest alg = MessageDigest.getInstance("MD5");
                byte digerir[] = alg.digest(s1.getBytes("UTF-8"));
                StringBuilder hex = new StringBuilder();
                for (byte b : digerir) {
                    hex.append(String.format("%02X", 0xFF & b));
                }
                String senha = hex.toString();
             
             
             
                s.execute("INSERT INTO users (Nome, Senha, UUID, ID) VALUES ('" + p.getName() + "', '" + senha + "', '" + p.getUniqueId().toString() + "', NULL);");
             
                p.sendMessage("Sua conta foi criada com Sucesso!!");
             
             
             
             
            } catch (SQLException | NoSuchAlgorithmException | UnsupportedEncodingException e) {
                e.printStackTrace();
            }  
            return false;
        }
     
     
     

    }
     

    Ok agora vamos para o Login... já crie sua classe aí :)
    e adicione as mesmas coisas chatas de sempre (onCommand, CommandExecutor e essas bagaças aí)
    Bom a sintaxe desse comando será /login senha
    Então já coloque a condição do arg ser diferente de 1

    Após isso vamos colocar o mesmo try com o catch de SQLException de sempre
    Ok, definiremos o Statement e o ResultSET exatamente como na classe Registrar
    até a querry será a mesma

    feito isso verificamos se o usuário existe ou não através do res.next
    Caso ele exista então prosseguiremos, bom, precisamos verificar se a senha que o player digitou é a mesma que está em nosso banco de dados, porém não podemos descriptografar a senha que está lá pois é um hash
    Então teremos que criptografar a senha que o player digitou no login para ver se bate com a do banco de dados, bora lá​
    Código (Forge Crash):
                MessageDigest alg = MessageDigest.getInstance("MD5");
                byte digerir[] = alg.digest(args[0].getBytes("UTF-8"));
                StringBuilder hex = new StringBuilder();
                for (byte b : digerir) {
                    hex.append(String.format("%02X", 0xFF & b));
                }
                String senha = hex.toString();
    Após isso criaremos um novo ResultSET para podermos fazer outra querry comparando esta senha com a do banco de dados
    Então,
    Código (Forge Crash):
    ResultSet res2 = s.executeQuery("SELECT * FROM users WHERE Nome = '" + p.getName() + "' AND Senha = '" + senha + "';");
    Agora verificamos se elas batem pelo res2.next()

    Código (Forge Crash):
    if(res2.next()) {
                    p.sendMessage("Você se logou com sucesso!!!!");
                } else {
                    p.kickPlayer("Você errou a senha");
                }
    Agora é só registrar os dois comandos na Main e registrar tmb no plugin.yml

    Feito isso vamos configurar nossos dados do MySQL
    [​IMG]
    Clique em cima de sua tabela e la em cima já conseguiremos obter o host e o nome do banco de dados
    Agora vamos ao painel de controle do XAMPP
    [​IMG]

    Clique em config do MySQL e clique em my.ini após isso irá abrir o seu editor de texto padrãoe nela ja teremos a porta e a senha
    [​IMG]
    repare no # isso significa que a linha está comentada e a senha está nula... retire este jogo da velha e troque a senha ficando assim
    [​IMG]

    Agora o user é o mais facil hehe no nosso caso do XAMPP é root

    Pronto agora temos todas as informações para iniciar o plugin... vamos exportar (ah segue abaixo a classe do login e da main)
    Código (Forge Crash):
    package tutorialGM;

    import java.sql.Connection;
    import java.sql.SQLException;

    import org.bukkit.plugin.java.JavaPlugin;

    import com.huskehhh.mysql.mysql.MySQL;

    public class Main extends JavaPlugin {

        public static Main plugin = null;

        String host = (String) getConfig().get("config.hostSql");
        String user = (String) getConfig().get("config.userSql");
        String pass = (String) getConfig().get("config.passSql");
        String db = (String) getConfig().get("config.dbSql");
        String port = (String) getConfig().get("config.portaSql");
     

        MySQL MySQL = new MySQL(host, port, db, user, pass);
        public Connection c = null;

        @Override
        public void onEnable() {
            plugin = this;
            saveConfig();
            getCommand("login").setExecutor(new Login());
            getCommand("registrar").setExecutor(new Registrar());
            try {
                c = MySQL.openConnection();
            } catch (SQLException | ClassNotFoundException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onDisable() {
            c = null;
            plugin = null;
        }

    }
     
    Código (Forge Crash):
    package tutorialGM;

    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;

    public class Login implements CommandExecutor{

        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(!(sender instanceof Player)) {
                sender.sendMessage("Somente players!!!!!");
                return true;
            }
            Player p = (Player)sender;
            if(args.length != 1) {
                p.sendMessage("Use /login senha");
                return true;
            }
         
            try {
                Statement s = Main.plugin.c.createStatement();
                ResultSet res = s.executeQuery("SELECT * FROM users WHERE Nome = '" + p.getName() + "';");
             
                if(!res.next()) {
                    p.sendMessage("Você ainda não se registrou. Use /registrar senha senha");
                    return true;
                }
             
                MessageDigest alg = MessageDigest.getInstance("MD5");
                byte digerir[] = alg.digest(args[0].getBytes("UTF-8"));
                StringBuilder hex = new StringBuilder();
                for (byte b : digerir) {
                    hex.append(String.format("%02X", 0xFF & b));
                }
                String senha = hex.toString();
             
                ResultSet res2 = s.executeQuery("SELECT * FROM users WHERE Nome = '" + p.getName() + "' AND Senha = '" + senha + "';");
             
                if(res2.next()) {
                    p.sendMessage("Você se logou com sucesso!!!!");
                } else {
                    p.kickPlayer("Você errou a senha");
                }
             
            } catch (SQLException | UnsupportedEncodingException | NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
         
            return false;
        }
     
     

    }
     

    Agora vamos exportar o plugin e já deixar na pasta plugins do server (usei o SPIGOT 1.8.8)
    Agora executamos o server (vai dar erro... eu sei é proposital, mais vai criar a pasta do plugin)
    Então feixe o server e vá para a pasta que criou
    Lemb[​IMG]
    Crie se não tiver criado a config.yml
    e coloque
    [​IMG]
    Código (Forge Crash):
    config:
      hostSql: localhost
      userSql: root
      passSql: teste123
      dbSql: tutorialgamemods
      portaSql: '3306'
    Lembrando que tem q trocar os valores pelos seus, certo agora é só iniciar o server novamente... não vou testar tudo agora porque estou sem tempo mais deve estar tudo funfando :wink:

    Lembrando para usar a source deve criar a mesma tabela do jeito que criei
    Source aqui
     
    • Útil Útil x 2
    Última edição: 17 Novembro 2017
  2. Lucas_Gamer13
    Offline

    Lucas_Gamer13 Veterano Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    17 Novembro 2015
    Mensagens:
    1,697
    Sexo:
    Masculino
    Avaliações:
    +1,607 / -0
    Apelido no Minecraft:
    Lucas_gamer13
    Tem como apagar tudo do banco de dados? Tipo, se eu quiser dar um reset na contas dos players no meu sv, terei que apagar um por um ou tem como fazer isso em java?
     
  3. Mr_Bilbis
    Offline

    Mr_Bilbis Líder dos Ajudantes, de Publicidade e do Discord Equipe GameMods Criador de Conteúdo Moderador do Discord Ajudante do Servidor Construtor Veterano VIP Sabotador.com VIP Sabotador.com VIP Industrial

    Afiliado:
    23 Novembro 2014
    Mensagens:
    2,884
    Avaliações:
    +2,247 / -1
    Apelido no Minecraft:
    Mr_Bilbis
    Código (SQL):
    DROP TABLE tabela
    Isso irá apagar a tabela.
     
    • Útil Útil x 1
  4. Gabriel8579
    Offline

    Gabriel8579 Veterano Veterano VIP Sabotador.com VIP Sabotador.com

    Afiliado:
    18 Janeiro 2016
    Mensagens:
    429
    Sexo:
    Masculino
    Avaliações:
    +248 / -1
    Apelido no Minecraft:
    Gabriel8579
    Isso cria um statement n precisa da resultset dai da s.execute("DROP TABLE nome");
     
  5. WizardlyBump17
    Offline

    WizardlyBump17 Membro Ativo

    Afiliado:
    11 Março 2018
    Mensagens:
    696
    Sexo:
    Masculino
    Avaliações:
    +209 / -2
    Apelido no Minecraft:
    WizardlyBump17
    Desculpe estar ressuscitando esse tópico mas esse comando apaga a tabela, ou seja, você vai ter q criar ela dnv. Pra apagar só os dados, é só dar esse comando:
    Código (Forge Crash):

    DELETE FROM tabela;
     
     

Compartilhe esta Página