Faire une astuce random



  • Bonjour !

    Je cherche à faire des astuces random comme sur beaucoup de jeux, le problème c'est que je n'y arrive pas !

    Je me suis renseigner du côté du splash text mais rien ! Il ne me charge pas le splash.txt

    PS: Je passe par une classe intermédiaire (inutile je pense), mais bon:

    GuiAstuces:

    :::

    package net.viruz.client;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Random;
    
    import org.apache.commons.io.Charsets;
    
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.util.ResourceLocation;
    
    public class GuiAstuces extends GuiScreen
    {
    /** The RNG used by the Main Menu Screen. */
    private static final Random rand = new Random();
    
    /** The splash message. */
    public static String splashText = "Erreur lors du chargement des astuces de jeu";
    private static final ResourceLocation splashTexts = new ResourceLocation("texts/splashes.txt");
    
    public GuiAstuces()
    {
    BufferedReader bufferedreader = null;
    String s;
    
    try
    {
    ArrayList arraylist = new ArrayList();
    bufferedreader = new BufferedReader(new InputStreamReader(Minecraft.getMinecraft().getResourceManager().getResource(splashTexts).getInputStream(), Charsets.UTF_8));
    
    while ((s = bufferedreader.readLine()) != null)
    {
    s = s.trim();
    
    if (!s.isEmpty())
    {
    arraylist.add(s);
    }
    }
    
    do
    {
    this.splashText = (String)arraylist.get(rand.nextInt(arraylist.size()));
    }
    while (this.splashText.hashCode() == 125780783);
    }
    catch (IOException ioexception)
    {
    ;
    }
    finally
    {
    if (bufferedreader != null)
    {
    try
    {
    bufferedreader.close();
    }
    catch (IOException ioexception1)
    {
    ;
    }
    }
    }
    
    }
    
    }
    
    

    :::

    GuiConnexion dans drawString:

    :::

    GL11.glPushMatrix();
    GL11.glTranslatef((float)(this.width / 2 + 90), 70.0F, 0.0F);
    GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F);
    float f1 = 1.8F - MathHelper.abs(MathHelper.sin((float)(Minecraft.getSystemTime() % 1000L) / 1000.0F * (float)Math.PI * 2.0F) * 0.1F);
    f1 = f1 * 100.0F / (float)(this.fontRenderer.getStringWidth(GuiAstuces.splashText) + 32);
    GL11.glScalef(f1, f1, f1);
    this.drawCenteredString(this.fontRenderer, GuiAstuces.splashText, 0, -8, 16776960);
    GL11.glPopMatrix();
    

    :::

    Mais à chaque fois mon message "Erreur lors du chargement des astuces de jeu" qui s'affiche et j'ai pas d'erreur dans la console

    Merci si vous pouvez me filer un coup de main !


  • Modérateurs

    Remplace ```java
    catch (IOException ioexception)
    {
    ;
    }

    par
    ```java
    catch (IOException ioexception)
    {
    ioexception.printStackTrace();
    }
    

    Histoire que l'on voit les erreurs 😉



  • Ok je test


    EDIT: Je l'ai fait, mais pas d'erreurs ! WTF ?


    EDIT: Voilà la console:

    :::

    mars 13, 2014 9:38:20 PM net.minecraft.launchwrapper.LogWrapper log
    Infos: Loading tweak class name cpw.mods.fml.common.launcher.FMLTweaker
    mars 13, 2014 9:38:20 PM net.minecraft.launchwrapper.LogWrapper log
    Infos: Using primary tweak class name cpw.mods.fml.common.launcher.FMLTweaker
    mars 13, 2014 9:38:20 PM net.minecraft.launchwrapper.LogWrapper log
    Infos: Calling tweak class cpw.mods.fml.common.launcher.FMLTweaker
    2014-03-13 21:38:20 [Infos] [ForgeModLoader] Forge Mod Loader version 6.4.49.965 for Minecraft 1.6.4 loading
    2014-03-13 21:38:20 [Infos] [ForgeModLoader] Java is Java HotSpot(TM) Client VM, version 1.7.0_45, running on Windows 8:x86:6.2, installed at C:\Program Files (x86)\Java\jre7
    2014-03-13 21:38:20 [Infos] [ForgeModLoader] Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation
    2014-03-13 21:38:20 [Infos] [ForgeModLoader] Loading tweak class name cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
    2014-03-13 21:38:20 [Infos] [ForgeModLoader] Loading tweak class name cpw.mods.fml.common.launcher.FMLDeobfTweaker
    2014-03-13 21:38:20 [Infos] [ForgeModLoader] Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
    2014-03-13 21:38:20 [Infos] [ForgeModLoader] Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
    2014-03-13 21:38:20 [Infos] [ForgeModLoader] Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
    2014-03-13 21:38:20 [Infos] [STDOUT] Loaded 40 rules from AccessTransformer config file fml_at.cfg
    2014-03-13 21:38:20 [Grave] [ForgeModLoader] The binary patch set is missing. Either you are in a development environment, or things are not going to work!
    2014-03-13 21:38:21 [Infos] [ForgeModLoader] Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
    2014-03-13 21:38:21 [Infos] [STDOUT] Loaded 110 rules from AccessTransformer config file forge_at.cfg
    2014-03-13 21:38:21 [Infos] [ForgeModLoader] Calling tweak class cpw.mods.fml.common.launcher.FMLDeobfTweaker
    2014-03-13 21:38:21 [Infos] [ForgeModLoader] Launching wrapped minecraft {net.minecraft.client.main.Main}
    2014-03-13 21:38:22 [Infos] [Minecraft-Client] Setting user: TheAmateis
    2014-03-13 21:38:23 [Infos] [Minecraft-Client] LWJGL Version: 2.9.0
    2014-03-13 21:38:23 [Infos] [Minecraft-Client] Reloading ResourceManager: Default
    2014-03-13 21:38:24 [Infos] [MinecraftForge] Attempting early MinecraftForge initialization
    2014-03-13 21:38:24 [Infos] [STDOUT] MinecraftForge v9.11.1.965 Initialized
    2014-03-13 21:38:24 [Infos] [ForgeModLoader] MinecraftForge v9.11.1.965 Initialized
    2014-03-13 21:38:24 [Infos] [STDOUT] Replaced 111 ore recipies
    2014-03-13 21:38:24 [Infos] [MinecraftForge] Completed early MinecraftForge initialization
    2014-03-13 21:38:24 [Infos] [ForgeModLoader] Reading custom logging properties from C:\Users\Jean-Baptiste\Desktop\Modding\JAVA\ViruZ Core Forge 1.6.4_9.11.1.953\forge\mcp\jars\config\logging.properties
    2014-03-13 21:38:24 [Désactivé] [ForgeModLoader] Logging level for ForgeModLoader logging is set to ALL
    2014-03-13 21:38:25 [Infos] [ForgeModLoader] Searching C:\Users\Jean-Baptiste\Desktop\Modding\JAVA\ViruZ Core Forge 1.6.4_9.11.1.953\forge\mcp\jars\mods for mods
    2014-03-13 21:38:27 [Infos] [ForgeModLoader] Forge Mod Loader has identified 4 mods to load
    2014-03-13 21:38:27 [Infos] [mcp] Activating mod mcp
    2014-03-13 21:38:27 [Infos] [FML] Activating mod FML
    2014-03-13 21:38:27 [Infos] [Forge] Activating mod Forge
    2014-03-13 21:38:27 [Infos] [ViruZ] Activating mod ViruZ
    2014-03-13 21:38:27 [Avertissement] [Forge Mod Loader] Mod Forge Mod Loader is missing a pack.mcmeta file, things may not work well
    2014-03-13 21:38:27 [Avertissement] [Minecraft Forge] Mod Minecraft Forge is missing a pack.mcmeta file, things may not work well
    2014-03-13 21:38:27 [Avertissement] [ViruZ] Mod ViruZ is missing a pack.mcmeta file, things may not work well
    2014-03-13 21:38:27 [Infos] [Minecraft-Client] Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:ViruZ
    2014-03-13 21:38:27 [Infos] [ForgeModLoader] Registering Forge Packet Handler
    2014-03-13 21:38:27 [Infos] [ForgeModLoader] Succeeded registering Forge Packet Handler
    2014-03-13 21:38:27 [Infos] [ForgeModLoader] Configured a dormant chunk cache size of 0
    2014-03-13 21:38:28 [Grave] [Minecraft-Client] Using missing texture, unable to load: viruz:textures/blocks/presents.png
    2014-03-13 21:38:28 [Grave] [Minecraft-Client] Using missing texture, unable to load: minecraft:textures/blocks/MISSING_ICON_TILE_511_NormalWardrobe.png
    2014-03-13 21:38:29 [Infos] [ForgeModLoader] Forge Mod Loader has successfully loaded 4 mods
    2014-03-13 21:38:29 [Avertissement] [Forge Mod Loader] Mod Forge Mod Loader is missing a pack.mcmeta file, things may not work well
    2014-03-13 21:38:29 [Avertissement] [Minecraft Forge] Mod Minecraft Forge is missing a pack.mcmeta file, things may not work well
    2014-03-13 21:38:29 [Avertissement] [ViruZ] Mod ViruZ is missing a pack.mcmeta file, things may not work well
    2014-03-13 21:38:29 [Infos] [Minecraft-Client] Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:ViruZ
    2014-03-13 21:38:29 [Grave] [Minecraft-Client] Using missing texture, unable to load: viruz:textures/blocks/presents.png
    2014-03-13 21:38:29 [Grave] [Minecraft-Client] Using missing texture, unable to load: minecraft:textures/blocks/MISSING_ICON_TILE_511_NormalWardrobe.png
    2014-03-13 21:38:29 [Infos] [STDOUT]
    2014-03-13 21:38:29 [Infos] [STDOUT] Starting up SoundSystem…
    2014-03-13 21:38:30 [Infos] [STDOUT] Initializing LWJGL OpenAL
    2014-03-13 21:38:30 [Infos] [STDOUT] (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org)
    2014-03-13 21:38:30 [Infos] [STDOUT] OpenAL initialized.
    2014-03-13 21:38:30 [Infos] [STDOUT]
    2014-03-13 21:38:30 [Grave] [Minecraft-Client] Realms: Server not available!

    :::



  • Tu as bien remplacé aux deux places ?



  • Oui je l'ai fait !



  • Pas d'idées ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Tu as ouvert le gui avant de regarder les logs ?



  • Je je l'ai fait ! Je re-teste


    Oui et toujours rien !


  • Moddeurs confirmés

    Ouille ouille ouille que ça pique xD

    Normalement il n'y a que ta classe qui charge le spashtext qui est censé la modifier non ?
    Alors pourquoi la mettre en public ?
    Ne te pose même pas cette question, tu n'as pas besoin de stocker cette variable, écrit quand même la signature de la fonction getSpashText(), on s'en servira un peu plus bas.

    Voila ce que fait ta classe :
    Elle ouvre le fichier
    Elle le parcours de manière séquentiel et ajoute chaque ligne a une arraylist (donc tu remplis de l'espace mémoire)
    Elle sélectionne 1 élément de cette arraylist.
    Elle supprime l'arraylist (libère de l'espace mémoire)
    Elle ferme le fichier

    A chaque fois que tu voudras régénérer une astuce aléatoire, tu devras refaire toutes les étapes que je viens de t'écrire, ça fait long, très long. En fait, tu ne stocks pas le bon attribut.
    Pourquoi est ce que tu ne stockerai pas ton ArrayList ? Et a chaque fois que tu appels la méthode getSplashText(), tu retournes un élément au pif de ta liste.

    Il y a d'autre chose discutable sur ta classe :

    • Ton objet random qui ne sert a rien, tu as une fonction Math.random() qui fait exactement la même chose, sauf que tu ne génères pas d'objet inutile.
    • Les collections en Java sont génériques. Ici ce n'est pas une ArrayList d'object que tu veux, c'est une ArrayList de String.
      Donc ArrayList <string>arrayList = new ArrayList<string>();
      Comme ça, tu ne cast pas ton objet à la sortie et tu es sur de ne pouvoir mettre QUE des chaines de caractère dans cette liste.
    • De la manière dont tu implémenteras cette classe si tu suis mes conseils vis à vis des attributs, si tu fais un getSpashText() sans avoir instancier une première fois ta classe, tu planteras avec un magnifique NullPointerException.
      Je vais te donner un résumé de ce que doit contenir ta classe, ça répondra a ce problème en même temps :
    Attribut :
    - private static GuiAstuces instance;
    - private ArrayList <string>arrayList;
    
    Constructeur :
    - private GuiAstuces() { … tu initialises ton ArrayList comme tu le fait actuellement puis tu fais this.instance = this;}
    
    Methode :
    - public String getSpashText() { return arrayList.get((int) (Math.random*arrayList.size())); }
    
    Methode static :
    - public static synchronized GuiAstuces getInstance() {
    if(instance == null) this.instance = new GuiAstuces();
    return instance;}
    

    Ensuite tu utilises ta classe de la manière suivante :

    GuiAstuces.getInstance().getSplashText();
    

    Si tu veux des explications vis a vis de cette classe, lorsque tu va appeler pour la première fois getInstance(), tu vas initialiser ton objet. Toutes les fois suivantes, tu va récupérer l'instance.
    Le mot clef synchronized est la pour les accès concurrentiels, ça évite que 2 threads n'accèdent en même temps a cette fonction.</string></string></string>



  • Merci c'est bon !


Log in to reply