Résolu 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 !
-
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 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 ?
-
Tu as ouvert le gui avant de regarder les logs ?
-
Je je l’ai fait ! Je re-teste
Oui et toujours rien !
-
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 fichierA 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 !