MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    [1.7.10 -> 1.12] Synchroniser ses données avec DBSynchronizer

    Planifier Épinglé Verrouillé Déplacé Tutoriels des membres
    25 Messages 3 Publieurs 5.8k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • LavaPowerL Hors-ligne
      LavaPower
      dernière édition par

      Salut !
      J’ai fait comme tu as dis.
      Le client se lance sans problème mais pas le serveur qui, d’après les logs, fini par :
      https://pastebin.com/GZZ5cSkt

      Github : http://github.com/LavaPower

      1 réponse Dernière réponse Répondre Citer 0
      • Cl00e9mentC Hors-ligne
        Cl00e9ment
        dernière édition par

        Ok je m’occupe de ça. Je te dis quand j’ai trouvé.
        Est-ce que tu peux me montre ton code ?

        1 réponse Dernière réponse Répondre Citer 0
        • LavaPowerL Hors-ligne
          LavaPower
          dernière édition par

          En fait, j’ai juste fait la base du mon mod (Annotation Mod + Proxy). J’ai juste installer le Synchroniser mais je ne l’utilise pas dans le code.

          Github : http://github.com/LavaPower

          1 réponse Dernière réponse Répondre Citer 0
          • Cl00e9mentC Hors-ligne
            Cl00e9ment
            dernière édition par

            Est-ce que tu peux me faire un screenshot du package explorer pour que je vois comment tu l’as installé ?

            1 réponse Dernière réponse Répondre Citer 0
            • LavaPowerL Hors-ligne
              LavaPower
              dernière édition par

              Le voici : https://puu.sh/wOmxr/5f2ea70ecc.png

              Github : http://github.com/LavaPower

              1 réponse Dernière réponse Répondre Citer 0
              • Cl00e9mentC Hors-ligne
                Cl00e9ment
                dernière édition par

                Je n’ai pas pris en compte le fait que il y a eu beaucoup de changements après la 1.7.10
                Du coup la version de DBSynchronizer pour la 1.7.10 est complètement bugée et même la façon dont on doit l’installer est différente (du coup le tutoriel ne colle pas trop pour la 1.7.10).

                Je vais essayer de régler ça rapidement. Désolé du désagrément.

                1 réponse Dernière réponse Répondre Citer 0
                • LavaPowerL Hors-ligne
                  LavaPower
                  dernière édition par

                  Okay merci, je vais attendre du coup

                  Github : http://github.com/LavaPower

                  1 réponse Dernière réponse Répondre Citer 0
                  • Cl00e9mentC Hors-ligne
                    Cl00e9ment
                    dernière édition par

                    Voilà !
                    En fait pour la 1.7.10 c’est un peu particulié, il y a une version de DBSynchronizer pour les joueurs et une autre pour les développeurs.
                    Je te laisse suivre à nouveau la partie installation du tutoriel car c’est complètement différent pour la 1.7.10.

                    Merci de ta patience !

                    1 réponse Dernière réponse Répondre Citer 0
                    • LavaPowerL Hors-ligne
                      LavaPower
                      dernière édition par

                      Okay merci, je reviens si j’ai des problèmes 🙂

                      EDIT : Ca fonctionne nickel. Petite question : si on met ce mod sur serveur, il faut aussi prendre la version pour joueur ?

                      Github : http://github.com/LavaPower

                      1 réponse Dernière réponse Répondre Citer 0
                      • Cl00e9mentC Hors-ligne
                        Cl00e9ment
                        dernière édition par

                        C’est simple : il faut la version développeur uniquement quand t’es dans ton IDE.
                        Sinon quand tu joue ou quand tu héberge un Minecraft Sever il te faut la version joueur.

                        1 réponse Dernière réponse Répondre Citer 0
                        • LavaPowerL Hors-ligne
                          LavaPower
                          dernière édition par

                          Okay encore merci 🙂

                          Github : http://github.com/LavaPower

                          1 réponse Dernière réponse Répondre Citer 0
                          • LavaPowerL Hors-ligne
                            LavaPower
                            dernière édition par

                            Salut !
                            J’utilise ta création pour la première fois pour faire une sorte de stockage à XP, j’ai fait ce code :

                            
                            public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player)
                            {
                            if(player.isSneaking())
                            {
                            if(player.experienceLevel >= 1)
                            {
                            player.experienceLevel -= 1;
                            Database database = DatabaseGetter.getInstance(Reference.MOD_ID);
                            DBFolder dossier = database.getPersistentFolder();
                            
                            DBFolder xpStock = new DBFolder();
                            dossier.setDBFolder("xpStock", xpStock);
                            xpStock.setInt(player.getDisplayName(), xpStock.getInt(player.getDisplayName()) + 1);
                            xpStock.printInConsole(true);
                            }
                            }
                            }
                            
                            

                            Cependant, comme on peut le voir dans la console :

                            
                            [10:46:21] [Client thread/INFO] [STDOUT]: [com.trcgames.dbSynchronizer.database.DBFolder:printInConsole:211]: (DBFolder) xpStock
                            [10:46:21] [Client thread/INFO] [STDOUT]: [com.trcgames.dbSynchronizer.database.DBFolder:printInConsole:281]: ?(int) Player180 : 1
                            [10:46:21] [Server thread/INFO] [STDOUT]: [com.trcgames.dbSynchronizer.database.DBFolder:printInConsole:211]: (DBFolder) xpStock
                            [10:46:21] [Server thread/INFO] [STDOUT]: [com.trcgames.dbSynchronizer.database.DBFolder:printInConsole:281]: ?(int) Player180 : 1
                            [10:46:21] [Client thread/INFO] [STDOUT]: [com.trcgames.dbSynchronizer.database.DBFolder:printInConsole:211]: (DBFolder) xpStock
                            [10:46:21] [Client thread/INFO] [STDOUT]: [com.trcgames.dbSynchronizer.database.DBFolder:printInConsole:281]: ?(int) Player180 : 1
                            [10:46:21] [Server thread/INFO] [STDOUT]: [com.trcgames.dbSynchronizer.database.DBFolder:printInConsole:211]: (DBFolder) xpStock
                            [10:46:21] [Server thread/INFO] [STDOUT]: [com.trcgames.dbSynchronizer.database.DBFolder:printInConsole:281]: ?(int) Player180 : 1
                            
                            

                            Le nombre n’augmente pas.

                            Pouvez-vous m’aider ?

                            Github : http://github.com/LavaPower

                            1 réponse Dernière réponse Répondre Citer 0
                            • Cl00e9mentC Hors-ligne
                              Cl00e9ment
                              dernière édition par Cl00e9ment

                              Bonjour,
                              Tu recréé à chaque fois un nouveau DBFolder (xpStock). C’est donc normal que son contenu soit reset à chaque fois. Il faut donc que tu remplaces :

                              DBFolder xpStock = new DBFolder();
                              dossier.setDBFolder("xpStock", xpStock);
                              

                              par :

                              DBFolder xpStock = dossier.getDBFolder ("xpStock");
                              

                              Petit bonus :
                              Si le persistentFolder ne contient pas encore le DBFolder “xpStock” au moment de l’appel de getDBFolder() il créera un nouveau DBFolder qu’il nommera “xpStock”, le stockera et te le retournera.
                              Donc tu n’as pas de souci à te faire de ce côté là.

                              Bonne journée.

                              1 réponse Dernière réponse Répondre Citer 0
                              • LavaPowerL Hors-ligne
                                LavaPower
                                dernière édition par

                                Merci beaucoup !

                                Github : http://github.com/LavaPower

                                1 réponse Dernière réponse Répondre Citer 0
                                • BrokenSwingB Hors-ligne
                                  BrokenSwing Moddeurs confirmés Rédacteurs
                                  dernière édition par

                                  D’après ce que j’ai compris, si un changement de données s’effectue sur le client, alors les données sont aussi modifiés sur le serveur. Ça peut être utile dans certains cas mais dans la majorité des cas cela va donner une faille exploitable par les joueurs pour tricher

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • Cl00e9mentC Hors-ligne
                                    Cl00e9ment
                                    dernière édition par

                                    Oui effectivement. Je n’y avais pas pensé. 😕
                                    Peut être que je peux régler ce problème en faisant en sorte que le serveur doit au préalable autoriser tel ou tel client à accéder à tel ou tel donnée. De ce fait les clients n’auront accès qu’aux données dont le server leur a autorisé l’accès. Les autres données seront disponibles qu’en lecture seule.

                                    Qu’en pensez-vous ?

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • BrokenSwingB Hors-ligne
                                      BrokenSwing Moddeurs confirmés Rédacteurs
                                      dernière édition par

                                      Tu fais un système d’approbation du changement de donnée. Une fonction du style :

                                      
                                      public boolean canClientChangeData(EntityPlayerMP player, DBFolder currentDatas, DBFolder changedDatas)
                                      
                                      

                                      En gros par défaut ça retourne toujours faux (parce qu’il vaut mieux interdire l’écriture des données par le client par défaut). Si la fonction renvoie vrai les données actuelles sont remplacées par les nouvelles, sinon c’est les anciennes qui restent. Au niveau de l’emplacement de la fonction je te laisse l’intégrer comme bon te semble. Tu peux tout à fait mettre la fonction dans le DBFolder en changeant le prototype, enfin bon, voilà.

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • Cl00e9mentC Hors-ligne
                                        Cl00e9ment
                                        dernière édition par

                                        Ok, c’est bien à ça que je pensais. Merci.
                                        Je vais m’y mettre tout de suite !

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • LavaPowerL Hors-ligne
                                          LavaPower
                                          dernière édition par

                                          Salut, je suis devant un nouveau problème. Je veux me servir de DBSynchronizer pour faire une sorte de cooldown sur mon block :
                                          Voici la classe de mon bloc où on bloque l’activation si le cooldown n’est pas fini : https://pastebin.com/K0kGvmjD
                                          Et la classe de ma Tile Entity où le cooldown descend : https://pastebin.com/xwBZzxBA

                                          Le problème c’est que le cooldown ne descend jamais. Le bloc me dit toujours d’attendre 1 seconde (sauf la première fois)

                                          Github : http://github.com/LavaPower

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • Cl00e9mentC Hors-ligne
                                            Cl00e9ment
                                            dernière édition par

                                            Alors je vois déjà plusieurs problèmes :

                                            Tu génère un nom à tes cooldows en fonction de la position du bloc, sauf que selon ta façon de faire, un bloc situé en (x:10 y:63 z:2) génèrera le même nom qu’un bloc situé en (x:106 y:3 z:2). Je te conseile donc de séparer tes coordonnées par un espace:

                                            String key = this.xCoord +" "+ this.yCoord +" "+ this.zCoord;
                                            

                                            Ensuite je vois que tu met plusieurs fois le même bout de code qui sert à générer la clé. Utilise ce bout de code qu’une seul fois : stock la valeur dans une variable et le tour est joué, c’est plus optimisé et plus propre.

                                            Dans ta classe TE, ton if (je ne parle pas du else) ne sert à rien, en effet, si le cooldown est égal à 0 alors tu le met à 0.

                                            Donc je te laisse régler ça. Ensuite tu pourra mettre un System.out.println (“test”); dans la méthode updateEntity() pour vérifier qu’elle est bien appelée.

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 2 / 2
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB