Problème avec MySQL



  • Bonjour,

    J'ai récemment crée un GUI pour faire un ATM.
    J'ai relié mon mod à une base MySQL pour récupérer les valeurs dont j'ai besoin.

    Tout fonctionne très bien quand je debug sur Eclipse, mais lorsque j'exporte le mod et que je le met sur mon jeu, il n'est pas capable de récupérer les valeurs sur la base (ça reste à 0)

    Que faut-il faire pour que ca fonctionne ?

    Voici les deux classes concernées :

    :::

    package fr.mod.gui;
    
    public class GuiATM extends GuiScreen implements IGuiHandler {
    
    private GuiTextField textfield1;
    
    int guiWidth = 100;
    int guiHeight = 150;
    
    @Override
    public void drawScreen(int x, int y, float ticks) {
    int guiX = (width - guiWidth) / 2;
    int guiY = (height - guiHeight) / 2;
    GL11.glColor4f(1, 1, 1, 1);
    drawDefaultBackground();
    mc.renderEngine.bindTexture(new ResourceLocation(Mod.MODID, "textures/gui/GuiATM.png"));
    drawTexturedModalRect(guiX, guiY, 0, 0, guiWidth, guiHeight);
       fontRendererObj.drawString("ATM", guiX + 5, guiY + 2, 0xF8F8FF);
       fontRendererObj.drawString("Liquide " + MySQL.liquide + " $", guiX + 5, guiY + 25, 0xF8F8FF);
       fontRendererObj.drawString("Banque " + MySQL.banque + " $", guiX + 5, guiY + 35, 0xF8F8FF);
       textfield1.drawTextBox();
    super.drawScreen(x, y, ticks);
    
    }
    
    @Override
    public void initGui() {
    MySQL.LoadAccount(Minecraft.getMinecraft().thePlayer.getDisplayName());
    int guiX = (width - guiWidth) / 2;
    int guiY = (height - guiHeight) / 2;
       super.initGui();
       this.buttonList.add(new GuiButton(0, guiX + 6, guiY + 75 + 5, 88, 20, "Retirer"));
       this.buttonList.add(new GuiButton(1, guiX + 6, guiY + 95 + 5, 88, 20, "Déposer"));
    
       this.textfield1 = new GuiTextField(this.fontRendererObj, this.width / 2 - 42, this.height / 2 -20, 85, 20);
       textfield1.setMaxStringLength(10);
       textfield1.setText("");
       textfield1.setFocused(true);
    }
    
    @Override
    protected void actionPerformed(GuiButton B)
    {
     if(B.id == 0)
     {
             if(!(textfield1.getText() == "")) {
                 int valeur = Integer.parseInt(textfield1.getText());
                 if(valeur <= MySQL.banque) {
                 Minecraft.getMinecraft().displayGuiScreen(null);
                 Minecraft.getMinecraft().thePlayer.sendChatMessage("/atm1 " + textfield1.getText());
                 }
             }
    
              }
    
            }
    
    @Override
    protected void keyTyped(char typedChar, int KeyCode) {
    if(KeyCode == Keyboard.KEY_ESCAPE || KeyCode == Keyboard.KEY_BACK || KeyCode == Keyboard.KEY_0  || KeyCode == Keyboard.KEY_1 || KeyCode == Keyboard.KEY_2 || KeyCode == Keyboard.KEY_3 || KeyCode == Keyboard.KEY_4 || KeyCode == Keyboard.KEY_5 || KeyCode == Keyboard.KEY_6 || KeyCode == Keyboard.KEY_7 || KeyCode == Keyboard.KEY_8 || KeyCode == Keyboard.KEY_9) {
    textfield1.textboxKeyTyped(typedChar, KeyCode);
    super.keyTyped(typedChar, KeyCode);
    }
    
    }
    
    @Override
    protected void mouseClicked(int mouseX, int mouseY, int mouseButton) {
    textfield1.mouseClicked(mouseX, mouseY, mouseButton);
    super.mouseClicked(mouseX, mouseY, mouseButton);
    }
    
    @Override
    public void updateScreen() {
    textfield1.updateCursorCounter();
    }
    
    @Override
    public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
    // TODO Auto-generated method stub
    return null;
    }
    
    @Override
    public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
    // TODO Auto-generated method stub
    return null;
    }
    }
    
    

    :::

    :::

    package fr.mod.network;
    
    import net.minecraft.client.entity.EntityClientPlayerMP;
    
    public class MySQL {
    
    public static int liquide;
    public static int banque;
    
    public static void LoadAccount(String pseudo) {
    
    String url = "x";
    String user = "x";
    String pass = "x";
    
    Connection conn=null;
    try {
    Class.forName("com.mysql.jdbc.Driver");
    conn=DriverManager.getConnection(url,user,pass);
    
    } catch (Exception e) {
    System.out.println("Echec");
    e.printStackTrace();
    }
    
    try {
    Statement st=conn.createStatement();
          ResultSet resultat=st.executeQuery("SELECT liquide,banque from comptes where pseudo ='" + pseudo + "'");
          while(resultat.next()) {
    liquide=resultat.getInt(1);
    banque=resultat.getInt(2);
    System.out.println(liquide);
    System.out.println(banque);
    }
    
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    
    }
    
    

    :::

    Merci d'avance !


  • Moddeurs confirmés Rédacteurs Administrateurs

    Salut,
    Est-ce qu'il y a une erreur dans la console ?

    Aussi, ta conception est mauvaise, le client ne devrait pas accéder à la base.
    C'est au serveur de le faire, puis il doit envoyer les valeurs au client via un paquet.



  • @'robin4002':

    Salut,
    Est-ce qu'il y a une erreur dans la console ?

    Aussi, ta conception est mauvaise, le client ne devrait pas accéder à la base.
    C'est au serveur de le faire, puis il doit envoyer les valeurs au client via un paquet.

    Étant donné que j’exporte le mod, j’ai pas d’accès à la console sur mon jeu.
    Par contre, quand je regarde la console sur Eclipse y’a aucune erreur et tout fonctionne, c’est que quand je l’exporte que ça deconne et ça ne marche ni en solo ni en multi.


  • Moddeurs confirmés Rédacteurs Administrateurs

    fichier latest.log dans le dossier .minecraft/logs pour avoir les logs en prod.



  • @'robin4002':

    fichier latest.log dans le dossier .minecraft/logs pour avoir les logs en prod.

    Y'a pas l'air d'y avoir grand chose, quand j'effectue la commande y'a ça :

    :::

    [23:08:53] [Server thread/INFO]: HyperKut[local:E:85e2c1f9] logged in with entity id 329 at (-250.59667834524106, 70.0, 118.71005554112752)
    [23:08:53] [Server thread/INFO]: HyperKut a rejoint la partie
    [23:08:55] [Server thread/WARN]: Can't keep up! Did the system time change, or is the server overloaded? Running 2128ms behind, skipping 42 tick(s)
    [23:08:57] [Server thread/INFO]: Saving and pausing game…
    [23:08:57] [Server thread/INFO]: Saving chunks for level 'Nouveau monde'/Overworld
    [23:08:57] [Server thread/INFO]: Saving chunks for level 'Nouveau monde'/Nether
    [23:08:57] [Server thread/INFO]: Saving chunks for level 'Nouveau monde'/The End
    [23:09:09] [Server thread/INFO]: Saving and pausing game…
    [23:09:09] [Server thread/INFO]: Saving chunks for level 'Nouveau monde'/Overworld
    [23:09:09] [Server thread/INFO]: Saving chunks for level 'Nouveau monde'/Nether
    [23:09:09] [Server thread/INFO]: Saving chunks for level 'Nouveau monde'/The End
    [23:09:50] [Server thread/INFO]: Saving and pausing game…
    [23:09:51] [Server thread/INFO]: Saving chunks for level 'Nouveau monde'/Overworld
    [23:09:51] [Server thread/INFO]: Saving chunks for level 'Nouveau monde'/Nether
    [23:09:51] [Server thread/INFO]: Saving chunks for level 'Nouveau monde'/The End
    

    :::


  • Moddeurs confirmés Rédacteurs Modérateurs Administrateurs

    Il y a plusieurs problèmes :

    • comme Robin l'a indiqué, seul le serveur devrait avoir accès à la BDD.
    • ta méthode pour récupérer les données grâce aux pseudo des joueurs est foireuse, c'est le UUID qui devrait être utiliser, il est le seul qui ne peut pas être modifier par le joueur.

    Peut-on voir ton build.gradle ?



  • @'Superloup10':

    Il y a plusieurs problèmes :

    • comme Robin l'a indiqué, seul le serveur devrait avoir accès à la BDD.
    • ta méthode pour récupérer les données grâce aux pseudo des joueurs est foireuse, c'est le UUID qui devrait être utiliser, il est le seul qui ne peut pas être modifier par le joueur.

    Peut-on voir ton build.gradle ?

    Oui pour les pb je sais c'est pas sécurisé, mais c'était juste histoire de tester si ça fonctionnait.

    Voilà mon build.gradle :

    :::

    buildscript {
       repositories {
           mavenCentral()
           maven {
               name = "forge"
               url = "http://files.minecraftforge.net/maven"
           }
           maven {
               name = "sonatype"
               url = "https://oss.sonatype.org/content/repositories/snapshots/"
           }
       }
       dependencies {
           classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
       }
    }
    
    apply plugin: 'forge'
    
    version = "1.0"
    group= "com.yourname.modid" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
    archivesBaseName = "modid"
    
    minecraft {
       version = "1.7.10-10.13.4.1558-1.7.10"
       runDir = "eclipse"
    }
    
    dependencies {
       // you may put jars on which you depend on in ./libs
       // or you may define them like so..
       //compile "some.group:artifact:version:classifier"
       //compile "some.group:artifact:version"
    
       // real examples
       //compile 'com.mod-buildcraft:buildcraft:6.0.8:dev'  // adds buildcraft to the dev env
       //compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env
    
       // for more info…
       // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
       // http://www.gradle.org/docs/current/userguide/dependency_management.html
    
    }
    
    processResources
    {
       // this will ensure that this task is redone when the versions change.
       inputs.property "version", project.version
       inputs.property "mcversion", project.minecraft.version
    
       // replace stuff in mcmod.info, nothing else
       from(sourceSets.main.resources.srcDirs) {
           include 'mcmod.info'
    
           // replace version and mcversion
           expand 'version':project.version, 'mcversion':project.minecraft.version
       }
    
       // copy everything else, thats not the mcmod.info
       from(sourceSets.main.resources.srcDirs) {
           exclude 'mcmod.info'
       }
    }
    
    

    :::


  • Moddeurs confirmés Rédacteurs Administrateurs

    À mon avis ça ne fonctionne pas en dehors d'eclipse car tu n'as pas la bibliothèque mysql-connector.



  • @'robin4002':

    À mon avis ça ne fonctionne pas en dehors d'eclipse car tu n'as pas la bibliothèque mysql-connector.

    Comment la mettre ?



  • L'intégrer à ton mod serait le mieux(ou alors tu la met dans le dossier mods mais fml va pas être content).



  • @'AymericRed':

    L'intégrer à ton mod serait le mieux(ou alors tu la met dans le dossier mods mais fml va pas être content).

    Je l’intègre comment ? Parce que je l’ai déjà intégré au projet sur Eclipse pour pouvoir me connecter à la BDD.
    Sinon oui je vais essayer de le glisser dans le dossier mods je verrai bien


  • Moddeurs confirmés Rédacteurs Modérateurs Administrateurs

    Dans le build.gradle, tu mets

    compile 'mysql:mysql-connector-java:5.1.38'
    

    tu dois le mettre dans la partie dependencies.


Log in to reply