Modifier à sa guise le menu F3
-
Modifier à sa guise le menu F3
-[INTRODUCTION]-
Salut tout le monde, c’est mon premier tutoriel et je vais vous montrer comme créer votre propre menu F3. Vous pourrez ajouter/enlever n’importe quelles valeurs afin de garder les plus essentielles, telles que les fps, le biome où vous vous trouvez, etc…
-[REQUIS]-
→ Avoir quelque bases en Java au niveau de la POO
→ Avoir créer au préalable toutes les classes nécessaire : Classe Principale Client Proxy & CommonProxy-[SOMMAIRE]-
1) Créations des events
2) Enregistrement de l’ EventHandler▬▬▬ BONUS ▬▬▬
- Insérer une image
1] Création de l’ EventHandler
Tout d’abord créer une classe que vous appellerez comme vous voudrez, le plus pro et le plus commun à tous les mods, je trouve est : EventHandler. Une fois cela fait rendez vous y et nous allons y ajouter les 2 méthodes suivantes :
@SideOnly(SIDE.CLIENT) @SubscribeEvent public void onRenderPre(RenderGameOverlayEvent.Pre event) { } public void drawString(FontRenderer par1FontRenderer, String par2Str, int par3, int par4, int par5) { par1FontRenderer.drawStringWithShadow(par2Str, par3, par4, par5); }
Maintenant je vais vous expliquer bien gentiment tout ce code. Notre première méthode est précédée de deux annotations :
- SideOnly(SIDE.CLIENT) permet de faire en sorte que la méthode ne soit exécutée qu’en Client et non sur les 2 Sides.
- SubscribeEvent, qui permet au jeu de savoir que la méthode qui suit est une méthode d’un event.
C’est dans cette méthode que nous allons ajouter tout ce qui concerne le nouvel F3. J’ai ajouté une deuxième méthode qui elle ne sera utilisée que dans la suite de ce tutoriel. Maintenant si vous placez directement tout votre code dedans il y aura un énorme bug d’affichage et tout l’HUD disparaîtra. Pour mieux comprendre veuillez ajouter cette petite (mais très importante ^^) condition à la suite de la méthode onRenderPre :
if(event.type == RenderGameOverlayEvent.ElementType.DEBUG) { event.setCanceled(true); }
En fait l’event RenderGameOverlay modifiera tout ce qui doit être affiché à l’écran du joueur, donc si vous ne filtrez pas ce qui doit être modifié tout disparaîtra ! C’est pourquoi vous être obligé de placer cette condition. Par-exemple, si vous souhaitez modifier la barre de faim, il faudra remplacer DEBUG par FOOD.
Petite astuce : Si faites ctrl + barre espace tout en ayant sélectionné FOOD, vous pourrez alors voir tout ce qui est modifiable à l’HUD. La méthode setCanceled(boolean isCanceled) permet de supprimer le résultat de l’event.
Trêves de bavardages, reprenons le fil du tuto ! La suite est à placer dans la condition, il s’agit de tout ce qui composera votre nouveau F3.
Je vais vous montrer plusieurs codes : Afficher le nombre de fps, le biome dans lequel le joueur se trouve et enfin la direction dans lequel le joueur regarde.Pour ce qui est des fps il va vous falloir avoir une instance de la classe Minecraft à l’aide d’une des deux méthodes suivantes : Minecraft.getMinecraft() ou FMLClientHandler.instance().getClient()
Une fois cette variable inscrite voici le code permettant de récupérer le nombre de fps : mc.debug.split(“,”, 2)[0];
Une fois cela fait vous pourrez alors l’afficher à l’écran via la deuxième méthode que je vous ai montrée au début de ce tutoriel :
this.drawString(Minecraft.getMinecraft().fontRenderer, fpsString, 10, 50, 14737632);Le premier argument est la police de l’écriture, le deuxième est le texte à afficher, le 3ème est la position x, le 4ème est la position y, puis enfin le dernier est la couleur.
En revanche on peut aussi colorer le texte en se servant de la classe EnumChatFormatting.Pour ce qui est des biomes voici la méthode : mc.theWorld.getBiomeGenForCoords(x, z).biomeName;
Enfin voici le code pour get la direction :
int var1 = MathHelper.floor_double((double) (event.entityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; directions = Direction.directions[var1];
Voilà c’est tout pour cette première partie, passons désormais à l’enregistrement
2] Enregistrement de l’ EventHandler
Pour enregistrer une classe possédant des events, rien de plus simple, ajoutez cette ligne dans votre méthode init de votre classe principale : MinecraftForge.EVENT_BUS.register(new EventHandler());
L’event RenderGameOverlay et un event forge et non FML, c’est pour cela que nous choisissons cette méthode. Ma classe s’appelle EventHandler, en revanche si la votre est différente, changez.▬▬▬ IMAGE ▬▬▬
-
Salut, très bon tutoriel, merci ! Juste une petite question : il y a t’il un moyen de récupérer le compteur d’entités du menu F3 ( E : x) ?
-
Salut, ceci je pense
this.drawString(Minecraft.getMinecraft().fontRenderer, Minecraft.getMinecraft().getEntityDebug(), 10, 70, 16777215);
Au passage, je n’ai pas vérifié les coordonnées. Donc change les si ils ne te conviennent pas
-
Merci pour ta réponse rapide !
Il me renvoie une petite erreur en me proposant d’ajouter des “cast” “: The method getEntityDebug() is undefined for the type Minecraft”
J’ai oublié de préciser, je suis en 1.8 ! -
En 1.8, soit tu peux utiliser Minecraft.getMinecraft().getDebugInfoEntities() qui va afficher “E: 0/1, B: 0, I: 1” ou alors tu peux utiliser la réfraction pour accéder aux variables countEntitiesRendered, countEntitiesTotal et countEntitiesHidden.
-
Encore une fois, il me propose des casts
En tout cas merci de ta réponse ! -
Envoi ton code et l’erreur affichée
-
Bon, je viens juste de trouver un moyen :
e = mc.renderGlobal.getDebugInfoEntities(); e= e.substring(3, 4);
Je ne suis pas sur que ce soit le plus optimisé, mais en tout cas ça fais son traivail ^^"
Merci beaucoup de votre aide ! -
c’est pas du tout optimisé, utilise la réflection
-
Okay, je vais essayer, merci !
-
le plus pro et le plus commun à tous les mods, je trouve est : EventHandler.
-> Source ?? … c’est totalement faux
public void drawString(FontRenderer par1FontRenderer, String par2Str, int par3, int par4, int par5)
-> Pourquoi la signature n’est pas explicite ?
RenderGameOverlayEvent.Text possède 2 liste qu’il suffit de modifier pour changer l’affichage du f3 sans casser la compatibilité avec d’autre mods.
-
En quoi je casse la compatibilité avec d’autres mods ? Je connais peu de mods qui modifie le f3 perso…
Et aussi balade toi sur plein de github de mod forge open-source, tu verras par toi même que les moddeurs préfèrent placer leurs event dans des classes à part
Sources :
-https://github.com/OG-Kloud/Traders/tree/master/src/main/java/net/kloudspace/trades/event/handlers
-https://github.com/micdoodle8/Galacticraft/tree/master/src/main/java/micdoodle8/mods/galacticraft/core/event
-https://github.com/micdoodle8/Galacticraft/tree/master/src/main/java/micdoodle8/mods/galacticraft/core/eventVoilà, et encore j’ai pris les plus connus. J’avais pas envie de perdre mon temps sur cette page, alors si ça te dit, amuse-toi encore à en trouver
https://github.com/agaricusb/ForgeMod/wiki/List-of-Open-Source-Forge-Mods -
- https://github.com/joshiejack/Mariculture
- https://github.com/FlansMods/FlansMod
- https://github.com/BuildCraft/BuildCraft
etc etc…
Mettre tout les handlers dans une même classe sans se soucier du regroupement fonctionnel, c’est une aberration en POO.
Si je veux travailler sur un handler RenderEvent et qu’un collègue travaille sur un handler PlayerInterractEvent, on édite le même fichier ? Donc on génère potentiellement des conflits ? Si j’ai besoin d’un attribut pour mon RenderEvent, je le laisse accessible aux autre events qui n’en n’ont absolument pas besoin ? Malgré le principe d’encapsulation ?En quoi je casse la compatibilité avec d’autres mods ? Je connais peu de mods qui modifie le f3 perso…
Tu connais tout les mods et tout les futurs mods ? En supprimant le F3 de cette manière tout les mods qui utilise un event qui modifie l’ecran de debug F3 seront inutilisable. Tu rends ton mod incompatible avec les autres, c’est pas une question de dire si tu en connais ou pas.
-
Ok très bien, merci de ces explications
Je vais regarder de + près RenderGameOverlayEvent.Text et les 2 listes que tu m’as dit. SI j’arrive à faire fonctionner le tout, j’éditerai le tuto -
J’ai fait sa
@SideOnly(Side.CLIENT) @SubscribeEvent public void onRenderPre(RenderGameOverlayEvent.Pre event) { if(event.type == RenderGameOverlayEvent.ElementType.DEBUG) { event.setCanceled(true); this.drawString(Minecraft.getMinecraft().fontRenderer, EnumChatFormatting.RED.toString() + toString(), 10, 50, 14737632); } } public void drawString(FontRenderer par1FontRenderer, String fpsString, int par3, int par4, int par5) { Minecraft mc = FMLClientHandler.instance().getClient(); fpsString = mc.debug.split(",", 2)[0]; fpsString = mc.theWorld.getBiomeGenForCoords(par3, par4).biomeName; fpsString = Direction.directions[par5]; par1FontRenderer.drawStringWithShadow(fpsString, par3, par4, par5); }
et le jeu crash
crash reportjava.lang.ArrayIndexOutOfBoundsException: 14737632 at ed.enderdeath.mod.Event.EnchantForge.drawString(EnchantForge.java:447) ~[EnchantForge.class:?] at ed.enderdeath.mod.Event.EnchantForge.onRenderPre(EnchantForge.java:438) ~[EnchantForge.class:?] at cpw.mods.fml.common.eventhandler.ASMEventHandler_17_EnchantForge_onRenderPre_Pre.invoke(.dynamic) ~[?:?] at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) ~[ASMEventHandler.class:?] at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) ~[EventBus.class:?] at net.minecraftforge.client.GuiIngameForge.pre(GuiIngameForge.java:901) ~[GuiIngameForge.class:?] at net.minecraftforge.client.GuiIngameForge.renderHUDText(GuiIngameForge.java:643) ~[GuiIngameForge.class:?] at net.minecraftforge.client.GuiIngameForge.renderGameOverlay(GuiIngameForge.java:158) ~[GuiIngameForge.class:?] at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1114) ~[EntityRenderer.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1067) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_71] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_71] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_71] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_71] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?] at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?] at GradleStart.main(Unknown Source) [start/:?] [20:17:47] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: –-- Minecraft Crash Report ---- // Oops. Time: 17/04/16 20:17 Description: Unexpected error java.lang.ArrayIndexOutOfBoundsException: 14737632 at ed.enderdeath.mod.Event.EnchantForge.drawString(EnchantForge.java:447) at ed.enderdeath.mod.Event.EnchantForge.onRenderPre(EnchantForge.java:438) at cpw.mods.fml.common.eventhandler.ASMEventHandler_17_EnchantForge_onRenderPre_Pre.invoke(.dynamic) at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) at net.minecraftforge.client.GuiIngameForge.pre(GuiIngameForge.java:901) at net.minecraftforge.client.GuiIngameForge.renderHUDText(GuiIngameForge.java:643) at net.minecraftforge.client.GuiIngameForge.renderGameOverlay(GuiIngameForge.java:158) at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1114) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1067) at net.minecraft.client.Minecraft.run(Minecraft.java:962) at net.minecraft.client.main.Main.main(Main.java:164) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) at GradleStart.main(Unknown Source) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Stacktrace: at ed.enderdeath.mod.Event.EnchantForge.drawString(EnchantForge.java:447) at ed.enderdeath.mod.Event.EnchantForge.onRenderPre(EnchantForge.java:438) at cpw.mods.fml.common.eventhandler.ASMEventHandler_17_EnchantForge_onRenderPre_Pre.invoke(.dynamic) at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) at net.minecraftforge.client.GuiIngameForge.pre(GuiIngameForge.java:901) at net.minecraftforge.client.GuiIngameForge.renderHUDText(GuiIngameForge.java:643) at net.minecraftforge.client.GuiIngameForge.renderGameOverlay(GuiIngameForge.java:158) -- Affected level -- Details: Level name: MpServer All players: 1 total; [EntityClientPlayerMP['Player791'/237, l='MpServer', x=-890,71, y=5,62, z=-950,14]] Chunk stats: MultiplayerChunkCache: 125, 125 Level seed: 0 Level generator: ID 01 - flat, ver 0\. Features enabled: false Level generator options: Level spawn location: World: (-864,4,-823), Chunk: (at 0,0,9 in -54,-52; contains blocks -864,0,-832 to -849,255,-817), Region: (-2,-2; contains chunks -64,-64 to -33,-33, blocks -1024,0,-1024 to -513,255,-513) Level time: 19814 game time, 19814 day time Level dimension: 0 Level storage version: 0x00000 - Unknown? Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) Level game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: false Forced entities: 103 total; [EntitySkeleton['Skeleton'/13, l='MpServer', x=-968,13, y=4,00, z=-934,66], EntitySkeleton['Skeleton'/14, l='MpServer', x=-969,09, y=4,00, z=-936,44], EntityCreeper['Creeper'/15, l='MpServer', x=-960,50, y=4,00, z=-908,50], EntitySpider['Spider'/23, l='MpServer', x=-944,28, y=4,00, z=-1006,47], EntitySkeleton['Skeleton'/24, l='MpServer', x=-949,78, y=4,00, z=-978,28], EntityZombie['Zombie'/25, l='MpServer', x=-958,50, y=4,00, z=-942,50], EntitySpider['Spider'/33, l='MpServer', x=-942,34, y=4,00, z=-1015,22], EntitySpider['Spider'/34, l='MpServer', x=-935,41, y=4,00, z=-947,53], EntitySpider['Spider'/35, l='MpServer', x=-943,28, y=4,00, z=-895,66], EntityZombie['Zombie'/49, l='MpServer', x=-927,25, y=4,00, z=-1013,72], EntityCreeper['Creeper'/50, l='MpServer', x=-915,94, y=4,00, z=-976,44], EntityCreeper['Creeper'/51, l='MpServer', x=-912,38, y=5,00, z=-927,94], EntitySkeleton['Skeleton'/52, l='MpServer', x=-912,22, y=5,00, z=-927,06], EntitySlime['Slime'/53, l='MpServer', x=-921,88, y=6,00, z=-895,31], EntitySlime['Slime'/54, l='MpServer', x=-922,25, y=9,47, z=-894,25], EntitySkeleton['Skeleton'/55, l='MpServer', x=-915,22, y=4,00, z=-891,72], EntityArrow['arrow'/56, l='MpServer', x=-914,65, y=4,04, z=-895,84], EntityZombie['Zombie'/70, l='MpServer', x=-903,88, y=4,00, z=-1015,56], EntitySkeleton['Skeleton'/71, l='MpServer', x=-900,53, y=4,00, z=-1023,50], EntitySpider['Spider'/72, l='MpServer', x=-912,00, y=4,00, z=-1020,16], EntitySpider['Spider'/73, l='MpServer', x=-906,09, y=4,00, z=-1021,50], EntityZombie['Zombie'/74, l='MpServer', x=-898,00, y=4,00, z=-959,95], EntityZombie['Zombie'/75, l='MpServer', x=-901,02, y=4,00, z=-951,69], EntityBat['Bat'/76, l='MpServer', x=-906,25, y=7,10, z=-934,75], EntityBat['Bat'/77, l='MpServer', x=-910,75, y=7,10, z=-930,94], EntityBat['Bat'/78, l='MpServer', x=-906,63, y=7,10, z=-926,25], EntityBat['Bat'/79, l='MpServer', x=-910,72, y=7,10, z=-926,25], EntitySkeleton['Skeleton'/80, l='MpServer', x=-901,22, y=4,00, z=-920,25], EntityXPOrb['Experience Orb'/82, l='MpServer', x=-901,23, y=5,21, z=-883,91], EntityXPOrb['Experience Orb'/83, l='MpServer', x=-901,56, y=4,71, z=-884,69], EntityArrow['arrow'/84, l='MpServer', x=-900,94, y=4,00, z=-889,91], EntitySpider['Spider'/96, l='MpServer', x=-889,16, y=4,00, z=-952,92], Goblin['Goblin'/97, l='MpServer', x=-889,67, y=4,00, z=-951,56], EntitySpider['Spider'/98, l='MpServer', x=-890,92, y=4,00, z=-953,95], Goblin['Goblin'/99, l='MpServer', x=-891,33, y=4,00, z=-952,18], Goblin['Goblin'/100, l='MpServer', x=-890,68, y=4,00, z=-951,11], EntitySkeleton['Skeleton'/101, l='MpServer', x=-892,59, y=4,00, z=-938,46], EntityBat['Bat'/102, l='MpServer', x=-883,31, y=7,10, z=-920,75], EntityBat['Bat'/103, l='MpServer', x=-883,44, y=6,10, z=-917,50], EntityBat['Bat'/104, l='MpServer', x=-883,25, y=6,10, z=-916,81], EntityBat['Bat'/105, l='MpServer', x=-884,75, y=6,10, z=-916,81], EntityBat['Bat'/106, l='MpServer', x=-883,25, y=6,10, z=-916,81], EntityBat['Bat'/107, l='MpServer', x=-880,25, y=6,10, z=-916,81], EntityBat['Bat'/108, l='MpServer', x=-883,25, y=6,10, z=-916,81], EntityBat['Bat'/109, l='MpServer', x=-881,50, y=6,10, z=-916,81], EntityItem['item.item.slimeball'/110, l='MpServer', x=-891,47, y=1,13, z=-923,72], EntityArrow['arrow'/111, l='MpServer', x=-884,34, y=9,44, z=-898,06], EntityCreeper['Creeper'/126, l='MpServer', x=-878,47, y=4,00, z=-1009,51], EntityCreeper['Creeper'/127, l='MpServer', x=-874,50, y=4,00, z=-1009,50], EntitySpider['Spider'/128, l='MpServer', x=-864,13, y=4,00, z=-1014,47], EntityCreeper['Creeper'/129, l='MpServer', x=-876,50, y=4,00, z=-1006,50], EntityBat['Bat'/130, l='MpServer', x=-879,25, y=6,10, z=-929,75], EntitySlime['Slime'/131, l='MpServer', x=-875,13, y=6,00, z=-928,67], EntityBat['Bat'/132, l='MpServer', x=-878,81, y=7,10, z=-927,25], EntityBat['Bat'/133, l='MpServer', x=-878,81, y=7,10, z=-918,34], EntityZombie['Zombie'/134, l='MpServer', x=-873,47, y=5,00, z=-926,16], EntitySheep['Sheep'/136, l='MpServer', x=-867,81, y=4,00, z=-890,63], EntityCreeper['Creeper'/137, l='MpServer', x=-865,50, y=4,00, z=-873,50], EntityCreeper['Creeper'/138, l='MpServer', x=-869,50, y=4,00, z=-877,50], EntitySkeleton['Skeleton'/142, l='MpServer', x=-849,50, y=4,00, z=-949,50], EntitySpider['Spider'/143, l='MpServer', x=-853,53, y=4,00, z=-938,78], EntitySlime['Slime'/144, l='MpServer', x=-850,57, y=6,00, z=-917,13], EntityChicken['Chicken'/145, l='MpServer', x=-853,53, y=5,00, z=-915,44], Robber['Robber'/146, l='MpServer', x=-862,66, y=5,00, z=-920,41], EntityVillager['Villager'/147, l='MpServer', x=-858,84, y=5,00, z=-919,69], EntityZombie['Zombie'/148, l='MpServer', x=-860,50, y=5,00, z=-925,50], EntityZombie['Zombie'/149, l='MpServer', x=-855,69, y=4,00, z=-919,50], EntityVillager['Villager'/150, l='MpServer', x=-860,69, y=5,00, z=-927,69], EntityZombie['Zombie'/151, l='MpServer', x=-863,50, y=5,00, z=-921,50], Goblin['Goblin'/152, l='MpServer', x=-854,36, y=4,00, z=-926,50], EntityCow['Cow'/153, l='MpServer', x=-851,33, y=5,00, z=-903,79], EntityBat['Bat'/154, l='MpServer', x=-855,73, y=4,00, z=-894,15], EntityCow['Cow'/155, l='MpServer', x=-850,88, y=4,00, z=-881,91], EntitySlime['Slime'/160, l='MpServer', x=-840,46, y=5,00, z=-974,04], EntitySheep['Sheep'/161, l='MpServer', x=-835,59, y=4,00, z=-902,22], EntityBat['Bat'/162, l='MpServer', x=-850,93, y=9,03, z=-913,33], EntityPig['Pig'/163, l='MpServer', x=-833,50, y=4,00, z=-888,28], EntityCow['Cow'/164, l='MpServer', x=-839,13, y=4,00, z=-891,94], EntitySheep['Sheep'/165, l='MpServer', x=-839,91, y=4,00, z=-885,97], EntityPig['Pig'/166, l='MpServer', x=-832,25, y=4,00, z=-887,88], EntitySkeleton['Skeleton'/168, l='MpServer', x=-837,50, y=4,00, z=-872,50], EntityZombie['Zombie'/169, l='MpServer', x=-836,25, y=4,00, z=-878,22], EntityCreeper['Creeper'/171, l='MpServer', x=-824,50, y=4,00, z=-959,50], EntitySkeleton['Skeleton'/173, l='MpServer', x=-818,50, y=4,00, z=-923,50], EntitySpider['Spider'/174, l='MpServer', x=-816,25, y=4,00, z=-911,44], EntityHorse['Horse'/175, l='MpServer', x=-819,63, y=4,00, z=-885,22], EntityHorse['Horse'/176, l='MpServer', x=-821,81, y=4,00, z=-886,09], EntityHorse['Horse'/177, l='MpServer', x=-829,66, y=4,00, z=-890,84], EntityPig['Pig'/179, l='MpServer', x=-826,38, y=4,00, z=-877,34], EntityHorse['Horse'/180, l='MpServer', x=-830,81, y=4,00, z=-878,59], EntityPig['Pig'/184, l='MpServer', x=-830,09, y=4,00, z=-876,13], EntityZombie['Zombie'/186, l='MpServer', x=-813,28, y=4,00, z=-932,13], EntityZombie['Zombie'/187, l='MpServer', x=-811,88, y=4,00, z=-936,47], EntityZombie['Zombie'/190, l='MpServer', x=-815,09, y=4,00, z=-919,28], EntitySkeleton['Skeleton'/191, l='MpServer', x=-814,50, y=4,00, z=-921,50], EntitySpider['Spider'/192, l='MpServer', x=-814,44, y=4,00, z=-908,56], EntityCreeper['Creeper'/193, l='MpServer', x=-811,91, y=4,00, z=-901,41], EntityCreeper['Creeper'/194, l='MpServer', x=-814,66, y=4,00, z=-900,94], EntityHorse['Horse'/195, l='MpServer', x=-813,16, y=4,00, z=-895,75], EntitySkeleton['Skeleton'/198, l='MpServer', x=-810,66, y=4,00, z=-895,91], EntityZombie['Zombie'/239, l='MpServer', x=-912,53, y=2,10, z=-1031,56], EntitySpider['Spider'/241, l='MpServer', x=-921,13, y=3,90, z=-1025,63], EntityClientPlayerMP['Player791'/237, l='MpServer', x=-890,71, y=5,62, z=-950,14]] Retry entities: 0 total; [] Server brand: fml,forge Server type: Integrated singleplayer server Stacktrace: at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:415) at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2566) at net.minecraft.client.Minecraft.run(Minecraft.java:991) at net.minecraft.client.main.Main.main(Main.java:164) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) at GradleStart.main(Unknown Source) – System Details -- Details: Minecraft Version: 1.7.10 Operating System: Windows 8.1 (x86) version 6.3 Java Version: 1.8.0_71, Oracle Corporation Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation Memory: 875164744 bytes (834 MB) / 1046937600 bytes (998 MB) up to 1046937600 bytes (998 MB) JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1558 4 mods loaded, 4 mods active States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored UCHIJAAAA mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) UCHIJAAAA FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar) UCHIJAAAA Forge{10.13.4.1558} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar) UCHIJAAAA enderdeath{1.0} [leo01418] (bin) GL info: ' Vendor: 'NVIDIA Corporation' Version: '4.5.0 NVIDIA 350.12' Renderer: 'GeForce GTX 745/PCIe/SSE2' Launched Version: 1.7.10 LWJGL: 2.9.1 OpenGL: GeForce GTX 745/PCIe/SSE2 GL version 4.5.0 NVIDIA 350.12, NVIDIA Corporation GL Caps: Using GL 1.3 multitexturing. Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. Anisotropic filtering is supported and maximum anisotropy is 16. Shaders are available because OpenGL 2.1 is supported. Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map_client.txt) Resource Packs: [] Current Language: English (US) Profiler Position: N/A (disabled) Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used Anisotropic Filtering: Off (1) [20:17:47] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:398]: #@!@# Game crashed! Crash report saved to: #@!@# C:\Users\Eric\Desktop\EnderMod\eclipse\.\crash-reports\crash-2016-04-17_20.17.47-client.txt AL lib: (EE) alc_cleanup: 1 device not closed Java HotSpot(TM) Client VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
J’ai enlevé cette ligne
fpsString = Direction.directions[par5];
et sa marché juste pour le biome(normal )
-
Normal, regarde un peu ce que tu fais, tu as copié une fonction drawString de Minecraft, où le dernier paramètre est censé être la couleur sauf que dans ton code tu ne l’utilise pas correctement, regarde d’abord ce que tu fais
-
De plus ceci n’a aucun sens : EnumChatFormatting.RED.toString() + toString()
-
Je fait sa
@SideOnly(Side.CLIENT) @SubscribeEvent public void onRenderPre(RenderGameOverlayEvent.Pre event) { if(event.type == RenderGameOverlayEvent.ElementType.DEBUG) { Minecraft mc = Minecraft.getMinecraft(); event.setCanceled(true); this.drawString(Minecraft.getMinecraft().fontRenderer, EnumChatFormatting.RED.toString() + fpsString, 10, 50, 14737632); } } @SideOnly(Side.CLIENT) public void drawString(FontRenderer par1FontRenderer, String par2Str, int par3, int par4, int par5) { Minecraft mc = Minecraft.getMinecraft(); fpsString = mc.debug.split(",", 2)[0]; biomeString = mc.theWorld.getBiomeGenForCoords(par3, par4).biomeName; directions = Direction.directions[var25]; par1FontRenderer.drawStringWithShadow(par2Str, par3, par4, par5); } }
et sa affiche que les fps,je pense que l’erreur est toute bête mais je ne la trouve pas
-
@SideOnly(Side.CLIENT) @SubscribeEvent public void onRenderPre(RenderGameOverlayEvent.Pre event) { if(event.type == RenderGameOverlayEvent.ElementType.DEBUG) { Minecraft mc = Minecraft.getMinecraft(); event.setCanceled(true); this.drawString(Minecraft.getMinecraft().fontRenderer, mc.debug.split(",", 2)[0], 10, 50, 0xFF0000); this.drawString(Minecraft.getMinecraft().fontRenderer, mc.theWorld.getBiomeGenForCoords(mc.thePlayer.posX, mc.thePlayer.posZ).biomeName, 20, 50, 0xFF0000); } } @SideOnly(Side.CLIENT) public void drawString(FontRenderer fontRenderer, String str, int x, int y, int color) { fontRenderer.drawStringWithShadow(str, x, y, color); } }
-
Merci Robin ce cette réponse vite mais sa me fait une érreur à getBiomeGenForCoords il me propose de le changé en getBiomeGenForCoordsBody et après de le rechangé en getBiomeGenForCoords
j’ai un peux exploré getBiomeGenForCoords et c’est en int je me suis alors ou est le problème et j’ai reguardé le posX et c’était en doubleMais de ta réponse