Skip to content
Nathanael edited this page Oct 19, 2019 · 13 revisions

Mais ? Comment ça marche ?

Pour utiliser la lib, vous devez l'ajouter à votre projet. Pour ce faire rien de plus simple, vous pouvez passer par gradle. Editez votre build.gradle pour y ajouter:

repositories{
    maven{
        name = "CurseForge"
        url = "https://minecraft.curseforge.com/api/maven/"
    }
}
dependencies {
    compile 'simpledatabasemanager:simpledatabasemanager:VERSION'
    //For example: compile 'simpledatabasemanager:simpledatabasemanager:2.0'
}

Veillez à bien remplacer les "-" dans le numéro de version par des ":". Et c'est tout ! Désormais, passons au code:

Récupérer une base de donnée via son nom

Premièrement, vous allez devoir get la base de donnée via son nom (la création se fait automatiquement si vous gettez une db inexistante), pour ce faire:

Database db = Databases.getDatabase("votre_database");

Nous avons donc créer une instance de notre base de donnée nommée "db".

Stocker des valeurs

C'est bien beau d'avoir une base de donnée, mais elle ne contient pour le moment rien du tout ! Pour lui assigner des valeurs vous pouvez vous y prendre ainsi:

Database db = Databases.getDatabase("votre_database");
db.setString("stringtest", "mon string de test");
db.setInteger("integertest", 3);
db.setDouble("doubletest", 2.0);
db.setFloat("floattest", 47.9f);

Simple ? Non ? En fait, c'est un peu comme les HashMap, ça fonctionne avec un système de valeur, assignée à une clé. Toutes les méthodes de set contienne en premier argument la clé, et en deuxième argument la valeur !

Lire des valeurs

Bon, maintenant qu'on sait stocker des valeurs, il faut bien savoir les récupérer... Sinon le système serait inutile. Et bien c'est tout simple:

Database db = Databases.getDatabase("votre_database");
String str = db.get("stringtest").asString(); // str sera égal à "mon string de test"
int entier = db.get("integertest").asInteger(); // entier sera égal à 3
double d = db.get("doubletest").asDouble(); // d sera égal à 2.0
float f = db.get("floattest").asFloat(); // f sera égal à 47.9f

Bien entendu, le nom des variables dans lesquelles vous lisez les valeurs n'a aucune importance (je préfère le préciser, car avec certains :rolling_eyes:

Stocker des valeurs dans un joueur

Comme je vous l'ai dit, chaque joueur possède une database qui lui est dédiée, vous pouvez donc get cette fameuse database comme ceci:

EntityPlayer player = /* Votre instance d'EntityPlayer */;
Database playerdata = Databases.getPlayerData(player);

Après comme c'est une database comme les autres, vous vous en servez, bah, comme les autres. x)

Synchronisation

Comme dit dans le paragraphe de présentation, SimpleDatabaseManager gère aussi la synchronisation entre le client et le serveur ! Voici comment l'utiliser;

Synchronisation des playerdatas

La synchronisation des playerdata est gérée automatiquement le client à accès en lecture au playerdata du joueur lui étant assigné. Pour accéder DEPUIS LE CLIENT à votre playerdata, c'est comme ça:

DatabaseReadOnly playerData = ClientDatabases.getPersonalPlayerData();

Synchronisation des base de données

Contrairement aux player-datas les base de données ne sont pas synchronisées automatiquement, bah oui ! Le client n'a pas besoin de tout savoir ! (Encore moins si vous y mettez des infos sensibles !) Cela ne veut pas pour autant dire que ce n'est pas possible, c'est simplement vous qui devez choisir quelles base de données synchroniser.

Synchronisation automatique, pour tous les joueurs

Vous pouvez partager une base de donnée à tous les joueurs de la sorte:

SyncedDatabases.add("ma_db"); // Ajouter une db à la synchro automatique.
SyncedDatabases.remove("ma_db"); // Retirer une db de la synchro automatique.

Les base de données présentes seront donc accessible en lecture par tous les joueurs du serveur. Vous pouvez bien entendu comme montré ci-haut retirer une base de donnée de ce programme. Attention toutefois, quand vous retirez une base de donnée, elle est toujours présente sur le client à l'état où elle était avant que vous ne la désynchronisiez.

Synchronisation manuelle d'une base de donnée pour une liste définie de joueur

Pour des raisons de sécurité de vos données, vous voulez rendre accessible une base de donnée par seulement certains joueurs en particulier ? Pas de souci. Vous pouvez envoyer une base de donnée à un joueur comme ceci:

EntityPlayerMP player = /* Votre instance d'EntityPlayerMP */;
Database db = Databases.getDatabase("ma_db");
SyncedDatabases.sendDatabaseToPlayer(db, player);

⚠️ Comme vous le voyez, cette synchronisation est manuelle, si vous voulez qu'elle soit toujours à jour sur le client, envoyez la base de donnée dès que vous lui apportez une modification, afin de garantir au client une base de donnée identique à celle du serveur ⚠️

Lire les données d'une base de donnée synchronisée depuis le client

Depuis le client, vous ne pouvez pas et ne devez surtout pas tenter d'accéder à une base de donnée via Databases.getDatabase(nom). Il faut passer par ClientDatabases.getDatabase(nom). A titre d'exemple:

DatabaseReadOnly db = ClientDatabases.getDatabase("ma_db");

⚠️ Attention, n'essayez pas d'utiliser les méthodes de set de valeurs dans une instance de DatabaseReadOnly, les bases de données client ne sont accessible qu'en lecture. Vous ne pouvez pas écrire dedans ! ⚠️