-
Hey merci de ton aide j’aimerais savoir si tu avais un exemple de code ??
-
t’as juste a créer un fichier et a écrire dedans…
puis si il existe alors tu le lis sinon tu en créer unFile f = new File("./json_stats.json"); // The file will be located into minecraft root directory ('.minecraft/json_stats.json') or server root directory (the directory that contains your minecraft server jar file) if (f.exists()) { // Read file... } else { // Create default empty file or other things } -
Merci de t’es réponse ainsi que du bout de code afin de m’orienter ^^
-
Pour la solutin voici mon code afin de vérifier si cela fonctionne correctement
package fr.silvertaurus.PlayerStats; import net.minecraft.client.Minecraft; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.io.*; public class CreateJsonPlayerStats { File f = new File("./Test.json"); @SubscribeEvent public void CreateJsonStats(EntityJoinWorldEvent e) throws IOException { if(e.getEntity().equals(Minecraft.getMinecraft().player)) { if (f.exists()) { System.out.println("Le fichier "+f.getName()+" existe déjà !"); System.out.println("Chemin d'accès : "+f.getPath()); return; } else { System.out.println("Le fichier "+f.getName()+" n'existe pas !" ); System.out.println("Création du fichier ..." ); f.createNewFile(); ///!\ Ceci sera à supprimer cela permet de bien vérifier les étapes si la création du fichier vide ///!\ est un succès après vous le remplissez à la suite du f.createNewFile(); if(f.exists()) { System.out.println("Création du fichier réussie !" ); System.out.println("Chemin d'accès : "+f.getPath()); return; } else { System.out.println("Création du fichier échouer !" ); return; } } } } } -
attention ton code fonctionnera pas coté server ca va faire crash le server, il faut que ton event doit enregistrer client only ! si ce n’est pas deja fait
Minecraft etant une class Client le serveur ne la possede donc pas
et je vois pas l’interet du check de l’entity c’est useless etandonné que cet event est appelé pour chaque joueur venant de rejoindre le monde
deplus les noms de method/fonction ne commence jamais par un maj en java
public void CreateJsonStats(EntityJoinWorldEvent e)=> Java Code Convention <=
et aussi a quoi sert ton systeme tu veux stocké quoi en fait ?
-
Salut j’aimerais faire un system de leveling avec des statistiques, genre force, Vitesse minage, Armur, Agiliter etc. Mais là je n’arrive pas a Créer, lire, Modifier un json, dans mon développement d’applications j’utiliser [javax] mais là quand j’essaye avec il n’y a pas [javax] donc pourrais-tu m’aider si jamais tu as un <snipet> de méthode pour l’utilisation de JSON ?
Ps: pour l’enregistrement de mes évenements j’utilise MinecraftForge
L’alternative trouver :
package fr.silvertaurus.PlayerStats; import com.google.gson.JsonObject; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.io.*; import java.util.ArrayList; public class CreateJsonPlayerStats { @SubscribeEvent public void CreateJsonStats(EntityJoinWorldEvent e) throws IOException { if(e.getEntity().equals(Minecraft.getMinecraft().player)) { EntityPlayer p = Minecraft.getMinecraft().player; File folder = new File("./JsonStats"); if(folder.exists()) { File[] listFile = folder.listFiles(); ArrayList<String> filePlayer = new ArrayList<>(); for(File f : listFile) { filePlayer.add(f.getName()); } if(filePlayer.contains(p.getUniqueID()+".json")) { System.out.println("Un fichier pour ce joueur éxiste déjà !"); } else { this.CreateJson(p, p.getUniqueID().toString()); } } else { folder.mkdir(); this.CreateJson(p, p.getUniqueID().toString()); System.out.println("Création du fichier de stats du joueur "+p.getName()); } } } public void CreateJson(EntityPlayer p, String fileName) throws IOException { File f = new File("./JsonStats/"+fileName+".json"); String jsonFilePath = f.getPath(); JsonObject json = new JsonObject(); json.addProperty("PlayerName", p.getName()); json.addProperty("Level", "0"); json.addProperty("Experience", "0"); FileWriter file = new FileWriter(jsonFilePath); file.write(String.valueOf(json)); file.close(); } }Normalement j’aurais du faire cela si le [javax] fonctionne
public void CreateJson(String fileName) throws IOException { File f = new File("./JsonStats/"+fileName+".json"); String jsonFilePath = f.getPath(); JsonObject json = new JsonObject(); json.put("level", 0); try(FileWriter file = new FileWriter(jsonFilePath)) { file.write(Jsoner.prettyPrint(json.toJson())); file.flush(); } }@SpyMan a dit dans [1.12] Obtenir chemin dossier resources pour JavaIO :
attention ton code fonctionnera pas coté server ca va faire crash le server, il faut que ton event doit enregistrer client only ! si ce n’est pas deja fait
Minecraft etant une class Client le serveur ne la possede donc pas
et je vois pas l’interet du check de l’entity c’est useless etandonné que cet event est appelé pour chaque joueur venant de rejoindre le monde
deplus les noms de method/fonction ne commence jamais par un maj en java
public void CreateJsonStats(EntityJoinWorldEvent e)=> Java Code Convention <=
et aussi a quoi sert ton systeme tu veux stocké quoi en fait ?
-
deja si c’est juste pour stocké quelques valeurs comme ca autant utiliser les properties de java…
et en plus tu a fait n’importe quoi, c’est pas comme ca que l’on utiliser la lib GSON
de plus je comprends pas pourquoi tu me parle de Javax…
pour utiliser GSON : http://www.javacreed.com/simple-gson-example/et les noms de methods/fonctions en java commence par une minuscule ainsi que les noms de variable
Je t’invite a lire la Java Code Convention afin de normaliser ton code
=> https://www.oracle.com/technetwork/java/codeconventions-150003.pdf <= -
Merci de t’es explication, c’est se que j’avais remarquer quand je JSO N Object, cela utiliser la librairie Gson et je l’apprend.
-
Voici ma solution après l’apprentissage de Gson:
package fr.silvertaurus; import fr.silvertaurus.GuiClient.GuiLife; import fr.silvertaurus.PlayerStats.CreateJsonPlayerStats; import fr.silvertaurus.proxy.CommonProxy; import fr.silvertaurus.utils.PlayerStatsSerialisationManager; import fr.silvertaurus.utils.Reference; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.MOD_VERSION) public class Main { @Mod.Instance(Reference.MOD_ID) public static Main instance; @SidedProxy(clientSide = Reference.CLIENT_PROXY, serverSide = Reference.SERVEUR_PROXY) public static CommonProxy proxy; private PlayerStatsSerialisationManager playerStatsSerialisation; public Main() { this.playerStatsSerialisation = new PlayerStatsSerialisationManager(); MinecraftForge.EVENT_BUS.register(new CreateJsonPlayerStats()); MinecraftForge.EVENT_BUS.register(new GuiLife()); } @Mod.EventHandler public void preInit(FMLPreInitializationEvent e) { proxy.preInit(); } @Mod.EventHandler public void Init(FMLInitializationEvent e) { proxy.init(); } @Mod.EventHandler public void postInit(FMLPostInitializationEvent e) { proxy.postInit(); } public PlayerStatsSerialisationManager getPlayerStatsSerialisation() { return playerStatsSerialisation; } }package fr.silvertaurus.utils; import net.minecraft.client.Minecraft; public class PlayerStatsJson { private String playerName; private int level; private int experience; public PlayerStatsJson(String playerName, int level, int experience) { this.playerName = playerName; this.level = level; this.experience = experience; } public int getExperience() { return experience; } public String getPlayerName() { return playerName; } public int getLevel() { return level; } }package fr.silvertaurus.PlayerStats; import com.google.gson.JsonObject; import fr.silvertaurus.Main; import fr.silvertaurus.utils.JsonFileManager; import fr.silvertaurus.utils.PlayerStatsJson; import fr.silvertaurus.utils.PlayerStatsSerialisationManager; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.io.*; public class CreateJsonPlayerStats { @SubscribeEvent public void onPlayerJoinEvent(EntityJoinWorldEvent e) throws IOException { if(e.getEntity() instanceof EntityPlayer) { File file = new File("./LifeGui/JsonPlayer/"+e.getEntity().getUniqueID()+".json"); PlayerStatsSerialisationManager playerStatsSerialisationManager = Main.instance.getPlayerStatsSerialisation(); if(file.exists()) { String json = JsonFileManager.loadFile(file); PlayerStatsJson playerStatsJson = playerStatsSerialisationManager.deserialise(json); } else { PlayerStatsJson playerStatsJson = new PlayerStatsJson(e.getEntity().getName(), 0, 0); String json = playerStatsSerialisationManager.serialise(playerStatsJson); JsonFileManager.saveFile(file, json); } } } }package fr.silvertaurus.utils; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class PlayerStatsSerialisationManager { private Gson gson; public PlayerStatsSerialisationManager() { this.gson = new Gson(); } private Gson GsonCreateInstance() { return new GsonBuilder() .setPrettyPrinting() .serializeNulls() .disableHtmlEscaping() .create(); } public String serialise(PlayerStatsJson playerStatsJson) { return this.gson.toJson(playerStatsJson); } public PlayerStatsJson deserialise(String json) { return this.gson.fromJson(json, PlayerStatsJson.class); } }package fr.silvertaurus.utils; import com.google.gson.JsonObject; import java.io.*; public class JsonFileManager { public static void createFile(File file) throws IOException { if(!file.exists()) { file.getParentFile().mkdirs(); file.createNewFile(); return; } } public static void saveFile(File file, String text) throws IOException { final FileWriter fw; createFile(file); fw = new FileWriter(file); fw.write(text); fw.flush(); fw.close(); } public static String loadFile(File file) throws IOException { if(file.exists()) { final BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); final StringBuilder text = new StringBuilder(); String line; while((line = bufferedReader.readLine()) != null) { text.append(line); } bufferedReader.close(); return text.toString(); } return ""; } } -
mouais c’est pas encore ca…
sinon Gson#fromJson pour recupérer un instance d’un PlayerStats a partir d’un fichier
et Gson#toJson pour convertir l’instance de class en text json que tu peux apres stocker dans un fichier