À compter du 4 septembre 2017, l'équipe de Minecraft Forge France ne fera plus aucun support pour la 1.7.10. La catégorie Cauldron sera archivée le même jour. Plus d'information ici

[1.7.10 -> 1.12] Synchroniser ses données avec DBSynchronizer
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#11
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.
Répondre
#12
Okay encore merci Sourire
Je suis un membre apprécié et joueur, j'ai déjà obtenu 5 point(s) de réputation.

J'ai et je suis triste d'avoir 12 points d'ICRating

Répondre
#13
Salut !
J'utilise ta création pour la première fois pour faire une sorte de stockage à XP, j'ai fait ce code :
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 :
Code :
[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 ?
Je suis un membre apprécié et joueur, j'ai déjà obtenu 5 point(s) de réputation.

J'ai et je suis triste d'avoir 12 points d'ICRating

Répondre
#14
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.
Répondre
#15
Merci beaucoup !
Je suis un membre apprécié et joueur, j'ai déjà obtenu 5 point(s) de réputation.

J'ai et je suis triste d'avoir 12 points d'ICRating

Répondre
#16
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
Répondre
#17
Oui effectivement. Je n'y avais pas pensé. Indécis
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 ?
Répondre
#18
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à.
Répondre
#19
Ok, c'est bien à ça que je pensais. Merci.
Je vais m'y mettre tout de suite !
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)