[1.7.10 -> 1.12] DBSynchronizer - La synchronisation facile !



  • titre

    Bonjour à toutes et à tous, je suis fier de vous présenter la library DBSynchronizer !

    DBSynchronizer est un mod, mais un mod fait pour vous, les développeurs ! En effet cette library va s'occuper de la synchronisation de données entre le(s) client(s) et le server. De ce fait, vous n'aurez plus à gérer les packets, une tâche pas si simple que ça notamment quand on a une GUI avec pleins de boutons qui interagissent non seulement entre-eux mais aussi avec le server et les clients (je parle en connaissance de cause).

    Non pouvons prendre un exemple :
    Imaginez que vous créez un mod de magie que nous allons appeler Magikum et que vous avez besoin de stocker les données suivantes :

    • Le nombre de point de mana de chaque joueurs
    • Le niveau en magie de chaque joueurs : “apprenti”, “magicien” ou “grand sorcier”
    • La position des orbes qui sera reset a chaque fois qu'on relancera le monde (parce-que pourquoi pas ?)

    Imaginez maintenant que vous avez besoin d'accéder à ces données n'importe où (que ce soit sur un client ou sur le server) pour pouvoir les modifier.
    Il faudra donc synchroniser toutes ces données afin que le serveur et chaque clients puissent y accéder en temps réel et les modifier.
    Mais il ne faut pas oublier qu'il faudra sauvegarder dans la worldsave le nombre de points de mana de chaque joueurs et leur niveau en magie.

    Ça tombe bien car DBSynchronizer peut faire tout ça quasiment automatiquement !

    Voici les liens vers la page de téléchargement et vers un tutoriel pour savoir comment utiliser la library. Vous pouvez également obtenir les sources sur Github. Bonne chance !

    télécharger
    tutoriel

    Je serais très reconnaissant que vous me fassiez part de chaque bug que vous rencontreriez en utilisant ma library. Au contraire, si elle fonctionne bien je serais aussi content que vous me le dîtes.
    Merci !



  • Un bug majeur a été découvert sur les versions de DBSynchronizer suivantes :

    • 1.0.0 pour mc 1.7.10
    • 1.1.0 pour mc 1.8.9
    • 1.2.0 pour mc 1.9.4
    • 1.3.0 pour mc 1.10.2
    • 1.4.0 pour mc 1.11.2
    • 1.5.0 pour mc 1.12

    -> lorsque l'on tente d'obtenir une base de données depuis un client en multijoueur, un NullPointerException est lancé avec le message "You can't get a database instance when no world is loaded.".

    Vous devez donc télécharger les nouvelles versions qui sont les suivantes (je vois encore des personnes télécharger les anciennes versions alors qu'il y a marqué "bug majeur" à côté) :

    • 1.0.0.1 pour mc 1.7.10
    • 1.1.0.1 pour mc 1.8.9
    • 1.2.0.1 pour mc 1.9.4
    • 1.3.0.1 pour mc 1.10.2
    • 1.4.0.1 pour mc 1.11.2
    • 1.5.0.1 pour mc 1.12

    J'en profite pour vous dire que les sources de la library sont désormais disponible sur github.



  • Il faut refaire le mod où on utilise DBSynchronizer pour la MAJ ?



  • @'LavaPower':

    Il faut refaire le mod où on utilise DBSynchronizer pour la MAJ ?

    Il faut juste réinstaller DBSynchronizer mais avec la nouvelle version. Pas besoin de toucher au code.



  • Ah cool ! Merci 😉



  • Un autre bug a été découvert et cette fois encore il concerne toutes les versions de DBSynchronizer précédentes :
    Quand on fait un getDBFolder() avec une clé qui n'est pas encore stockée un nouveau DBFolder sera créé, stocké et renvoyé (ce qui est normal) mais ce DBFolder ne sera pas synchronisé tant que l'on ne relancera pas Minecraft (ou le serveur pour le multi).

    Ce bug est corrigé dans les versions suivantes :

    • 1.0.0.2 pour mc 1.7.10
    • 1.1.0.2 pour mc 1.8.9
    • 1.2.0.2 pour mc 1.9.4
    • 1.3.0.2 pour mc 1.10.2
    • 1.4.0.2 pour mc 1.11.2
    • 1.5.0.2 pour mc 1.12

    Désolé de ne pas avoir découvert ça plus tôt (avant la première release).
    Une autre mise à jour sera bientôt disponible mais cette fois avec des vrais changements et pas juste des correctifs (en espérant que ça n'amènera pas d'autres bugs 😄 ).



  • Salut,

    Je me posais une question :
    Admettons que je créé un dossier et que je get une clé. Si je n'ai pas set cette clé au début, elle vaut quoi ?

    Exemple de code (je ne sais pas quoi mettre à la place de ??) :

    
    Database database = DatabaseGetter.getInstance(Reference.MOD_ID);
    DBFolder dossier = database.getPersistentFolder();
    DBFolder xpStock = dossier.getDBFolder("Folder");
    if(xpStock.getInt("blabla") == ??)
    {
       player.addChatMessage(new ChatComponentText("Clé inconnu"));
    }
    
    


  • Si tu essayes d'obtenir une donnée qui n'est pas stockée, tu aura comme valeur de retour :

    BlockPos : null
    boolean : false
    byte : 0
    char : 0x00
    DBFolder : new DBFolder () (qui sera stocké)
    double : 0D
    float : 0F
    int : 0
    long : 0L
    short : 0
    String : ""

    Normalement tout ça tu l'as dans la javadoc (si tu passe ton curseur sur getInt() par exemple).



  • Okay, c'est bien ce que je pensais.